Troff Turing đã hoàn thành chưa?


9

Troff hỗ trợ cả định nghĩa vĩ mô bằng cách sử dụng .devà phân nhánh bằng cách sử dụng .if(xem trang 5 và 6 của hướng dẫn sử dụng Troff ). Ở hai khía cạnh này, nó rất giống TeX. Tuy nhiên, tôi không biết về các chương trình rất phức tạp được viết bằng Troff (không giống như TikZ cho TeX). Troff Turing đã hoàn thành chưa?

Câu trả lời:


12

Nghệ thuật lập trình Unix của ESR tuyên bố đó là:

Chúng ta sẽ kiểm tra troff chi tiết hơn trong Chương 18; bây giờ, đủ để lưu ý rằng đó là một ví dụ điển hình về ngôn ngữ bắt buộc bắt buộc phải là một thông dịch viên chính thức (nó có điều kiện và đệ quy nhưng không phải là vòng lặp; nó vô tình hoàn thành Turing).

("Vô tình" trái ngược với m4, được cho là "cố tình hoàn thành Turing".)


13

Vâng, troff là Turing-hoàn thành. Nó hỗ trợ đệ quy tùy ý và phân nhánh có điều kiện, là đủ. Nó cũng có các thanh ghi và nhiều cách khác để lưu trữ dữ liệu, cung cấp cho bạn một đường dẫn khác một lần nữa.

Tính đầy đủ của Turing không ngụ ý rằng các chương trình phức tạp cao là thực tế - chỉ là về mặt lý thuyết là có thể, bằng cách nào đó, ở một mức độ nào đó - và sự vắng mặt của nó không có nghĩa là chúng không, vì vậy, không phải là Turing hoàn chỉnh hay sự vắng mặt của các chương trình phức tạp không đề xuất bất cứ điều gì theo cách này hay cách khác về điều đó.


Nói chung, tính đầy đủ của Turing không phải là một tài sản có nghĩa là bất cứ điều gì hữu ích cho bạn người dùng. Tất cả điều đó có nghĩa là bạn có thể mô phỏng một máy Turing với nó, không phải là bạn muốn, và không phải là đầu ra mà bạn nhận được từ nó giống như những gì bạn muốn đọc. Đầu vào hoặc đầu ra có thể chỉ là một con số, hoặc thậm chí là số lần một thứ gì đó xuất hiện, chứ không phải là thứ gì đó hữu ích, và loại máy bạn kết thúc mô phỏng và các chương trình của chúng thường khó có thể hiểu được để bắt đầu.

Nhiều ngôn ngữ và hệ thống này được tình cờ Turing hoàn tất nhưng không hợp lý áp dụng cho bất kỳ chương trình thực tế trong nhóm đó (ví dụ, Conway của Game of Life hoặc CSS), và một số ngôn ngữ mà hữu ích cho lập trình thực không Turing-đầy đủ (ví dụ, Agda). Các đặc điểm xác định thực sự là bạn có thể

  • cứ đi mãi
  • nhớ nhiều dữ liệu như bạn muốn
  • chọn những gì, nếu có, để làm gì tiếp theo

Thông thường những tính chất đó - đặc biệt là không chấm dứt - thực sự là không mong muốn, có thể bao gồm cả cho troff. Ngoài khoa học máy tính lý thuyết và thiết kế ngôn ngữ, Turing hoàn thiện không phải là một tài sản thú vị khủng khiếp hầu như thời gian, mặc dù rất hấp dẫn.


Tất nhiên, bản thân nó không phải là một thứ rất hữu ích nhưng nó vẫn rất thú vị - ví dụ, ngay cả hướng dẫn Mov cũng hoàn thành.
cutculus

4
@theindigamer - Hướng dẫn của x86mov là Turing- Complete . (Vì các chế độ địa chỉ cho phép bạn sử dụng các bảng tra cứu và cùng một chế độ ghi nhớ được sử dụng để tải, lưu trữ và di chuyển ngay lập tức để đăng ký.) Trên nhiều ISA khác có movlệnh (ví dụ ARM), đó chỉ là một động thái reg-reg và không hoàn thành. (Mặc dù trên ARM, nó có thể thực hiện dịch chuyển / xoay.) Ngoài ra, bạn thực sự cần phải jmptạo một vòng lặp xung quanh khối lệnh của mình mov, trừ khi bạn ở chế độ 16 bit, nơi con trỏ lệnh có thể quấn quanh trong một đoạn mã 64k để vòng lặp ngầm.
Peter Cordes

6
@SpaceBison Tất nhiên là có :-) github.com/Battelle/movfuscator
Daniel Näslund

2
@PeterCordes: À; ngày xưa, các kiến ​​trúc MOV có bộ nhớ ALU và IP chỉ là một thanh ghi khác nên JMP là một MOV khác.
Joshua

1
@Joshua: sự thật thú vị: ARM 32 bit hiển thị PC là một trong 16 thanh ghi số nguyên có mục đích chung. push {r4, lr}/ pop {r4,pc}là phổ biến trong các chức năng cần lưu / khôi phục một thanh ghi được bảo toàn cuộc gọi và giữ cho ngăn xếp được căn chỉnh: chúng cũng lưu liên kết reg và đưa nó trở lại bộ đếm chương trình để trả về. (Các lệnh lưu trữ / tải nhiều lần của ARM 32 bit sử dụng một bitfield để cho biết các thanh ghi nào sẽ lưu trữ / tải.) Và vâng, bạn có thể sử dụng PC làm đích của một movhoặc bất kỳ lệnh nào. Tôi đã không biết rằng đó là phổ biến trong quá khứ, mặc dù. Nhưng tôi đã nghe nói về ISA kích hoạt giao thông.
Peter Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.