CSS Turing tamamlandı mı?


297

CSS, bildiğim kadarıyla Turing tamamlanmadı. Ancak CSS bilgim çok sınırlı.

  • CSS Turing tamamlandı mı?
  • Mevcut taslak veya komitelerden herhangi biri, şu anda değilse Turing tamlığını etkinleştirebilecek dil özelliklerini göz önünde bulunduruyor mu?

28
İe6 kullanıyorsanız zaten yapıldı. Bunlara CSS ifadeleri denir ve fikir birliği korkunç derecede kırık ve tehlikelidir. JS CSS gömülü ...
kibibu

13
@Kibibu - Yikes! Lütfen bu fikri kendi üzerine katlamadan önce beynimden silin!
DVK

CSS muhtemelen Turing-complete nasıl olabilir ?
SLaks

1
@DVK: Aslında onlarla bazı harika şeyler yapabilirsiniz - özellikle çözünürlük bağımsız düzen ile ilgili olarak - tablolara başvurmadan CSS'de hala zor veya ilginç. Komut dosyası motoruna tam erişime izin vermek yerine kesinlikle hiçbir yan etkisi olmayan bir beyan ifadesi diliyle sınırlı olsaydı daha iyi alınmış olurdu (ve belki de webkit ilk önce
gelseydi

5
@SLaks: HTML5 / CSS3'ün gücünü hafife almayın :)
Niklas B.

Yanıtlar:


385

Kural 110'u CSS3'te kodlayabilirsiniz , bu nedenle uygun bir eşlik eden HTML dosyası ve kullanıcı etkileşimlerinin CSS'nin "yürütülmesinin" bir parçası olduğunu düşündüğünüz sürece Turing tamamlanır . Bir oldukça iyi uygulama mevcuttur ve başka uygulama burada bulunmaktadır:

body {
    -webkit-animation: bugfix infinite 1s;
    margin: 0.5em 1em;
}
@-webkit-keyframes bugfix { from { padding: 0; } to { padding: 0; } }

/*
 * 111 110 101 100 011 010 001 000
 *  0   1   1   0   1   1   1   0
 */

body > input {
    -webkit-appearance: none;
    display: block;
    float: left;
    border-right: 1px solid #ddd;
    border-bottom: 1px solid #ddd;
    padding: 0px 3px;
    margin: 0;
    font-family: Consolas, "Courier New", monospace;
    font-size: 7pt;
}
body > input::before {
    content: "0";
}

p {
    font-family: Verdana, sans-serif;
    font-size: 9pt;
    margin-bottom: 0.5em;
}

body > input:nth-of-type(-n+30) { border-top: 1px solid #ddd; }
body > input:nth-of-type(30n+1) { border-left: 1px solid #ddd; clear: left; }

body > input::before { content: "0"; }

body > input:checked::before { content: "1"; }
body > input:checked { background: #afa !important; }


input:not(:checked) +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "1";
}
input:not(:checked) +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fa0;
}


input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "1";
}
input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fa0;
}


input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "1";
}
input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fa0;
}

input:checked + input:checked + input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "0";
}
input:checked + input:checked + input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fff;
}

input:not(:checked) + input:not(:checked) + input:not(:checked) +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "0";
}
input:not(:checked) + input:not(:checked) + input:not(:checked) +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fff;
}

body > input:nth-child(30n) { display: none !important; }
body > input:nth-child(30n) + label { display: none !important; }
<p><a href="http://en.wikipedia.org/wiki/Rule_110">Rule 110</a> in (webkit) CSS, proving Turing-completeness.</p>

<!-- A total of 900 checkboxes required -->
<input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/>


2
Turing Machine'in resmi tanımı (en basit), bir dizi durum kümesi, sembol seti, başlangıç ​​durumu, kabul edilen durum kümesi ve bir geçiş fonksiyonudur. İçinde krank yok. Hesaplama ile kastedilen birisinin, tam olarak bu durumda tıklatmaya benzeyen bant üzerine geçiş işlevini sadık bir şekilde uygulaması gerektiği anlamına gelir. Daha resmi olarak, bir hesaplama modeli, birinin hesaplamayı yapmak için izlemesi gereken bir dizi kural olarak görülebilir. Bu anlamda, CSS'nin Turing-Complete olduğunu düşünüyorum.
John

2
Bu pasaj çalışmıyor gibi görünüyor (Firefox 61). Boş onay kutularının bir ızgarasını görüyorum - onları işaretlerseniz hiçbir şey olmaz.
OrangeDog

2
@John "CSS tam turing" beni huzursuz ediyor, ama "CSS sahilde birkaç kayalar kadar tam turing" ile hiçbir sorunum yok . İkinci ifade doğru olur mu?
Raphael Schmitz

1
@ R.Schmitz hayır, bu durumda insan kayaları nereye koyacağını seçiyor, bu yüzden tamamlanan insan + kayaların kombine sistemidir. Yukarıdaki CSS örneğinde, sekme + boşluk tuşlarına basma, bir geri besleme devresine benzer basit bir tekrarlama işlemidir. Bu nedenle C ++, talimatları yürütmek için bilgisayar donanımını kullanarak tamamlanıyorsa, CSS'nin talimatları yürütmek için tekrarlayan
tuşlara

İşte aynı çözümü kullanan Kural 110'un bir CodePen'i, ayrıca DRY'nin işlerine yardımcı olacak ek açıklamalar ve bazı Sass: codepen.io/laras126/pen/OYvGZj Buradaki kavramları açıklayan eşlik eden bir blog yazısı yazdım: notlaura.com/is-css -turing-complete
notlaura

89

Turing tamlığının bir yönü durma problemidir .

Bu, CSS Turing tamamlanıyorsa, bir CSS programının çalışmayı bitirip bitmeyeceğini veya sonsuza kadar döngü yapılacağını belirleyen genel bir algoritma olmadığı anlamına gelir .

Ancak CSS için böyle bir algoritma türetebiliriz! İşte burada:

  • Stil sayfası herhangi bir animasyon bildirmezse durur.

  • Animasyonları varsa, o zaman:

    • Varsa animation-iteration-countolduğunu infiniteve içeren seçici HTML eşleştirilir, o zaman olacak değil durdurmak.

    • Aksi takdirde durur.

Bu kadar. Biz sadece CSS durdurulması problemi çözmüş yana, o izler CSS edilir değil tam Turing .

(Diğer insanlar, CSS'ye rastgele JavaScript ifadeleri katıştırmaya izin veren IE 6'dan bahsetti; bu açıkça Turing tamlığını ekleyecektir. Ancak bu özellik standart değildir ve sağ aklında hiç kimse bunu kullanmaz.)


Daniel Wagner, orijinal cevapta kaçırdığım bir noktaya geldi. Animasyonları ele alırken , stil motorunun seçici eşleme veya düzen gibi diğer bölümlerinin Turing tamlığına da yol açabileceğini belirtti. Bunlar hakkında resmi bir tartışma yapmak zor olsa da, Turing tamlığının neden hala olası olmadığını anlamaya çalışacağım.

Birincisi: Tam dilleri çevirmek , özyineleme veya döngü yoluyla olsun, verileri kendi içine geri beslemenin bir yoluna sahiptir . Ancak CSS dilinin tasarımı bu geribildirime düşmandır:

  • @mediasorgular yalnızca tarayıcının kendisinin görünüm alanı boyutu veya piksel çözünürlüğü gibi özelliklerini kontrol edebilir. Bu özellikler kullanıcı etkileşimi veya JavaScript kodu (ör. Tarayıcı penceresini yeniden boyutlandırma) yoluyla değişebilir, ancak yalnızca CSS ile değiştirilemez.

  • ::beforeve ::aftersözde öğeler DOM'un bir parçası olarak kabul edilmez ve başka hiçbir şekilde eşleştirilemez.

  • Seçici birleştiriciler yalnızca geçerli öğenin üstündeki ve öncesindeki öğeleri denetleyebilir , böylece bağımlılık döngüleri oluşturmak için kullanılamazlar.

  • Fareyle üzerine geldiğinizde bir öğeyi kaydırmak mümkündür , ancak konum yalnızca fareyi hareket ettirdiğinizde güncellenir.

Bu, seçici eşleştirmenin kendi başına Turing tamamlanamayacağına ikna etmek için yeterli olmalıdır . Peki ya düzen?

Modern CSS mizanpaj algoritması, suları çamurlayan Flexbox ve Grid gibi özelliklerle çok karmaşıktır . Ancak, düzen ile sonsuz bir döngü tetiklemek mümkün olsa bile, yararlı bir hesaplama yapmak için bunu kullanmak zor olurdu. Çünkü CSS seçicileri, bu öğelerin ekranda nasıl düzenlendiğini değil, yalnızca DOM'un iç yapısını inceler. Bu nedenle , yerleşim sistemini kullanan herhangi bir Turing tamlığı kanıtı yalnızca düzene bağlı olmalıdır .

Nihayet - ve bu belki de en önemli nedenidir - tarayıcı üreticileri CSS tutarak bir ilgi var değil tam Turing . Dili kısıtlayarak, satıcılar web'i herkes için daha hızlı hale getiren akıllı optimizasyonlara izin verir . Ayrıca Google , Chrome'daki hataları aramak için tüm bir sunucu grubunu ayırır. CSS kullanarak sonsuz bir döngü yazmanın bir yolu olsaydı, muhtemelen bunu zaten bulmuş olurdu 😉


4
İnsanlar "CSS tamamlanıyor" derken "animasyonları destekleyen CSS Turing Tamamlandı" anlamına gelir. Programlama dillerini kısıtlayabilir ve mantığınızı kullanarak Tamamlanmadığını belirtebilirsiniz, ancak kısıtlamaları belirtmeniz gerekir.
philix

36
Bu cevabın komik bir "durma" tanımı kullandığını düşünüyorum - en azından soruyu sorsam kesinlikle istemem. "Her öğe için hesaplanan özelliklerin değişmeyi bıraktığı bir zaman vardır" demek için "dur" ifadesini kullanıyor gibi görünüyorsunuz; ancak "durma" ifadesinin "bildirimsel CSS'yi tüm öğelerin hesaplanan özelliklerine dönüştüren algoritmanın çalışmasını bitirmesini" istemesini istiyorum. İkinci tanım ile, sadece "animasyon yok" dan çok daha fazla argüman olması gerektiği görülmektedir.
Daniel Wagner

4
Mantığınız burada geriye. Turing bütünlüğü, durdurmanın kararsız olduğu anlamına gelmez, durdurmanın karar verilemez olduğu anlamına gelmez Turing bütünlüğü anlamına gelir.
asmeurer

3
@LambdaFairy CSS için durma sorunu nedir? Böyle bir şeyin var olduğuna inanmıyorum. Durma sorunu sadece makinelerle ilgilidir. Bugün sahip olduğumuz en güçlü hesaplama modeli Turing Machines. Bilgisayarınız Turing Makinesi (sonsuz belleksiz) kadar güçlüdür. CSS tek başına bir makine olarak tanımlanamaz. Bir tarayıcının CSS motorunu bir makine olarak tanımlayabilirsiniz, ancak o zaman bile sadece bir TM kadar güçlü olabilir. CSS Chomsky'nin hiyerarşisinde yeni bir otomat haline gelmedikçe, " CSS için sorunu durdurma" ifadesinin bir anlamı yok.
Mike Shi

3
@LambdaFairy Turing eksikliğinin bir kanıtının nasıl görüneceğini yanlış anlıyorsunuz. Durdurma probleminin bir TM tarafından kararlaştırılamadığını biliyoruz. Orijinal kanıt iddiada bulunuyor gibi görünüyor çünkü CSS tamamlamadığı durma problemini çözebilir. CSS durma problemini gerçekten çözebiliyorsa, CSS bir Turing Machine'den daha güçlüdür çünkü TM'nin yapamayacağı bir şeyi hesaplayabilir. (Church-Turing Tezi tarafından), TM / Lambda Analizinden daha güçlü bir makine yapılamayacağını biliyoruz. Bu nedenle, bu bir çelişkidir ve orijinal ifadeniz doğru değildir.
Isaac Diamond

32

Bu makaleye göre, değil . Makale ayrıca bir tane yapmak için iyi bir fikir olmadığını savunuyor.

Yorumlardan birinden alıntı yapmak için:

Bu yüzden, CSS'nin tamamlandığına inanmıyorum. CSS'de bir işlev tanımlayabilme özelliği yoktur. Bir sistemin turing işlemini tamamlayabilmesi için bir tercüman yazmak mümkün olmalıdır: çalıştırılacak programları belirten ifadeleri yorumlayan bir işlev. CSS'nin kullanıcı tarafından doğrudan erişilebilen hiçbir değişkeni yoktur; dolayısıyla CSS'de yorumlanacak programı temsil eden yapıyı modelleyemezsiniz.


4
CSS hiçbir şekilde çalıştırılamaz. Alıntı yapılan yorumu yazan kişi bunu anlamıyor gibi görünüyor. : - \
Ryan Prior

33
CSS, bir işlemciye (düzen motoru) yönelik bir talimatlar kümesidir. Bununla ilgili "yürütülebilir" olmayan şey nedir?
DVK

47
Turing-dürüstlük sadece programları istediğiniz şekilde veya bir inançla yazabiliyorsanız değil. Hesaplanabilirlik ile ilgili matematiksel bir özelliktir. Yani CSS'nin Turing-complete olduğuna inanamazsınız ya da inanamazsınız, bir kanıt gerekir. Bu durumda, kural 110 nedeniyle, CSS Turing-complete'tur.
Mikaël Mayer

15
@ MikaëlMayer - "110" yanıtında birçok yorumda belirtildiği gibi, kullanıcının bir eylem gerçekleştirmesini gerektirir. Kullanıcı işlemleri gerekliyse, kullanıcı olmadan CSS tamamlanmıyor
DVK

1
@DVK, CSS 110 örneğinin gerektirdiği yinelenen tuş basımları tam olarak bir kullanıcı "eylemi" değildir, yinelenen bir dijital devre ile gerçekleştirilebilir. Gerçek turing makineleri yürütmeyi sürmek için bir çeşit elektrik donanımı gerektirir, bu yüzden bunun nasıl farklı olduğunu görmüyorum
woojoo666

6

Turing-tamlık sadece "fonksiyonları tanımlamak" veya "ifs / loop / vb." İle ilgili değildir. Örneğin, Haskell'in "döngüsü" yoktur, lambda-hesabı "ifs" vb.'ye sahip değildir ...

Örneğin, bu site: http://experthuman.com/programming-with-nothing . Yazar Ruby kullanıyor ve sadece kapanışları olan bir "FizzBuzz" programı oluşturuyor (dize, sayı ya da bunun gibi bir şey yok) ...

İnsanların Scala üzerindeki bazı aritmetik fonksiyonları yalnızca tip sistemini kullanarak hesapladıkları örnekler vardır.

Yani, evet, bence, CSS3 + HTML tur tamamlandı (o zaman deli olmadan tam olarak gerçek bir hesaplama yapamasanız bile)


11
Haskell ve lambda-caclculus tekrar eder. CSS var mı? Malbolge'da gerçek bir hesaplama yapmak için deli olmalısın; CSS'de ne kadar çılgın olduğun önemli değil: işe yaramaz, CSS tamamlanmadı ve bu bir görüş meselesi değil.
JMCF125

11
Üzgünüz, bu sayfada başka bir yorum bulamadım. Ancak kabul edilen cevapta belirtildiği gibi, (...) kullanıcı etkileşimlerini CSS'nin “yürütülmesinin” bir parçası olarak gördüğünüz sürece Turing tamamlandı "(...). Ve bilmiyorum.
JMCF125

20
Saldırgan olma niyetinde olmadan, turing eksiksizliği kimsenin görüşüne cevap vermez.
trisweb

5
@ MaurícioSzabo Hayır, CSS3 artı HTML artı sürekli olarak simülasyonu adım atan bir insan Turing tamamlandı.
Lambda Peri

4
@LambdaFairy Bu aynı zamanda her fiziksel turing makinesi için de geçerlidir.
Miles Rout

5

Buradaki temel sorun, HTML + CSS ile yazılmış herhangi bir makinenin, kod sonsuza kadar uzun olmadıkça sonsuz sayıda adımı (yani "gerçek" özyineleme olamaz) değerlendirememesidir. Ve soru olacak bu makine ulaşmak yapılandırma Hiçinde nadımlar veya daha az ise her zaman hesap verir nsonlu.


1
Turing Machine gereksinimlerinde sonsuz döngüleri işleme yeteneğinin belirtildiğini görmüyorum. İkinci noktanız geçerli görünmüyor. Turing hesaplanabilirlik sorunlarını kanıtlamak için Turing Makinesini kullanırken, durma problemi gibi bu kurallar bir makinenin turing makinesi olup olmadığını belirlemez. Turing Machine bu hipotezi gereksinimler olarak içeriyorsa, turing makinesini kanıtlamak için kullanamazdı.
Adam Davis

4
@AdamDavis Bu tamamen geçerli bir argüman: Turing-komple formalizm için durma problemini çözen bir algoritma varsa, bu genel olarak durma problemini çözmeye eşdeğerdir. Tabii ki, bu durdurulması problem verilen biçimcilik için çözülebilir eğer, o biçimcilik gerektiğini hangi araçlar, imkansız kanıtlanmıştır değil Turing-tam olması. Bu nedenle, yalnızca sınırlı sayıda adımı değerlendirebilen tüm formalizmler CSS dahil olmak üzere Turing-complete olamaz.
00dani

3
O var değil o zaman B A eğer! B değilse, o zaman A değil ! Birincisi , doğru bir şekilde yanlış olduğunu belirttiğiniz sonucu doğrulamaktadır . İkincisi, tartışmalı olan argüman , kullandığım ve geçerli. Son yorumumda olumsuzlamanın dikkatli bir şekilde kullanılmasına dikkat edin - özellikle bu yanlışlığı önlemek için yaptım.
Lambda Fairy

1
@ woojoo666 Hayır. Durumu bir dizi kurala göre dönüştürmek, Turing tamamlanmış olmakla aynı şey değildir. Sadece sınırlı sayıda adım için yapılabilecek hiçbir şey tam olarak tamamlanamaz. Dönüşüm kuralları kümesi sadece "Sistem duruma erişecek Hmi?" Sorusunun sınırlı sayıda uygulanabilmesi durumunda. her zaman karar verilebilir ve bu nedenle Turing tamamlanmamıştır. Yalnızca sınırlı sayıda yineleme yapabilen bir hücresel otomat uygulaması asla tamamlanamaz.
Henrik Sommerland

1
“Ve, evet, ayrıca CSS tamamlanıyor” [alıntı gerekli]
Andrea Lazzarotto

4

Bu cevap doğru değil çünkü UTM ve UTM'nin (Universal Turing Machine) tanımını karıştırıyor.

Biz iyi bir cevap ama farklı bir bakış açısıyla ve geçerli üst yanıtında doğrudan kusurlarını göstermezler.


Her şeyden önce, insanın UTM olarak çalışabileceğini kabul edebiliriz. Bu demek ki

CSS + Human == UTM

O zaman CSSbölüm işe yaramaz çünkü tüm işlerHuman UTM bölümünü kim yapacak . Tıklama eylemi UTM olabilir, çünkü rastgele değil, yalnızca belirli yerlerde tıklarsınız.

CSS yerine bu metni kullanabilirim ( Kural 110 ):

000 -> 0
001 -> 1
010 -> 1
011 -> 1
100 -> 0
101 -> 1
110 -> 1
111 -> 0

Eylemlerime ve sonuçlara rehberlik etmek aynı olacak. Yani bu metin UTM? Hayır, bu yalnızca diğer UTM'nin (insan veya bilgisayar) okuyabileceği ve çalıştırabileceği giriş (açıklama) değildir. Tıklama herhangi bir UTM'yi çalıştırmak için yeterlidir.


CSS eksikliğinin kritik kısmı, kendi durumunu keyfi bir şekilde değiştirme yeteneğidir, CSS tıklama üretebilirse UTM olacaktır. Tıklamalarınızın CSS için "krank" olduğu iddiası doğru değildir çünkü CSS için gerçek "krank", onu çalıştıran Layout Engine'dir ve CSS'nin UTM olduğunu kanıtlamak için yeterli olmalıdır.


Kural 110 bir UTM'dir. Metniniz Kural 110'un (muhtemelen biraz yetersiz) bir açıklamasıdır, bu nedenle evet, metnin bir (U) temsili olmasıdır.
OrangeDog

"CSS tıklama üretebilseydi" Projelerimde çok sayıda AVR mikrodenetleyici kullanıyorum. 8MHz ile sınırlı bir dahili saat kullanabilirsiniz. Alternatif olarak, harici bir kristal bağlayabilir ve 20MHz'e kadar gidebilirsiniz. Alternatif olarak sadece tamamen harici bir saat tedarik edebilirim, bu yüzden aslında kristali kullanan cpu donanımı bile değil. Yani aslında bir anahtarı ve bir parçayı devreden çıkarmak için bağlayabilirim ve bunu kelimenin tam anlamıyla düğmeye basarken bir saat olarak kullanabilirim. Bu, eğer yaparsam turun tamamlanmasını durdurduğu anlamına mı geliyor?
Cedric Mamo

1
@CedricMamo Ancak tıklamalarınız durumu değiştirir ve işe yaramayacağı bilge sadece doğru yerlere tıklamanız gerekir. Tam olarak eli.fox-epste.in/rule110-full.html adresine bakın. HERHANGİ BİR hücreyi tıklayabilirim, CSS devre dışı bırakıldıysa yine de doğru hücreleri tıklıyorum ve UTM var. Yaptığınız tek şey "sonraki" bir düğmeyi tıklamak olurdu, o zaman gerçekten CSS UTM olurdu, ama böyle bir şey olması için düğme tıklama başına çağrı olan bazı JS olması gerekir, ve bildiğimiz gibi JS IS UTM. CSS için, sonucu ve güncelleme durumunu doğru şekilde yorumlayacak bir şeye ihtiyacınız vardır.
Yankes

1
@CedricMamo herhangi bir bağlantı? Şu anda oradan birkaç örneğe bakıyorum ama benim için işe yaramıyor. Genel olarak, bazı onay kutularının CSS'sinin görünürlüğünü doğru bir şekilde anlarsam ve bir sonrakine geçmek için sekmeleri kullanırsanız ve burada tekrar CSS olmayan UTM'yi gizledik, çünkü sekme yaptığınızda tarayıcınızın bir sonraki geçerli konumu gezinmesini hesaplamasını istersiniz ve Bu karmaşık kod LOT yapmak, bu CSS kullanın ama çok daha fazlası. Bu, tarayıcınızın CSS değil UTM olduğunu kanıtladığınız anlamına gelir.
Yankes

1
@CedricMamo Ancak hücresel otomata kendi tanımında bir döngü vardır, durum geçişi tamamlandıktan sonra tekrar çalıştırılır ve tekrar vb. Bunu kaldırır ve sadece bu durum geçişini bırakırsak, bu otomata artık UTM olmayacaktır. Bu CSS ile tam olarak aynı durum olacaktır. CA'da iki adım tanımlayabiliriz R- okuma durumu ve W- yazma durumu, normal CA RWRWRWRW...sadece sahip olduğumuz CSS durumunda sonsuz sıra Ryapar ve sahip Wolmadığımız şeyleri değiştiremez , çünkü okuyamayacağımız şeyleri değiştiririz. B- O zaman yapabileceğimiz tarayıcı eylemi RBRBRBR...ancak BBBBBBkendi UTM'sinde.
Yankes

-28

CSS bir programlama dili değildir, bu nedenle turing-tamlık sorunu anlamsızdır. IE6'daki gibi programlama uzantıları CSS'ye eklenirse, yeni sentez tamamen farklı bir şeydir.

CSS sadece stillerin tanımıdır; mantığı yoktur ve yapısı düzdür.


1
Ayrıca (IIRC), birden çok çakışan (yinelenen) stil kullanıldığında hangi stillerin öncelikli olduğuna dair bazı belirsizlikler vardır. Ve sonra farklı tarayıcıların işaretleme stillerini ele alması / yorumlaması için biraz farklı yollar var.
David R Tribble

70
"CSS bir programlama dili değildir, bu nedenle turing-tamamlama sorunu anlamsızdır." Tatolojik cümleler totolojiktir.
Adam Davis

3
Cevabınızın neden bu kadar çok düştüğünü merak ediyorsanız, Prolog programlama diline bir göz atın.
edwin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.