5

Nhiều ngôn ngữ lập trình có chung các tính năng chung và thậm chí khá phổ quát. Ví dụ: nếu bạn so sánh Java, VB6, .NET, PHP, Python, thì bạn sẽ tìm thấy các chức năng phổ biến như cấu trúc điều khiển, thao tác số và chuỗi, v.v.có Mô hình phổ quát cho ngôn ngữ không?

Điều gì đã được thực hiện để xác định các tính năng này ở dạng meta -language (hoặc ngôn ngữ thuyết bất khả tri) cấp độ?

UML cung cấp tham chiếu mô tả về phần mềm ở mọi khía cạnh, nhưng trọng tâm trong thế giới thực có vẻ là các quy trình dữ liệu. UML có liên quan không?

Tôi không hỏi "Tại sao chúng tôi không có một ngôn ngữ duy nhất thay thế hàng loạt hiện tại." Chúng ta cần nhiều công cụ khác nhau (ít nhất là trong eon này).

Tôi không yêu cầu tất cả các ngôn ngữ đều phù hợp với mẫu - ngôn ngữ được biên soạn và biên dịch khác nhau để làm cho điều đó không khả thi (và một số người gọi HTML là ngôn ngữ, mặc dù tôi sẽ không). Bất kỳ nỗ lực nào cũng sẽ bắt đầu với phạm vi hẹp. Phù hợp với điều này, tôi sẽ không mong đợi mô hình để bao gồm ngay cả một lựa chọn nhỏ với hiệu lực đầy đủ.

Tuy nhiên, tôi hy vọng rằng một mô hình như vậy có thể được sử dụng để chuyển từ ngôn ngữ này sang ngôn ngữ khác (với các mục tiêu hạn chế - hãy nghĩ đến bản dịch nhanh).

+0

UML không phải là "Mô hình phổ quát cho ngôn ngữ", đó là "Ngôn ngữ mô hình hóa phổ quát". Vẫn còn tùy thuộc vào nhà phát triển để biến các mô hình thành một chương trình (hoặc loại bỏ chúng ra, nếu công cụ UML tạo mã). –

Trả lời

3

Bạn đang mô tả những âm thanh như formal semantics of programming languages. Có nhiều cách tiếp cận khác nhau và mỗi phương pháp sẽ đưa ra một cách để chỉ định chính thức ý nghĩa của một chương trình bằng một số ngôn ngữ lập trình.Trong một số trường hợp, đặc điểm kỹ thuật này về cơ bản là một bản dịch sang một ngôn ngữ khác như tính toán lambda, hoặc biên dịch cho một máy trừu tượng được chỉ định chính thức như SECD.

Có quá nhiều công việc ở đây thật khó để chọn một tham chiếu cụ thể. Nhưng tôi hy vọng tôi đã cung cấp cho bạn một số từ khóa hữu ích để tiếp tục tìm kiếm của bạn.

+0

Điều này có vẻ như là tốt nhất của 7 câu trả lời cho đến nay. Và khó khăn như hầu hết những người khác - những tác động đáng gờm trong quá trình quét của tôi về bài viết được liên kết. – Smandoli

+0

Tôi có this sách đang ngồi ở nhà. Đó là cũ, và một chút lỗi thời, nhưng có vẻ hơi ít đáng sợ hơn so với các giấy tờ ở đó. Nó hoạt động thông qua các ví dụ cụ thể về ngôn ngữ một cách chi tiết. Ví dụ, một bản dịch đầy đủ của một tập hợp con (Prolog-68) thành Algol-68, minh họa cách Algol-68 có thể được sử dụng như một ngôn ngữ phổ quát để đại diện cho bất kỳ ngôn ngữ nào khác. – sigfpe

0

UML thường được sử dụng để xác định thuật toán/mã theo các thuật ngữ đơn giản hơn trước khi chuyển sang mã thực.

Để trả lời những gì tôi đoán là câu hỏi của bạn, đã có một bộ phần ngôn ngữ được yêu cầu trong khi, cho, nếu, người khác ... Điều này có bao giờ được đặt làm tiêu chuẩn hoặc được đưa vào cơ sở hay không thư viện được sử dụng bởi tất cả các ngôn ngữ: không, điều này là do các nhà phát triển ngôn ngữ khác nhau muốn tự làm.

+0

"đã có một bộ các bộ phận được yêu cầu" - Tôi cho rằng tôi đang tìm kiếm thêm thông tin về bit đó. – Smandoli

+0

Để rút ra từ câu trả lời của Romain Hippeau về việc hoàn thiện turing, nó sẽ có vẻ nguyên thủy nhất, chúng ta cần nếu, goto, và cấp phát bộ nhớ. Các tính năng nâng cao hơn như chức năng, vòng lặp và kiểu dữ liệu được xây dựng dựa trên ba ý tưởng rất cơ bản đó. – aepheus

4

Đã có nhiều nỗ lực ở đây, nhưng không có thành công nào. Tôi biết sớm nhất là UNCOL cách đây hơn 50 năm.

Bạn đã đưa ra một danh sách các ngôn ngữ có nhiều điểm chung vì chúng khá giống nhau - tất cả đều là ngôn ngữ thủ tục với các gốc phổ biến và một số phần mở rộng OO được chèn vào, do đó không quá đáng ngạc nhiên. Nếu bạn bắt đầu nhìn vào các ngôn ngữ khác nhau như LISP, haskell, erlang, prolog, hoặc thậm chí SQL bạn bắt đầu thấy những thứ rất khác nhau.

+0

Tôi rất muốn có quan điểm lớn đó. Tôi rất vui khi biết thêm về mỏ nhỏ. Đối với SQL, đó là một ví dụ khác về thuật ngữ "ngôn ngữ" không đầy đủ hoặc mơ hồ (ít nhất là do tôi sử dụng). Tôi cần một vốn từ vựng phong phú hơn. – Smandoli

+0

Cảm ơn bạn đã tham khảo UNCOL. Đó là một nỗ lực trong giải pháp phổ quát, chứ không phải là mô hình .. Wikipedia: "UNCOL là một nỗ lực đầy tham vọng cho đầu những năm 1960. Một nỗ lực để giải quyết vấn đề biên dịch-viết, nó cuối cùng thất bại vì công nghệ ngôn ngữ và trình biên dịch chưa trưởng thành. "Vậy ... những gì đã thay đổi, thực sự? Nếu có sự trưởng thành hơn, nó không dẫn đến sự đa dạng hơn. – Smandoli

0

Tôi nghĩ rằng gần nhất bạn có thể làm được điều này mà không mất tính tổng quát là một máy Turing, mà không phải là rất hữu ích cho các mục đích thực tế. Nhưng nếu bạn cho phép ngôn ngữ máy Turing được "gắn nhãn" và sử dụng lại, bạn có thể xây dựng các khái niệm bạn cần, làm việc từ thấp đến cao cấp.

+0

Điều đó phải là luận văn tốt nghiệp của một ai đó, phải không? – Smandoli

+1

@Smandoli, có thể là một * nhiều * đề tài tốt nghiệp của mọi người! – tloflin

+1

Vâng, miễn là kết quả là một cái gì đó mà có thể chơi một trò chơi phong nha đi. – Smandoli

0

Tôi nghĩ MOF là ngôn ngữ chung. Ví dụ, bạn có thể tạo sơ đồ UML từ MOF thông qua một siêu mô hình UML. Nếu bạn lưu thông tin metamodel này vào xmi thì bạn có thể lưu những thông tin bạn cần và thậm chí nhiều hơn bất kỳ ngôn ngữ nào. Ngữ nghĩa XMI quá giàu đến mức không có giới hạn cho việc sử dụng nó. Nếu bạn ánh xạ UML đến xmi trên đỉnh của một metamodel trực tiếp đồng bộ hóa với MOF thì đây là ngôn ngữ chung của tôi.

0

Tác giả của Pattern Calculus dường như đề xuất mô hình phổ quát như vậy. Tôi hy vọng rằng nó sẽ trở nên hữu ích như những nỗ lực trước đây để xác định một mô hình phổ quát, đó là để nói, tốt trong các phần nhưng không phải là từ cuối cùng.

Các vấn đề liên quan