Có phải tất cả các ngôn ngữ hoàn chỉnh đều có thể hoán đổi cho nhau


26

Lưu ý, trong khi tôi biết cách lập trình, tôi khá là người mới bắt đầu học lý thuyết CS.

Theo câu trả lời này

Turing hoàn thiện là một khái niệm trừu tượng về khả năng tính toán. Nếu một ngôn ngữ là Turing hoàn chỉnh, thì nó có khả năng thực hiện bất kỳ tính toán nào mà bất kỳ ngôn ngữ hoàn chỉnh Turing nào khác có thể làm.

bất kỳ chương trình nào được viết bằng bất kỳ ngôn ngữ hoàn chỉnh Turing nào cũng có thể được viết lại bằng ngôn ngữ khác .

Được. Điều này thật ý nghĩa. Tôi có thể dịch (biên dịch) C thành hội (và tôi làm điều đó hàng ngày!) Và có thể dịch hội thành C (Bạn có thể viết một máy ảo bằng C). Và điều tương tự cũng áp dụng cho bất kỳ ngôn ngữ nào khác - bạn có thể biên dịch bất kỳ ngôn ngữ nào thành hội, và sau đó chạy nó trong một VM được viết bằng ngôn ngữ khác.

Nhưng bất kỳ chương trình nào được viết bằng ngôn ngữ hoàn chỉnh Turing có thể được viết lại bằng ngôn ngữ khác không?

Điều gì xảy ra nếu hội của tôi có opcode LIGHTBUTTON? Tôi thực sự không thể mô phỏng ngôn ngữ đó trên một hệ thống (ngôn ngữ) mà không có bóng đèn.

Được. Vì vậy, bạn sẽ nói rằng vì chúng ta đang đối phó với lý thuyết máy tính , chúng ta sẽ không thảo luận về các giới hạn thiết bị vật lý.

Nhưng những gì về một thiết bị không có phép nhân? phân chia? Theo hiểu biết tốt nhất của tôi (mặc dù đây là câu hỏi dành cho môn toán.SE), người ta không thể mô phỏng phép nhân (và chắc chắn không chia) với phép cộng và phép trừ [1].

Vậy làm thế nào một "ngôn ngữ hoàn chỉnh" (có thể thêm, trừ và nhảy) mô phỏng một ngôn ngữ khác có thể thêm, trừ, nhân và nhảy?

CHỈNH SỬA

[1]. Trên các số thực tùy ý.


33
Các số thực thuộc về vương quốc của Hyper-Turing-Computing. Máy Turing không thể xử lý số thực, ergo, chúng không liên quan đến tính hoàn chỉnh của Turing.
Jörg W Mittag

3
Liên quan: một tập lệnh hướng dẫn ngôn ngữ lắp ráp chỉ với một lệnh vẫn đủ mạnh để xây dựng một máy tính phổ quát: en.wikipedia.org/wiki/One_in cản_set_computer . Ví dụ: "Trừ và phân nhánh nếu nhỏ hơn hoặc bằng 0" với toán hạng bộ nhớ. Nó sẽ chậm so với x86 hiện đại, nhưng tỷ lệ hiệu suất là hữu hạn cho bất kỳ chương trình nào.
Peter Cordes

1
Không có máy vật lý (thực sự tồn tại) nào hoặc có thể hoàn thành Turing, bởi vì tính hoàn chỉnh của Turing yêu cầu lưu trữ vô hạn và vũ trụ không phải là vô hạn. Từ đó, câu trả lời khẳng định cho việc hai máy trừu tượng có tương đương không giúp bạn trả lời câu hỏi liệu hai xấp xỉ vật lý của các máy đó có tương đương hay không.
Ben

2
@PeterCordes: Tôi giả sử rằng khi bạn nói tỷ lệ là hữu hạn, bạn chỉ đơn giản là bất kỳ nhiệm vụ nào hoàn thành trong thời gian hữu hạn đều sẽ làm như vậy trong thời gian hữu hạn trên cả hai - không phải cho bất kỳ máy cụ thể nào (không bao gồm đầu vào) sẽ có bất kỳ giới hạn hữu hạn nào đối với tỷ lệ có thể nhận được cao đối với một số đầu vào. Tôi nghĩ rằng người ta có thể xây dựng các máy hoàn chỉnh Turing mà người ta có thể chọn các đầu vào sẽ làm cho tỷ lệ này cao tùy ý - thậm chí có thể không phải là chức năng tính toán của kích thước đầu vào.
supercat

6
Tôi không biết bạn lấy ý tưởng ở đâu rằng "người ta không thể mô phỏng phép nhân (và chắc chắn không chia) với phép cộng và phép trừ". Nó được dạy từ trường tiểu học khi chúng ta học cách nhân lên
phuclv

Câu trả lời:


55

Tính đầy đủ của Turing chỉ nói lên một điều và một điều duy nhất: một mô hình tính toán là Turing-Complete, nếu bất kỳ tính toán nào có thể được mô hình hóa bằng Máy Turing cũng có thể được mô hình hóa theo mô hình đó.

Vì vậy, các tính toán mà Turing Machine có thể mô hình là gì? Chà, đầu tiên và quan trọng nhất, Alan Turing và tất cả các đồng nghiệp của mình chỉ quan tâm đến các chức năng trên các số tự nhiên. Vì vậy, Máy Turing (và tính toán, tính toán tổ hợp SK, hàm đệ quy…, hàm) chỉ nói về khả năng tính toán của các hàm trên các số tự nhiên. Nếu bạn không nói về một hàm trên các số tự nhiên, thì khái niệm Turing-đầy đủ thậm chí không có ý nghĩa, nó chỉ đơn giản là không áp dụng được.

Tuy nhiên, lưu ý rằng chúng ta có thể mã hóa nhiều thứ thú vị dưới dạng số tự nhiên. Chúng ta có thể mã hóa chuỗi dưới dạng số tự nhiên, chúng ta có thể mã hóa biểu đồ dưới dạng số tự nhiên, chúng ta có thể mã hóa booleans dưới dạng số tự nhiên. Chúng ta có thể mã hóa Máy Turing thành số tự nhiên, cho phép chúng ta tạo Máy Turing nói về Máy Turing!

Và, tất nhiên, không phải tất cả các hàm trên số tự nhiên đều có thể tính toán được. Máy Turing chỉ có thể tính toán một số hàm trên số tự nhiên, phép tính chỉ có thể tính toán một số hàm trên số tự nhiên, phép tính tổ hợp SK chỉ có thể tính toán một số hàm trên số tự nhiên, đấm. Đáng ngạc nhiên (hoặc không), hóa ra mọi mô hình tính toán (thực sự có thể thực hiện được trong vũ trụ vật lý của chúng ta) có thể tính toán các hàm giống nhau trên các số tự nhiên (ít nhất là cho tất cả các mô hình mà chúng ta đã tìm thấy cho đến nay). [Lưu ý: rõ ràng, có những mô hình tính toán yếu hơn , nhưng chúng tôi chưa tìm thấy mô hình nào mạnh hơn, ngoại trừ một số rõ ràng không tương thích với vũ trụ vật lý của chúng ta, chẳng hạn như các mô hình sử dụng số thực hoặc du hành thời gian.]

Thực tế này, sau một thời gian dài tìm kiếm rất nhiều mô hình khác nhau, chúng tôi thấy rằng, mỗi lần, chúng có thể tính toán chính xác các chức năng giống nhau, là cơ sở cho Luận án Giáo hội, nói (đại khái) rằng tất cả các mô hình tính toán đều mạnh mẽ như nhau, và tất cả chúng đều nắm bắt khái niệm "lý tưởng" về ý nghĩa của nó là "tính toán". (Ngoài ra còn có khía cạnh triết học thứ hai, mang tính triết học hơn, đó là con người theo thuật toán cũng có thể tính toán chính xác các chức năng tương tự mà TM có thể tính toán và không còn nữa.)

Tuy nhiên , không ai trong số này nói bất cứ điều gì về

  • hiệu quả của các mô hình khác nhau như thế nào
  • chúng tiện lợi như thế nào khi sử dụng
  • những gì khác họ có thể làm bên cạnh các chức năng tính toán trên các số tự nhiên

đó chính xác là nơi mà sự khác biệt giữa các mô hình tính toán khác nhau (và ngôn ngữ lập trình) phát huy tác dụng.

Như một ví dụ về hiệu suất khác nhau, cả Máy truy cập ngẫu nhiên và Máy Turing đều có thể sao chép một mảng. Nhưng, RAM cần các hoạt động để thực hiện điều đó, trong khi TM cần các hoạt động , vì nó cần bỏ qua các phần tử của mảng để sao chép từng phần tử và có các phần tử để sao chép.O ( s i z e 2 một r r một y ) s i z e một r r một y s i z e một r r một yO(sizearray)O(sizearray2)sizearraysizearray

Để làm ví dụ cho sự thuận tiện khác nhau, bạn chỉ có thể so sánh mã được viết bằng ngôn ngữ cấp cao, mã được viết theo cụm và mô tả về TM để giải quyết cùng một vấn đề.

Và công tắc đèn của bạn là một ví dụ về loại khác biệt thứ ba, những thứ mà một số mô hình có thể làm không phải là chức năng trên các số tự nhiên và do đó không liên quan gì đến Turing-đầy đủ.

Để trả lời các câu hỏi cụ thể của bạn:

Nhưng bất kỳ chương trình nào được viết bằng ngôn ngữ hoàn chỉnh Turing có thể được viết lại bằng ngôn ngữ khác không?

Không. Chỉ khi chương trình tính toán một hàm tính toán Turing trên các số tự nhiên. Và thậm chí sau đó, nó có thể cần một mã hóa phức tạp. Ví dụ, calcul-compus thậm chí không có số tự nhiên, chúng cần được mã hóa bằng các hàm (vì các hàm là thứ duy nhất calcul-compus có).

Mã hóa đầu vào và đầu ra này có thể rất phức tạp, vì có thể diễn tả thuật toán. Vì vậy, trong khi sự thật là bất kỳ chương trình nào cũng có thể được viết lại, chương trình viết lại có thể phức tạp hơn nhiều, lớn hơn nhiều, sử dụng nhiều bộ nhớ hơn và chậm hơn nhiều.

Điều gì xảy ra nếu hội của tôi có opcode LIGHTBUTTON? Tôi thực sự không thể mô phỏng ngôn ngữ đó trên một hệ thống (ngôn ngữ) mà không có bóng đèn.

Một bóng đèn không phải là chức năng tính toán Turing trên các số tự nhiên. Thực sự, một bóng đèn không phải là một chức năng cũng không phải là một tính toán. Bật và tắt bóng đèn là hiệu ứng phụ I / O. Máy Turing không mô hình hóa các hiệu ứng phụ I / O và Turing-đầy đủ không liên quan đến chúng.

Trên các số thực tùy ý.

Tính đầy đủ của Turing chỉ liên quan đến các hàm tính toán trên các số tự nhiên, nó không liên quan đến các số thực.

Turing-đầy đủ đơn giản là không thú vị khi nói đến câu hỏi như của bạn vì hai lý do:

  1. Nó không phải là một trở ngại rất cao. Tất cả bạn cần là IF, GOTO, WHILE, và một biến số nguyên đơn (giả định các biến có thể giữ nguyên tùy tiện lớn). Hoặc, đệ quy. Rất nhiều, rất nhiều và rất nhiều thứ đã hoàn thành. Trò chơi bài Magic: The Gathering đã hoàn thành. CSS3 đã hoàn tất. Các sendmailtập tin cấu hình là Turing-hoàn thành. Intel x86 MMU đã hoàn thiện. MOVHướng dẫn Intel x86 là Turing-Complete. Hoạt hình PowerPoint là Turing-Complete. Excel (không có tập lệnh, chỉ sử dụng công thức) là Turing-Complete. Giao thức định tuyến BGP là Turing-Complete. sedlà Turing-hoàn thành. Các mod_rewritequy tắc của Apache là Turing-Complete. Google cho " (vô tình HOẶC đáng ngạc nhiên) hoàn thành"để tìm một số ví dụ thú vị khác. Nếu hầu hết mọi thứ là Turing-Complete, việc Turing-Complete dừng lại là một tài sản thú vị.
  2. Nó không thực sự cần thiết để có ích. Rất nhiều thứ hữu ích không phải là Turing-Complete. CSS trước khi phiên bản 3 không phải là Turing-đầy đủ (và thực tế là CSS3 không thực sự được sử dụng bởi bất cứ ai). SQL trước năm 1999 chưa hoàn thành Turing, tuy nhiên, nó cực kỳ hữu ích ngay cả khi đó. Ngôn ngữ lập trình C không có thư viện bổ sung dường như không hoàn chỉnh . Các ngôn ngữ được gõ phụ thuộc, ít nhiều theo định nghĩa, không hoàn thành Turing, tuy nhiên, bạn có thể viết các hệ điều hành, máy chủ web và trò chơi trong đó.

Edwin Brady, tác giả của Idris, sử dụng thuật ngữ "Tetris-Complete" để nói về một số khía cạnh này. Hoàn thành Tetris không được định nghĩa chặt chẽ (khác với "rõ ràng" có thể được sử dụng để thực hiện Tetris "), nhưng nó bao gồm những thứ như đủ cấp độ cao và đủ biểu cảm để bạn có thể viết một trò chơi mà không bị điên, có thể tương tác với thế giới bên ngoài (đầu vào và đầu ra), có thể thể hiện tác dụng phụ, có thể viết một vòng lặp sự kiện, có thể thể hiện phản ứng, không đồng bộ và lập trình đồng thời, có thể tương tác với hệ điều hành, có thể tương tác với hệ điều hành, có thể tương tác với hệ điều hành, có thể để tương tác với các thư viện nước ngoài (nói cách khác: có thể gọi và được gọi bằng mã C), v.v. Đó là những tính năng thú vị hơn nhiều của ngôn ngữ lập trình mục đích chung so với tính hoàn chỉnh của Turing.


Bạn có thể tìm thấy câu trả lời của tôi cho câu hỏi mà bạn liên kết thú vị, nó chạm vào một số điểm giống nhau mặc dù nó trả lời một câu hỏi khác.


7
Tôi thực sự thích câu trả lời này, nhưng tôi nghĩ rằng đáng chú ý là chúng ta có thể đại diện cho tất cả các loại điều thú vị bằng số tự nhiên. Ví dụ: chúng ta có thể biểu diễn các chuỗi bằng số tự nhiên, chúng ta có thể biểu diễn các biểu đồ bằng số tự nhiên, chúng ta có thể biểu diễn toàn bộ trạng thái của bộ nhớ máy tính bằng một số tự nhiên. Số thực có thể được mã hóa thành các hàm trên số tự nhiên và (nhiều) hàm trên số tự nhiên có thể được mã hóa bằng số tự nhiên. Vì vậy, giới hạn các chức năng từ số tự nhiên đến số tự nhiên không phải là một hạn chế lớn - trừ khi trời tối và bạn muốn máy tính của mình bật đèn.
Theodore Norvell

3
Câu trả lời hay, nhưng điều này: "Turing-Complete dừng lại là một tài sản thú vị" hoàn toàn sai. Nếu một cái gì đó là Turing-Complete, thì vấn đề tạm dừng của nó là Turing-Complete bằng cách giảm tính toán thành vấn đề tạm dừng cho các máy Turing. Ví dụ, trò chơi bài Magic: The Gathering đã hoàn tất. Điều này có nghĩa là các quy tắc của nó là không thể giải quyết được , tức là trong trường hợp chung, không thể suy luận một cách tính toán được đâu sẽ là trạng thái trò chơi sau, đây là một tài sản rất thú vị. Nghiêm trọng hơn, chúng tôi sử dụng Turing-đầy đủ và giảm để chứng minh các vấn đề không thể giải quyết được.
quicksort

Turing và các đồng nghiệp của ông đã quan tâm đến các chức năng trên các số tự nhiên, nhưng Turing máy không thực sự đối phó với những con số, họ đối phó với chuỗi các biểu tượng. Rõ ràng bạn có thể diễn giải một cách tầm thường các biểu tượng hữu hạn trong một bảng chữ cái hữu hạn đã biết là số tự nhiên, nhưng các TM không trực tiếp làm những việc "số" với đầu vào của chúng, chúng chỉ thao tác với "chữ số". Nó thực sự cần một chút logic để đi từ các mô tả tiêu chuẩn của TM đến "các hàm trên số tự nhiên"; khi làm việc với TM bạn mã hóa số tự nhiên dưới dạng chuỗi, không phải chuỗi dưới dạng số.
Ben

Đây rõ ràng là một câu trả lời tuyệt vời nhưng tôi sợ rằng nó vượt xa sự hiểu biết của OP. OP đã nhầm lẫn về việc thực hiện phép nhân trên (tập con hữu hạn) số thực. Với điều này, câu trả lời của bạn dường như ngụ ý rằng các ngôn ngữ lập trình hoàn chỉnh Turing thực tế không thể trao đổi cho mục đích tính toán thuần túy, trong thực tế chúng là (vì mọi thứ CPU hiện đại làm - không chỉ là một số thứ - có thể được mã hóa như tự nhiên số).
Konrad Rudolph

9
@TheodoreNorvell Về chủ đề mã hóa số thực bằng số tự nhiên. Trong thực tế, hầu như tất cả các số thực không thể được mã hóa bằng số tự nhiên. Tập hợp các số thực có thể được mã hóa bằng số tự nhiên, nhờ được mã hóa bằng số tự nhiên, nhiều nhất là vô hạn. Và bởi vì nó chỉ là vô hạn, nên tập hợp có số đo bằng không. Thật là một chút thiếu thận trọng khi nói rằng chúng ta có thể biểu diễn các số thực nói chung bằng số tự nhiên vì chúng ta chỉ có thể biểu thị một phần vô hạn của chúng hoặc chính xác hơn: 0%.
Shufflepants

9

Tất nhiên bạn có thể thực hiện phép nhân với phép cộng và phép trừ:

/* Assume b is positive for simplicity */
int multiply(int a, int b) {
  int res = 0;
  while (b > 0) { res += a; b -= 1; }
  return res;
}

Thực tế là bạn có thể sẽ không làm điều đó không làm cho nó ít khả thi hơn.

Bộ phận khó hơn:

/* Assume a and b are positive for simplicity */
int divide(int a, int b) {
  int res = 0;
  while (a >= b) { res += 1; a -= b; }
  return res;
}

Và bạn nghĩ cách nhân và chia thực sự được thực hiện bởi mạch của CPU như thế nào? Gợi ý: nó không phải là một bảng tra cứu khổng lồ. Nó hiệu quả hơn so với ở trên, vì dịch chuyển bit cũng được sử dụng, nhưng về cơ bản nó được thực hiện về mặt cộng và trừ.


4
@touring: nó hoạt động tốt cho điểm nổi. Trước tiên, bạn bình thường hóa mantissas để tử số có trailing binary 0s. Sau đó, bạn làm phép chia số nguyên. Cuối cùng, bạn sửa số mũ: sự khác biệt của số mũ ban đầu cộng với hiệu chỉnh từ chuẩn hóa. 2precision
rici

7
@touring: Bạn biết đấy, số học dấu phẩy động đã có sẵn trước khi có bộ đồng xử lý dấu phẩy động.
rici

6

Không có máy vật lý (thực sự tồn tại) nào hoặc có thể hoàn thành Turing, bởi vì tính hoàn chỉnh của Turing yêu cầu lưu trữ vô hạn và vũ trụ không phải là vô hạn.

Từ đó, câu trả lời khẳng định cho việc hai máy trừu tượng có tương đương không giúp bạn trả lời câu hỏi liệu hai xấp xỉ vật lý của các máy đó có tương đương hay không.

Do đó, sự tương đương Turing của các mô hình trừu tượng của (ví dụ) hai ngôn ngữ không có nghĩa là mỗi ngôn ngữ có thể tính toán mọi thứ mà ngôn ngữ kia có thể tính toán trong thực tế. Một người có thể chạy lên chống lại những hạn chế về thể chất trước người kia.


Nhưng câu hỏi hỏi về ngôn ngữ. Nó đề cập đến các máy cụ thể, nhưng chỉ vì anh ta không nhận ra rằng hầu như không có máy thật nào hoạt động trên số thực.
Shufflepants

3

nm=n+n(m1)m/n=1+(mn)/n

Như một vấn đề thực tế, các hoạt động, cộng thêm 1, nhảy trừ 1 nhảy và nhảy có điều kiện nếu một thanh ghi được chỉ định là 0 không đủ để tạo ra một mô hình tính toán Turing-Complete (xem máy 2 bộ đếm làm tham chiếu cho rất tối thiểu Turing - mô hình tính toán hoàn chỉnh).

22n=n+n2m×2n=2m×nm×(2n+1)=m+2m×n


3

tl; dr - Máy Turing chỉ là một mô tả logic cơ bản cho hoạt động của một hệ thống logic chung. Họ có thể làm hầu hết những thứ chúng ta có thể mô tả, bao gồm gọi các opcode chuyên dụng và các phép toán được xây dựng.


Điều gì xảy ra nếu hội của tôi có opcode LIGHTBUTTON? Tôi thực sự không thể mô phỏng ngôn ngữ đó trên một hệ thống (ngôn ngữ) mà không có bóng đèn.

Trong mô hình Turing, các ký hiệu như LIGHTBUTTONopcode chỉ là các chuỗi trong bất kỳ bảng chữ cái nào mà máy tính Turing sử dụng.

Vì vậy, máy Turing sẽ chịu trách nhiệm sản xuất chuỗi "LIGHTBUTTON"hoặc một số giá trị nguyên tương ứng với opcode đó; có hay không một thực thể bên ngoài hành động theo nó không phải là việc của máy tính Turing.

Chương trình C có cùng giới hạn. Đây là, một chương trình C chỉ có thể gọi opcode cho LIGHTBUTTON, tuy nhiên liệu CPU có thực sự thực hiện một hoạt động liên quan đến opcode đó hay không là tùy thuộc vào CPU.


Nhưng những gì về một thiết bị không có phép nhân? phân chia? Theo hiểu biết tốt nhất của tôi (mặc dù đây là câu hỏi dành cho toán học.SE), người ta không thể mô phỏng phép nhân (và chắc chắn không chia) với phép cộng và phép trừ [trên các số thực tùy ý].

Yup, một cỗ máy Turing có thể làm những điều đó, thậm chí trên những con số thực, đến mức mà bất kỳ logic nào có thể mô tả được của con người đều có thể. Máy Turing có thể đơn giản như tự động hóa tế bào Rule 110 .

Bí quyết để xây dựng một hệ thống logic từ bất kỳ vật lý nào mà máy tự nhiên có. Ví dụ, CPU chính có thể thực hiện phép nhân và chia vì chúng có đơn vị logic số học (ALU) . Nhưng ALU không phải là phép thuật; chúng chỉ là những cổng logic đơn giản . Và các cổng logic được tạo ra các bóng bán dẫn . Và những bóng bán dẫn này được tạo ra từ cát pha tạp .

Vì vậy, để có được một thiết bị Turing-Complete để làm toán, chỉ cần lập trình theo cách đó.

ππ=0ππππ=0


3

Nhưng bất kỳ chương trình nào được viết bằng ngôn ngữ hoàn chỉnh Turing có thể được viết lại bằng ngôn ngữ khác không?

Nếu đầu vào của chương trình là một chuỗi bit dài tùy ý và đầu ra cũng là một chuỗi bit dài tùy ý, thì CÓ. Giả sử bạn có thời gian và năng lượng để viết lại nó, và bạn không quan tâm đến hiệu suất, và bạn có đủ bộ nhớ vật lý cho cả hai lần thực hiện.

Các cân nhắc thực tế có nghĩa là hai ngôn ngữ hoàn chỉnh Turing không thể thay thế cho nhau bao gồm:

  • chúng hỗ trợ các loại đầu vào và đầu ra khác nhau (ví dụ: truy cập cơ sở dữ liệu SQL)

  • họ có các thư viện loại dữ liệu khác nhau (ví dụ: hỗ trợ cho chuỗi Unicode)

  • chúng cung cấp các mô hình lập trình khác nhau được tối ưu hóa cho các nhiệm vụ khác nhau (ví dụ: các đối tượng, luồng, coroutines, các hàm hạng nhất)

  • họ cung cấp các thư viện hàm khác nhau (ví dụ: phân tích cú pháp và tuần tự hóa XML)


1

Không. Tính đầy đủ của Turing không liên quan gì đến các chương trình , đó là về các hàm toán học (hoặc thuật toán ). Bất kỳ thuật toán nào - bất kỳ tính toán nào - bạn có thể thực hiện bằng C, bạn có thể thực hiện bằng bất kỳ ngôn ngữ hoàn chỉnh Turing nào khác (điều này nên rõ ràng). Nhưng Turing-đầy đủ không thực sự nói rằng bạn có thể làm I / O - cả. Nó hoàn toàn không nói về phần cứng. Chỉ là sự tính toán.

Bạn có thể mở rộng ngôn ngữ hoàn chỉnh Turing với bất kỳ thao tác phần cứng nào bạn muốn (về mặt kỹ thuật, đây là cách thức fputcfgetchoạt động trong C). Nếu bạn sử dụng hai ngôn ngữ hoàn chỉnh Turing và mở rộng chúng với các hoạt động cụ thể về phần cứng giống nhau , thì chúng vẫn có thể thay thế cho nhau. Vì vậy, ngôn ngữ lắp ráp của bạn với LIGHTBULBhoạt động mạnh hơn Turing-Complete; bạn có thể nói đó là Turing-CompleteLIGHTBULB . Để làm cho bất kỳ ngôn ngữ nào giống hệt với ngôn ngữ đó, nó cũng cần phải hoàn thành Turing LIGHTBULB; cách dễ nhất để làm điều đó là thêm một LIGHTBULBnguyên thủy / lệnh / hàm / vv vào nó.

Đây là lý do tại sao việc triển khai C thường hỗ trợ trình biên dịch mã nội tuyến hoặc ghi lại cách gọi các hàm được viết bằng trình biên dịch và tại sao việc triển khai các ngôn ngữ khác thường cung cấp một cách để gọi các hàm được viết bằng C.

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.