Czy Troff Turing jest gotowy?


9

Troff obsługuje zarówno definicje makr za pomocą, jak .dei rozgałęzianie za pomocą .if(patrz strony 5 i 6 instrukcji obsługi Troff ). Pod tymi dwoma względami bardzo przypomina TeX. Jednak nie znam bardzo złożonych programów napisanych w Troffie (w przeciwieństwie do TikZ dla TeXa). Czy Troff Turing jest gotowy?

Odpowiedzi:


12

The Art of Unix Programming ESR twierdzi, że jest to:

Przeanalizujemy troffa bardziej szczegółowo w rozdziale 18; na razie wystarczy zauważyć, że jest to dobry przykład imperatywnego minilęzyka, który graniczy z pełnoprawnym tłumaczem (ma warunki warunkowe i rekurencję, ale nie ma pętli; przypadkowo jest kompletny Turinga).

(„Przypadkowo” w przeciwieństwie do m4, o którym mówi się, że „umyślnie Turing-zupełny”).


13

Tak, troff jest ukończony przez Turinga. Obsługuje dowolną rekurencję i rozgałęzienie warunkowe, co jest wystarczające. Posiada również rejestry i różne inne sposoby przechowywania danych, co daje kolejną ścieżkę.

Kompletność Turinga nie oznacza, że ​​wysoce złożone programy są praktyczne - po prostu, że są teoretycznie możliwe, w jakiś sposób, na pewnym poziomie usunięcia - i nie oznacza to, że ich brak, więc ani troff nie jest Turingiem kompletnym, ani brak skomplikowanych programów nie sugeruje niczego w ten czy inny sposób.


Kompletność Turinga nie jest na ogół właściwością, która oznacza coś przydatnego dla użytkownika. Oznacza to tylko, że możesz na nim symulować maszynę Turinga, a nie to, że chcesz, i że wynik, który z niej uzyskasz, jest podobny do tego, co możesz przeczytać. Dane wejściowe lub wyjściowe mogą być po prostu liczbą, a nawet liczbą pojawień się czegoś, a nie czymś użytecznym, a rodzajami maszyn, które symulujesz, a ich programy są często ledwo zrozumiałe.

Wiele języków i systemów są incydentalnie Turinga kompletne, ale nie dość do jakiegokolwiek rzeczywistego programowania w tej podgrupie (np Gra w życie lub CSS), a niektóre z języków, które przydatne dla prawdziwego programowania nie są Turing-complete (na przykład, Agda). Charakterystyczne cechy naprawdę są takie, że możesz

  • idź wiecznie
  • zapamiętaj tyle danych, ile chcesz
  • wybierz, co jeszcze zrobić

Często te właściwości - szczególnie brak zakończenia - są w rzeczywistości niepożądane, być może nawet w przypadku troffa. Poza teoretyczną informatyką i projektowaniem języka, kompletność Turinga nie jest tak naprawdę interesującą właściwością w danym czasie, mimo że jest chwytliwa.


Tak, oczywiście, nie jest to bardzo przydatne samo w sobie, ale wciąż jest interesujące - np. Nawet instrukcja mov jest kompletna.
cutculus

4
@theindigamer - X86 „s movinstrukcja jest Turing-zupełny. (Ze względu na tryby adresowania, które pozwalają korzystać z tabel odnośników, a ten sam mnemonik służy do ładowania, przechowywania i mov-natychmiastowego do rejestracji.) Na wielu innych programach ISA, które mają movinstrukcję (np. ARM), jest to po prostu rejestr reg i nie jest kompletny. (Chociaż w ARM może zmieniać / obracać.) Ponadto, naprawdę potrzebujesz jmputworzyć pętlę wokół bloku movinstrukcji, chyba że jesteś w trybie 16-bitowym, w którym wskaźnik instrukcji może zawijać się w segmencie kodu 64k pętla niejawnie.
Peter Cordes,

6
@SpaceBison Oczywiście jest :-) github.com/Battelle/movfuscator
Daniel Näslund

2
@PeterCordes: Ah; w dawnych czasach istniały architektury MOV, które miały ALU zmapowane w pamięci, a IP był tylko kolejnym rejestrem, więc JMP był kolejnym MOV.
Joshua,

1
@Joshua: zabawny fakt: 32-bitowy ARM ujawnia PC jako jeden z 16 rejestrów liczb całkowitych ogólnego przeznaczenia. push {r4, lr}/ pop {r4,pc}jest powszechny w funkcjach, które muszą zapisywać / przywracać jeden rejestr zachowany na wywołanie i utrzymywać stos w wyrównaniu: zapisują również link reg i wrzucają go z powrotem do licznika programu, aby zwrócić. (32-bitowe instrukcje ARM do przechowywania / ładowania-wielu używają pola bitowego, aby wskazać, które rejestry mają przechowywać / ładować.) Tak, możesz użyć komputera jako miejsca docelowego movinstrukcji lub dowolnej instrukcji. Nie wiedziałem jednak, że w przeszłości było to powszechne. Ale słyszałem o ISA uruchamianych przez transport.
Peter Cordes,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.