Troff는 다음을 사용하여 매크로 정의 .de
및 분기를 지원합니다 .if
(5페이지 및 6페이지 참조).트로프 사용자 매뉴얼). 두 가지 측면에서 TeX와 매우 유사합니다. 그러나 나는 (TeX용 TikZ와 달리) Troff로 작성된 매우 복잡한 프로그램을 알지 못합니다. Troff Turing은 완전한가?
답변1
예, troff는 Turing Complete입니다. 임의 재귀 및 조건부 분기를 지원하므로 충분합니다. 또한 레지스터와 데이터를 저장하는 다양한 방법이 있어 또 다른 경로를 제공합니다.
튜링 완전성은 매우 복잡한 프로그램이실제- 단지 그것들이 어떤 수준의 삭제에서는 이론적으로 가능하다는 것입니다. 그리고 그것이 없다는 것이 그렇지 않다는 것을 의미하지는 않습니다. 따라서 troff는 튜링 완전하지도 않고 어떤 방식으로든 그렇게 할 수 있는 복잡한 프로그램이 없다는 것도 아닙니다. 무엇이든 또는 기타 관련 내용을 암시합니다.
일반적으로 튜링 완전성은 사용자인 귀하에게 유용한 속성이 아닙니다. 그것은 모두 당신을 의미합니다할 수 있는이를 사용하여 원하는 것이 아닌 Turing 기계를 시뮬레이션할 수도 있고, 그로부터 얻는 출력도 예상한 것과 동일하지도 않습니다. 입력이나 출력은 유용한 것이 아니라 단지 숫자일 수도 있고 심지어 어떤 일이 발생하는 횟수일 수도 있으며, 결국 시뮬레이션하게 되는 기계 유형과 해당 프로그램은 처음에 이해하기 어려운 경우가 많습니다.
많은 언어와 시스템이 Turing 완전하지만 해당 하위 집합(예: Conway의 Game of Life 또는 CSS)의 실제 프로그래밍에는 적용되지 않으며 일부 언어예실제 프로그래밍에 유용한 것은 Turing Complete(예: Agda)가 아닙니다. 결정적인 특징은 실제로 당신이 할 수 있다는 것입니다
- 영원히 계속하다
- 최대한 많은 데이터를 기억하세요
- 다음에 수행할 작업 선택(해당하는 경우)
종종 이러한 속성(특히 비종료성)은 실제로 바람직하지 않으며 troff를 포함할 수 있습니다. 이론적인 컴퓨터 과학 및 언어 설계를 제외하면 튜링 완전성은 그 당시에는 그다지 흥미로운 속성이 아니었지만 사실은 매혹적이었습니다.
답변2
ESR유닉스 프로그래밍의 예술다음과 같이 주장합니다.
지금은 18장에서 troff를 더 자세히 연구할 것입니다. 이는 거의 완전한 통역사인 명령형 미니 언어의 좋은 예라는 점만 언급하면 충분합니다(조건문과 재귀 기능이 있지만 루프는 없습니다). ; 예상외로 튜링 완료입니다.
("실수로"와 반대로 m4
"의도적으로 튜링이 완료되었습니다."라고 합니다.)