Troff Turing이 완료 되었습니까?


9

Troff는 사용 .de및 분기를 사용한 매크로 정의를 모두 지원합니다 .if( Troff 사용 설명서의 5 및 6 페이지 참조 ). 이 두 가지 측면에서 TeX와 매우 유사합니다. 그러나 TiffZ for TeX와 달리 Troff로 작성된 매우 복잡한 프로그램은 알지 못합니다. Troff Turing이 완료 되었습니까?

답변:


12

ESR의 The Art of Unix Programming 은 다음과 같이 주장합니다.

18 장에서 troff에 대해 좀 더 자세히 살펴 보겠습니다. 지금까지는 본격적인 통역사가되는 조건을 충족시키는 명령형 미니 언어의 좋은 예라는 점에 주목하면 충분합니다 (조건부와 재귀는 있지만 루프는 없습니다.

( ' m4고의적으로 튜링 완료'라고하는 '사고' )


13

예, troff는 Turing-complete입니다. 임의의 재귀 및 조건부 분기를 지원하므로 충분합니다. 또한 레지스터와 데이터를 저장하는 다양한 다른 방법이 있으므로 다시 한 번 더 경로를 찾을 수 있습니다.

튜링 완성도는 매우 복잡한 프로그램이 실용적 이라는 것을 의미하지는 않습니다. 이론적으로는 어느 정도 제거 수준에서 이론적으로 가능하다는 것 또한 존재하지 않는다는 것을 의미하지도 않습니다. 복잡한 프로그램이 없다고해서 그것에 대해 많은 것을 제안하지는 않습니다.


튜링 완성도는 일반적으로 사용자에게 유용한 속성이 아닙니다. 그것은 당신이 원하는 것이 아니라 그것을 통해 Turing 머신을 시뮬레이션 할 있고, 당신이 얻을 수있는 출력이 기대하는 것과 같은 것이 아니라는 것을 의미합니다. 입력 또는 출력은 단지 숫자 일 수도 있고, 심지어 유용한 것이 아니라 무언가가 나타나는 횟수 일 수도 있으며, 시뮬레이션하는 기계의 종류와 프로그램은 종종 거의 이해할 수 없습니다.

많은 언어와 시스템은 우연히 튜링 완성되어 있지만 합리적으로 적용 할 수있는 부분 집합의 실제 프로그래밍 (예, 콘웨이의 생명이나 CSS의 게임), 그리고 일부 언어 입니다 실제 프로그래밍을위한 유용한 튜링 완성되지 않습니다 (예를 들어, 아그 다). 정의 특성은 실제로 당신이 할 수 있다는 것입니다

  • 영원히 계속
  • 원하는만큼의 데이터를 기억하십시오
  • 다음에 무엇을할지 선택하십시오

종종 이러한 특성들, 특히 비 종료 (non-termination)는 실제로 바람직하지 않으며, 아마도 troff를 포함합니다. 이론적 인 컴퓨터 과학 및 언어 설계 외에, 튜링 완성도는 어리석은 일 임에도 불구하고 사실상 거의 흥미로운 재산이 아닙니다.


물론, 그 자체로는 매우 유용한 것은 아니지만 여전히 흥미 롭습니다. 예를 들어, mov 명령도 Turing complete입니다.
cutculus

4
@theindigamer- x86mov지시는 Turing-complete입니다. (룩업 테이블을 사용할 수있는 주소 지정 모드와 동일한 니모닉이로드, 저장 및 mov-immediate에 등록하는 데 사용됩니다.) mov명령 이있는 많은 다른 ISA (예 : ARM)는 단지 reg-reg 이동입니다. 튜링이 완전하지 않습니다. (ARM에서는 시프트 / 회전을 수행 할 수 있습니다.) 또한 명령 포인터가 64k 코드 세그먼트로 줄 바꿈 될 수있는 16 비트 모드가 아닌 경우 실제로 jmpmov명령 블록 주위에 루프를 만들어야 합니다. 암시 적으로 루프합니다.
Peter Cordes


2
@PeterCordes : 아; 예전에는 메모리에 ALU를 매핑 한 MOV 아키텍처가 있었으며 IP는 또 다른 레지스터 였기 때문에 JMP는 또 다른 MOV였습니다.
Joshua

1
@Joshua : 재미있는 사실 : 32 비트 ARM은 PC를 16 개의 범용 정수 레지스터 중 하나로 노출합니다. push {r4, lr}/ pop {r4,pc}는 하나의 호출 보존 레지스터를 저장 / 복원하고 스택을 정렬해야하는 기능에서 일반적입니다. 링크 reg를 저장하고 프로그램 카운터로 다시 돌려 보냅니다. (32 비트 ARM의 저장 /로드 다중 명령은 비트 필드를 사용하여 저장 /로드 할 레지스터를 나타냅니다.) 예, PC를 mov명령 의 대상으로 사용할 수 있습니다 . 그래도 과거에는 그 일이 흔하다는 것을 몰랐습니다. 그러나 전송 트리거 ISA에 대해 들었습니다.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.