Tóm lại :
Điều đặc trưng cho các ngôn ngữ lập trình bắt buộc gần với máy Turing và với các máy tính thông thường như PC, (gần với máy truy cập ngẫu nhiên (RAM) hơn là máy Turing) là khái niệm về bộ nhớ rõ ràng có thể được sửa đổi để lưu trữ (kết quả trung gian ). Đây là một cái nhìn tự động về tính toán, với khái niệm trạng thái (bao gồm cả điều khiển trạng thái hữu hạn và nội dung bộ nhớ) có thể thay đổi khi tiến hành tính toán.
Hầu hết các mô hình khác là trừu tượng hơn. Mặc dù chúng có thể biểu thị tính toán như là một chuỗi các bước biến đổi của cấu trúc ban đầu, những phép biến đổi này được áp dụng trong một loại vũ trụ nội tại có ý nghĩa toán học. Điều này có thể bảo tồn các thuộc tính, chẳng hạn như tính minh bạch tham chiếu, có thể làm cho phân tích toán học đơn giản hơn. Nhưng nó là xa hơn từ các mô hình vật lý tự nhiên dựa trên các bộ nhớ.
Do đó, không có máy móc chức năng tự nhiên, ngoại trừ theo nghĩa lớn hơn như được giải thích dưới đây, vì phần mềm không thực sự tách rời khỏi phần cứng.
Việc tham khảo Turing như là thước đo khả năng tính toán có lẽ xuất phát từ thực tế là mô hình của anh ta, máy Turing gần nhất với ràng buộc khả năng thực hiện vật lý này, khiến nó trở thành mô hình tính toán trực quan hơn.
Cân nhắc thêm :
Có nhiều mô hình tính toán, được thiết kế để nắm bắt một cách khái quát nhất có thể khái niệm tính toán. Chúng bao gồm các máy Turing, thực tế trong nhiều hương vị khác nhau, tính toán lambda (hương vị cũng vậy), hệ thống viết lại bán Thue, chức năng đệ quy một phần, logic kết hợp.
Tất cả đều nắm bắt một số khía cạnh của các kỹ thuật khác nhau được sử dụng bởi các nhà toán học để thể hiện hoặc tiến hành tính toán. Và hầu hết đã được sử dụng ở một mức độ nào đó như là nền tảng của một số thiết kế ngôn ngữ lập trình (ví dụ Snobol để viết lại các hệ thống, APL cho các tổ hợp, Lisp / Scheme cho phép tính lambda) và thường có thể được kết hợp theo nhiều cách khác nhau trong các ngôn ngữ lập trình hiện đại.
Một kết quả chính là tất cả các mô hình tính toán này đã được chứng minh tương đương, dẫn đến luận điểm Church-Turing rằng không có mô hình tính toán vật lý nào có thể làm được nhiều hơn bất kỳ mô hình nào trong số này. Một mô hình tính toán được cho là Turing hoàn thành nếu nó có thể được chứng minh là tương đương với một trong những mô hình này, do đó tương đương với tất cả chúng.
Tên có thể đã khác. Việc lựa chọn máy Turing (TM) làm tham chiếu có lẽ là do thực tế nó có thể là mô hình đơn giản nhất, bắt chước chặt chẽ (mặc dù đơn giản) theo cách tính toán của con người và khá dễ thực hiện (ở dạng hữu hạn hạn chế ) như một thiết bị vật lý, đến mức mà các máy Turing đã được chế tạo bằng các bộ Lego . Ý tưởng cơ bản không đòi hỏi sự tinh tế toán học. Có lẽ chính sự đơn giản và khả thi của mô hình đã mang lại cho nó vị trí tham chiếu này.
Vào thời điểm Alan Turing tạo ra thiết bị điện toán của mình, các đề xuất khác được đưa ra để phục vụ như là định nghĩa chính thức về khả năng tính toán, một vấn đề quan trọng đối với nền tảng của toán học (xem
Entscheidungsprobols ). Đề xuất Turing được các chuyên gia thời đó coi là một công việc có sức thuyết phục nhất được biết đến về khả năng tính toán (xem Tính toán và đệ quy , RI Soare, 1996, xem phần 3.2). Các đề xuất khác nhau đã được chứng minh tương đương, nhưng Turing đã thuyết phục hơn. [từ ý kiến của Yuval Filmus]
Cần lưu ý rằng, từ quan điểm phần cứng, máy tính của chúng tôi không phải là máy Turing, mà là cái được gọi là Máy truy cập ngẫu nhiên (RAM) , cũng là Turing hoàn chỉnh.
Ngôn ngữ hoàn toàn bắt buộc (bất cứ điều gì có thể có nghĩa) có lẽ là các hình thức được sử dụng cho các mô hình cơ bản nhất, chẳng hạn như máy Turing hoặc ngôn ngữ lắp ráp (bỏ qua mã hóa nhị phân) của máy tính. Cả hai đều nổi tiếng là không thể đọc được, và rất khó để viết các chương trình quan trọng với. Trên thực tế, ngay cả ngôn ngữ lắp ráp cũng có một số tính năng cấp cao hơn để dễ dàng lập trình một chút, so với việc sử dụng trực tiếp các hướng dẫn máy. Các mô hình mệnh lệnh cơ bản được đóng lại trong thế giới vật lý, nhưng không thể sử dụng được.
Điều này nhanh chóng dẫn đến sự phát triển của các mô hình tính toán cấp cao hơn, bắt đầu trộn lẫn với nó một loạt các kỹ thuật tính toán, như chương trình con và gọi hàm, đặt tên vị trí bộ nhớ, phạm vi tên, định lượng và biến giả, đã được sử dụng ở một số dạng trong toán học và logic, và thậm chí các khái niệm rất trừu tượng như sự phản chiếu ( Lisp 1958).
Việc phân loại ngôn ngữ lập trình thành mô hình lập trình như mệnh lệnh, chức năng, logic, hướng đối tượng dựa trên sự ưu việt của một số kỹ thuật này trong thiết kế ngôn ngữ và sự hiện diện hay vắng mặt đối với một số tính năng tính toán thực thi một số tính chất cho các chương trình hoặc các đoạn chương trình được viết bằng ngôn ngữ.
Một số mô hình thuận tiện cho các máy vật lý. Một số khác thuận tiện hơn cho mô tả thuật toán cấp cao, nó có thể phụ thuộc vào loại thuật toán được mô tả. Một số nhà lý thuyết thậm chí sử dụng các đặc tả không xác định của các thuật toán, và thậm chí cn đó được dịch theo các thuật ngữ lập trình thông thường hơn. Nhưng không có vấn đề không phù hợp, bởi vì chúng tôi đã phát triển một công nghệ biên dịch / phiên dịch tinh vi có thể dịch từng mô hình sang mô hình khác khi cần thiết (cũng là cơ sở của luận án Church-Turing).
Bây giờ, bạn không bao giờ nên xem máy tính của mình là phần cứng thô. Nó không chứa mạch boolean mà xử lý rất cơ bản. Nhưng phần lớn được điều khiển bởi các chương trình vi mô bên trong máy tính mà bạn không bao giờ biết đến. Sau đó, bạn có hệ điều hành làm cho máy của bạn xuất hiện thậm chí khác với những gì phần cứng làm, Trên hết, bạn có thể có một máy ảo thực thi mã byte và sau đó là một ngôn ngữ cấp cao như Pyva và Jathon hoặc Haskell hoặc OCaml, có thể được biên dịch thành mã byte.
Ở mỗi cấp độ bạn thấy một mô hình tính toán khác nhau. Rất khó để phân tách cấp độ phần cứng với cấp độ phần mềm để gán một mô hình tính toán cụ thể cho máy. Và vì tất cả chúng đều có thể thay thế được, nên ý tưởng về một mô hình tính toán phần cứng cuối cùng chỉ là một ảo ảnh.
Máy tính lambda không tồn tại: nó là một máy tính có thể giảm các biểu thức tính toán lambda. Quảng cáo được thực hiện dễ dàng.
Về kiến trúc máy chuyên dụng
Trên thực tế, bổ sung cho câu trả lời của Peter Taylor và tiếp nối sự kết hợp giữa phần cứng / phần mềm, các máy chuyên dụng đã được sản xuất để thích nghi tốt hơn với mô hình cụ thể và có phần mềm cơ bản được viết bằng ngôn ngữ lập trình dựa trên mô hình đó.
Bao gồm các
Về cơ bản, đây cũng là các cấu trúc phần cứng bắt buộc, nhưng được giảm thiểu bằng các tính năng phần mềm đặc biệt hoặc trình thông dịch được lập trình vi mô để thích ứng tốt hơn với mô hình dự định.
Trên thực tế, phần cứng chuyên dụng cho các mô hình cụ thể dường như chưa bao giờ thành công trong thời gian dài. Lý do là công nghệ biên dịch để thực hiện bất kỳ mô hình nào trên phần cứng vanilla ngày càng hiệu quả hơn, do đó phần cứng chuyên dụng không quá cần thiết. Ngoài ra, hiệu suất của harware được cải thiện nhanh chóng, nhưng chi phí cải thiện (bao gồm cả sự phát triển của phần mềm cơ bản) dễ dàng được khấu hao trên phần cứng vanilla hơn so với phần cứng chuyên dụng. Phần cứng chuyên dụng không thể cạnh tranh trong thời gian dài.
Tuy nhiên, và mặc dù tôi không có dữ liệu chính xác về điều này, tôi sẽ nghi ngờ rằng những mạo hiểm này đã để lại một số ý tưởng có ảnh hưởng đến sự phát triển của máy móc, ký ức và kiến trúc tập lệnh.
(a -> a) -> a
.