Чи завершено Troff Turing?


9

Troff підтримує обидва макровизначення, використовуючи .deта розгалужуючи, використовуючи .if(див. Сторінки 5 та 6 керівництва користувача Troff ). У цих двох аспектах це дуже схоже на TeX. Однак я не знаю про дуже складні програми, написані на Troff (на відміну від TikZ для TeX). Чи завершено Troff Turing?

Відповіді:


12

ESR's Art of Unix програмування стверджує, що це:

Ми розглянемо троф більш докладно в главі 18; поки що достатньо відзначити, що це хороший приклад імперативної міні мови, яка межує з повноцінним перекладачем (він має умовні умови та рекурсію, але не петлі; це випадково завершено Тьюрінга).

("Випадково" на відміну від m4, яке, як кажуть, "навмисно завершене Тьюрінга".)


13

Так, троф завершений Тьюрінгом. Він підтримує довільну рекурсію та умовне розгалуження, чого достатньо. Він також має регістри та різні інші способи зберігання даних, що дає вам ще один шлях.

Повнота Тюрінга не означає, що дуже складні програми практичні - лише те, що вони теоретично можливі, певним чином, на певному рівні видалення, - а також відсутність цього означає, що вони не є, тому ні троф не є Тюрінг-повним, ні відсутність складних програм не говорить про щось так чи інакше.


Як правило, повнота не є властивістю, що означає що-небудь корисне для користувача. Все це означає, що ви можете імітувати машину Тюрінга за допомогою неї, а не того, що ви хочете, і не те, що вихід, який ви отримаєте з неї, є чимось схожим на те, що ви хочете прочитати. Вхід або вихід може бути просто числом, або навіть числом, коли щось з’являється, а не чимось корисним, і типи машин, які ви в кінцевому підсумку моделюєте, і їхні програми часто ледве зрозумілі для початку.

Багато мови і система до речі Тьюринг-повний , але не досить застосовні для будь-якого фактичного програмування в цій підгрупі (наприклад, ігри Конвея життя або CSS), і деякі мови , які є корисними для реального програмування не Тьюринг (наприклад, Агда). Визначальні характеристики насправді такі, що ви можете

  • продовжуйте йти назавжди
  • запам’ятайте стільки даних, скільки ви хочете
  • вибрати, що, якщо що, робити далі

Часто ці властивості - особливо не припинення - насправді небажані, можливо, включаючи і троф. Поза теоретичною інформатикою та мовним дизайном, повнота Тюрінга не є надзвичайно цікавою властивістю практично того часу, незважаючи на те, що вона є привабливою.


Так, звичайно, це не дуже корисна річ сама по собі, але вона все ще цікава - наприклад, навіть інструкція щодо Mov є Turing завершеною.
cutculus

4
@theindigamer - X86 «сек movінструкція по Тьюрингу. (Через режими адреси, які дозволяють використовувати таблиці пошуку, і той самий мнемонічний використовується для завантаження, зберігання та mov-негайного реєстрації.) Для багатьох інших ISA, які мають movінструкцію (наприклад, ARM), це просто переміщення reg-reg і не є повним завершенням. (Хоча на ARM він може робити зсуви / обертання.) Крім того, вам дійсно потрібно jmpстворити цикл навколо вашого блоку movінструкцій, якщо ви не перебуваєте в 16-бітному режимі, де покажчик інструкцій може обернутися в сегменті коду 64k для петля неявно.
Пітер Кордес

6
@SpaceBison Звичайно, є :-) github.com/Battelle/movfuscator
Даніель

2
@PeterCordes: Ах; за старих часів там архітектури MOV, які мали карту пам'яті ALU, а IP - це ще один реєстр, тому JMP був ще одним MOV.
Джошуа

1
@Joshua: цікавий факт: 32-бітний ARM дійсно виставляє ПК як один із 16 цілочисельних регістрів загального призначення. push {r4, lr}/ pop {r4,pc}є загальним для функцій, які потребують збереження / відновлення одного реєстру, що зберігається від викликів, і зберігання стека вирівнюється: вони також зберігають reg посилання та переносять його назад у лічильник програм для повернення. (32-розрядні інструкції зберігання / завантаження 32-розрядних ARM використовують бітове поле, щоб вказати, які регістри зберігати / завантажувати.) Так, ви можете використовувати ПК як пункт призначення movабо будь-яку інструкцію. Я не знав, що це було звичайно в минулому. Але я чув про транспортні засоби, що спрацьовують на транспорті.
Пітер Кордес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.