Troff Turing tamamlandı mı?


9

Troff kullanarak hem makro tanımları destekler .deve kullanma dallanma .if(sayfaları arasında 5. ve 6. bkz Troff kullanıcı kılavuzu ). Bu iki açıdan, TeX'e çok benziyor. Ancak, Troff'ta yazılan oldukça karmaşık programları bilmiyorum (TeX için TikZ'nin aksine). Troff Turing tamamlandı mı?

Yanıtlar:


12

ESR'nin Unix Programlama Sanatı şunu iddia ediyor:

Troffu 18. bölümde daha ayrıntılı olarak inceleyeceğiz; Şimdilik, tam teşekküllü bir tercüman olmakla sınırlanan zorunlu bir mini dilin iyi bir örneği olduğunu belirtmek yeterlidir (koşullu ve özyinelemeli, ancak döngüler değil; yanlışlıkla Turing-complete).

(" m4Kasıtlı olarak Turing-complete" olduğu söylenenlerin aksine "yanlışlıkla" ).)


13

Evet, troff Turing tamamlandı. Yeterli özyineleme ve koşullu dallanmayı destekler. Kayıtları ve verileri depolamanın çeşitli yolları vardır, bu da size tekrar başka bir yol sağlar.

Turing tamlığı, son derece karmaşık programların pratik olduğu anlamına gelmez - sadece teorik olarak bir şekilde kaldırıldıklarında bir şekilde kaldırılabilirler - ve yokluğu da olmadıklarını ima etmez, bu nedenle ne troff Turing-complete hem de Karmaşık programların olmaması, bu konuda çok fazla bir şey önermez.


Turing tamlığı, genellikle, kullanıcı için yararlı bir şey anlamına gelen bir özellik değildir. Bunun anlamı, bir Turing makinesini onunla simüle edebilmenizdir , istediğinizi değil, ondan alacağınız çıktının okumayı beklediğiniz gibi bir şey olmadığını. Girdi veya çıktı, bir sayı olabilir, hatta yararlı bir şeyden ziyade bir şeyin ortaya çıkma sayısı olabilir ve benzetim yaptığınız makine çeşitleri ve programları genellikle başlangıçta zar zor anlaşılabilir.

Birçok dil ve sistem tesadüfen Turing tamamlandı, ancak bu alt kümedeki herhangi bir gerçek programlama için (örneğin, Conway'in Hayat Oyunu veya CSS) makul bir şekilde uygulanamaz ve gerçek programlama için yararlı olan bazı diller Turing tamamlanmamıştır (örneğin, Agda). Tanımlayıcı özellikler gerçekten

  • sonsuza kadar devam et
  • istediğin kadar veri hatırla
  • sonra ne yapacağını seç

Genellikle bu özellikler - özellikle fesih olmayan - muhtemelen troff dahil olmak üzere arzu edilmez. Teorik bilgisayar bilimi ve dil tasarımı dışında, Turing bütünlüğü akılda kalıcı olmasına rağmen neredeyse çok ilginç bir özellik değildir.


Evet, elbette, çok yararlı bir şey değil, ama yine de ilginç - örneğin mov talimatı bile Turing tamamlandı.
cutculus

4
@theindigamer - x86 'nin movtalimatı Turing-complete. (Arama tablolarını kullanmanıza izin veren adresleme modları nedeniyle ve aynı anımsatıcı yükleme, kaydetme ve kayıt için mov-instant için kullanılır.) Komutu mov(ör. ARM) olan diğer birçok ISA'da sadece bir reg-reg hareketi ve tam değil. (ARM'de vites değiştirebilir / döndürebilir.) Ayrıca, talimat işaretçisinin 64k kod segmentinde sarılabileceği 16 bit modunda değilseniz, aslında talimat jmpbloğunuzun etrafında bir döngü oluşturmanız gerekir mov. dolaylı döngü.
Peter Cordes

6

2
@PeterCordes: Ah; eski günlerde bellek eşlemli ALU'lara sahip IP mimarileri ve IP sadece başka bir kayıttı, bu yüzden JMP başka bir MOV idi.
Joshua

1
@Joshua: eğlenceli gerçek: 32-bit ARM, PC'yi 16 genel amaçlı tamsayı kaydından biri olarak ortaya çıkarır. push {r4, lr}/ pop {r4,pc}, çağrı korumalı bir kaydı kaydetme / geri yükleme ve yığını hizalı tutma işlevlerinde yaygındır: ayrıca bağlantı reg'ını kaydeder ve geri dönmek için program sayacına geri getirir. (32-bit ARM'nin depolama / yükleme-çoklu talimatları, hangi kayıtların saklanacağını / yükleneceğini belirtmek için bir bit alanı kullanır.) Ve evet, PC'yi bir movveya herhangi bir komutun hedefi olarak kullanabilirsiniz . Ancak bunun geçmişte yaygın olduğunu bilmiyordum. Ancak taşımacılığın tetiklediği ISA'ları duymuştum.
Peter Cordes
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.