Có những ngôn ngữ hoàn chỉnh không mục đích chung chính thống hiện nay không?


11

Các ngôn ngữ hoàn chỉnh không Turing cung cấp một lợi thế lớn so với các ngôn ngữ hoàn chỉnh Turing vì chúng dễ phân tích hơn nhiều và do đó, cung cấp các khả năng tối ưu hóa rộng hơn nhiều. Tuy nhiên, chúng hầu như không được sử dụng và Turing-đầy đủ thực sự được bán như một tính năng tốt.

Có bất kỳ ngôn ngữ không hoàn chỉnh chính thống nào hiện nay được tạo ra để lập trình cho mục đích chung không?


8
Tôi nghĩ rằng hai điều bạn đang tìm kiếm là không tương thích lẫn nhau. Nếu nó không hoàn thành, thì nó không thể được chuyển sang sử dụng tùy ý.
Bobson

@Dokkat Tôi đã mở lại câu hỏi và xóa cuộc thảo luận Meta khỏi các bình luận. Xin lưu ý rằng nếu bạn không đồng ý với một trong những nguyên tắc của trang web, cách thích hợp để tranh luận là đăng một cuộc thảo luận về Meta; không chỉ bỏ qua nó Hơn nữa, đối với các câu hỏi chủ quan, chìa khóa thành công là nghiên cứu trước và định nghĩa nghiêm ngặt. Bạn càng nghiên cứu nhiều, câu hỏi của bạn càng trở nên cụ thể (và có thể trả lời), và bạn càng nhận được từ không gian "không mang tính xây dựng" khét tiếng.
yannis

Ngoài ra, tại sao bạn coi "khả năng tối ưu hóa rộng hơn" là "lợi thế lớn"? Điều này không có nghĩa là tối ưu hóa là không đáng, nhưng tôi chắc chắn sẽ không gọi sự tối ưu vốn có của ngôn ngữ là "lợi thế lớn" mang lại sức mạnh của máy tính hiện đại.
Bobson

2
Coq có thể được coi là khá "chính thống" trong miền của nó, với các đối thủ cạnh tranh (HOL, Agda, ACL và như vậy) ít được nhìn thấy hơn.
SK-logic

Có lẽ tôi không thực sự hiểu sự hoàn thiện của Turing là gì, nhưng làm thế nào một ngôn ngữ có thể là mục đích chung không hoàn thành Turing? Tôi nghĩ rằng ý nghĩa của việc không hoàn thành Turing, là không thể thực hiện bất kỳ nhiệm vụ tính toán nào, do đó được nhắm vào một mục đích cụ thể ..?
Manila Cohn

Câu trả lời:


24

Ngày nay không có ngôn ngữ hoàn chỉnh đa mục đích không Turing. Tuy nhiên, có một số ngôn ngữ cụ thể miền hoàn chỉnh không Turing. ANSI SQL, biểu thức chính quy, ngôn ngữ dữ liệu (HTML, CSS, JSON, v.v.) và biểu thức s là một số ví dụ đáng chú ý.

Thực sự không có lợi cho các ngôn ngữ hoàn chỉnh không Turing đa mục đích. Khía cạnh "dễ phân tích hơn", mà tôi cho rằng là một cái gật đầu với định lý của Rice, được áp dụng nhưng nó không có ý nghĩa nhiều đối với các ngôn ngữ nhắm vào một số lĩnh vực ứng dụng khác nhau, các yêu cầu khác được ưu tiên. Tính linh hoạt của tính hoàn chỉnh Turing quan trọng hơn nhiều so với độ phức tạp của nó. Ngôn ngữ lập trình, như mọi phần mềm khác, đều là về sự đánh đổi.

Đối với các ngôn ngữ cụ thể của miền, mặt khác, nó có thể chỉ là cách khác. Nếu bạn không xây dựng "một ngôn ngữ để thống trị tất cả", bạn có thể tự do triển khai các tính năng có ý nghĩa cho mục đích rất cụ thể của ngôn ngữ của bạn. Và thường xuyên hơn không, Turing hoàn thiện không phải là một trong số họ.


CSS3 Turing hoàn tất.
SK-logic

5
@ SK-logic CSS thực sự có ý nghĩa nếu không có HTML, nó có thể được áp dụng cho bất kỳ loại XML nào và không có gì ngăn bạn triển khai nó cho bất kỳ định dạng nào khác có hình dạng tương thích gần đúng (cây có nút được đặt tên, thứ tự anh chị em, v.v.). Cá nhân tôi đã viết các quy tắc CSS cho một tệp SVG. Nó chỉ phổ biến hơn nhiều đối với HTML vì HTML phổ biến hơn nhiều so với các định dạng khác.

2
@Mike, đó là một tương tự bị hỏng. Ngữ nghĩa CSS3 được liên kết chặt chẽ với ngữ nghĩa ngôn ngữ trình bày.
SK-logic

2
Lưu ý rằng SQL với Windowing và CTE (tức là SQL: 2003) cũng hoàn thành Turing.
Jörg W Mittag

1
"Không có ngôn ngữ hoàn chỉnh đa mục đích không Turing ngày nay". - C không có bộ nhớ ngoài không phải là Turing-Complete, nhưng nó có rất nhiều mục đích chung và chủ đạo. (Vâng, cá nhân tôi cho rằng nó là một ngôn ngữ miền cụ để viết hạt nhân Unix, và thậm chí không đặc biệt tốt ở đó, nhưng không đồng ý trên thế giới.)
Jörg W Mittag

-3

Lý do ngôn ngữ Turing không hoàn chỉnh không phải là chủ đạo là nó dễ dàng thực hiện ngôn ngữ của bạn bất cứ khi nào bạn cần và tuy nhiên bạn cần nó. Một ví dụ thú vị là tập lệnh bitcoin: https://github.com/bitcoin/bitcoin/blob/master/src/script.cpp


5
Có thật không? Hãy tự mình thực hiện Coq từ đầu, nếu điều đó dễ dàng?
SK-logic

Đây chỉ là ý kiến ​​của bạn hoặc bạn có thể sao lưu nó bằng cách nào đó?
gnat

Ví dụ là tất cả các ngôn ngữ dành riêng cho tên miền không cần đệ quy, lặp không giới hạn hoặc các tarpits Turing khác. Ngoài ra, tôi chắc chắn rằng hầu hết chúng ta đã thực hiện một số loại máy tính đơn giản xử lý số học cơ bản.
MauganRa

1
Mặc dù vậy, tôi đồng ý rằng việc giữ ngôn ngữ Turing không đầy đủ là không tầm thường. Ngay cả khi không có tarpits Turing rõ ràng, nó luôn có thể chứa lỗi trình biên dịch khiến nó có thể sử dụng một trong những nền tảng cơ bản.
MauganRa
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.