Sì, Troff è Turing completo. Supporta la ricorsione arbitraria e la ramificazione condizionale, il che è sufficiente. Ha anche registri e vari altri modi per archiviare i dati, il che ti dà di nuovo un altro percorso.
La completezza di Turing non implica che programmi molto complessi siano pratici - solo che teoricamente sono possibili, in qualche modo, a un certo livello di rimozione - e nemmeno la sua assenza implica che non lo siano, quindi né Troff è Turing-completo né il l'assenza di programmi complessi non suggerisce nulla in un modo o nell'altro.
La completezza di Turing non è, in genere, una proprietà che significa qualcosa di utile per l'utente. Tutto ciò che significa è che puoi simulare una macchina Turing con essa, non che vorresti, e non che l'output che otterrai da esso è qualcosa di simile a quello che ti aspetteresti di leggere. L'input o l'output potrebbero essere solo un numero, o anche il numero di volte in cui appare qualcosa, piuttosto che qualcosa di utile, e il tipo di macchina che finisci per simulare e i loro programmi sono spesso appena comprensibili per cominciare.
Molte lingue e sistemi sono casualmente completi di Turing ma non ragionevolmente applicabili per qualsiasi programmazione effettiva in quel sottoinsieme (ad esempio, Game of Life o CSS di Conway), e alcuni linguaggi che sono utili per la vera programmazione non sono completi di Turing (ad esempio, Agda). Le caratteristiche distintive sono davvero che puoi
- continua per sempre
- ricorda tutti i dati che vuoi
- scegli cosa fare, se non altro, dopo
Spesso queste proprietà, in particolare la non terminazione, sono in realtà indesiderabili, probabilmente anche per il troff. A parte l'informatica teorica e la progettazione del linguaggio, la completezza di Turing non è una proprietà terribilmente interessante praticamente del tempo, nonostante sia accattivante.