Những câu hỏi có thể trả lời ngữ nghĩa học mà ngữ nghĩa hoạt động không thể?


14

Tôi quen thuộc với ngữ nghĩa hoạt động (cả bước nhỏ và bước lớn) để xác định ngôn ngữ lập trình. Tôi cũng quan tâm đến việc học ngữ nghĩa học biểu thị, nhưng tôi không chắc liệu nó có xứng đáng với nỗ lực đó không. Tôi sẽ chỉ học cùng một tài liệu từ một quan điểm khác, hay có những hiểu biết mà tôi chỉ có thể đạt được từ việc hiểu ngữ nghĩa biểu thị?

Câu trả lời:


11

Không có thoả thuận thực những gì đặc trưng ngữ nghĩa denotational (xem thêm này bài viết), ngoại trừ việc nó phải sáng tác . Điều đó có nghĩa là nếu là hàm ngữ nghĩa, ánh xạ các chương trình theo nghĩa của chúng, một cái gì đó như sau phải là trường hợp cho tất cả cácnhà xây dựng chương trình n -ary f và tất cả các chương trình M 1 , ..., M n (mặc nhiên giả sử đánh máy tốt):[[]]nfM1Mn

[[f(M1,...,Mn)]]=trans(f)([[M1]],...,[[Mn]])

Ở đây là hàm tạo tương ứng với f trong miền ngữ nghĩa. Thành phần tương tự như khái niệm đồng cấu trong đại số.trans(f)f

Ngữ nghĩa hoạt động không phải là thành phần theo nghĩa này. Trong lịch sử, ngữ nghĩa học hàm ý được phát triển một phần vì ngữ nghĩa hoạt động không phải là thành phần. Sau ngữ nghĩa denotational trật tự lý thuyết mang tính đột phá D. Scott của -calculus, ngữ nghĩa denotational nhất từng là trật tự lý thuyết. Tôi tưởng tượng rằng - ngoài lợi ích trí tuệ thuần túy - ngữ nghĩa học hàm ý hầu hết được phát minh bởi vì vào thời điểm đó (thập niên 1960):λ

  1. Nó đã từng rất khó để lý luận về ngữ nghĩa hoạt động.
  2. Trước đây, rất khó để đưa ra ngữ nghĩa tiên đề cho các ngôn ngữ không tầm thường.

Một phần của vấn đề là khái niệm về sự bình đẳng của các chương trình không được hiểu rõ như bây giờ. Tôi tranh luận rằng cả hai vấn đề đã được cải thiện ở mức độ đáng kể, (1), ví dụ như bằng các kỹ thuật dựa trên cơ sở bisimilation đến từ lý thuyết quá trình (có thể được xem như là một hình thức cụ thể của ngữ nghĩa hoạt động) hoặc ví dụ, Microsoft làm việc về ngữ nghĩa và chương trình hoạt động tương đương và (2) bởi sự phát triển của logic phân tách hoặc logic Hoare có nguồn gốc từ các phiên bản được gõ của logic Hennessy-Milner thông qua các ngôn ngữ lập trình được nhúng trong tính toán π. Lưu ý rằng logic chương trình (= ngữ nghĩa tiên đề) cũng là thành phần.

Một cách khác để xem xét ngữ nghĩa học biểu thị là có nhiều ngôn ngữ lập trình và tất cả chúng đều trông giống nhau, vì vậy có lẽ chúng ta có thể tìm thấy một ngôn ngữ meta đơn giản nhưng phổ quát và ánh xạ tất cả các ngôn ngữ lập trình theo cách cấu thành theo meta đó ngôn ngữ. Trong những năm 1960, người ta nghĩ rằng một số gõ -calculus là meta-ngôn ngữ. Một bức tranh có thể nói hơn 1000 từ:λ

enter image description here

Ưu điểm của phương pháp này là gì? Có lẽ nó có ý nghĩa để xem xét nó từ một POV kinh tế. Nếu chúng ta muốn chứng minh điều gì đó thú vị về một lớp chương trình đối tượng, chúng ta có hai tùy chọn.

  • Chứng minh nó trực tiếp trên cấp độ đối tượng.

  • Chứng minh rằng bản dịch sang cấp độ meta (và trở lại) 'bảo toàn' thuộc tính, và sau đó chứng minh nó cho cấp độ meta, sau đó đẩy kết quả trở lại cấp độ đối tượng.

Chi phí kết hợp sau này có thể cao hơn chi phí trước, nhưng chi phí chứng minh bản dịch có thể được khấu hao trong tất cả các lần sử dụng trong tương lai, trong khi chi phí chứng minh tài sản cho cấp độ meta nhỏ hơn nhiều so với bằng chứng ở cấp độ đối tượng.

Cách tiếp cận lý thuyết thứ tự ban đầu đối với ngữ nghĩa học biểu thị cho đến nay vẫn chưa tuân theo lời hứa này, bởi vì các tính năng ngôn ngữ phức tạp như định hướng đối tượng, đồng thời và tính toán phân tán chưa được đưa ra chính xác về ngữ nghĩa lý thuyết. Theo "chính xác", ý tôi là ngữ nghĩa phù hợp với ngữ nghĩa hoạt động tự nhiên của các ngôn ngữ đó.


Có đáng học ngữ nghĩa học? Nếu bạn có nghĩa là cách tiếp cận lý thuyết trật tự cho ngữ nghĩa học biểu thị, thì có lẽ là không, trừ khi bạn muốn làm việc trong lý thuyết về ngôn ngữ lập trình và cần phải hiểu các bài báo cũ hơn. Một lý do khác để học cách tiếp cận lý thuyết trật tự đối với ngữ nghĩa học biểu thị là vẻ đẹp của phương pháp này.


4

O(p,σ)σp,σσD(p)pO(p,σ)=D(p)(σ)S(p)σO(p,σ)D(p)

C:XXS(C(p))=S(p)pσO(C(p),σ)=O(p,σ)pD(C(p))=D(p)σ

Ví dụ ngớ ngẩn:

C(p)=(q;q)(skip;q;skip;q;skip)

pC

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.