Sách về ngữ nghĩa ngôn ngữ lập trình


31

Tôi đã đọc " Ngữ nghĩa với các ứng dụng " của Nielson và Nielson , và tôi thực sự thích chủ đề này. Tôi muốn có thêm một cuốn sách về ngữ nghĩa ngôn ngữ lập trình - nhưng tôi thực sự chỉ có thể có một cuốn sách.

Tôi đã xem cuốn sách Turbak / Gifford , nhưng nó quá dài dòng; Tôi nghĩ Winskel sẽ ổn, nhưng tôi không có quyền truy cập vào nó (nó không có trong thư viện Đại học của chúng tôi và tôi thiếu tiền), và tôi thậm chí không chắc là nó không hẹn hò. Slonneger có vẻ ổn, nhưng phần thực tế làm cho nó hơi dài và tôi không thoải mái lắm với phong cách của anh ấy.

Vì vậy, câu hỏi của tôi là - Winskel có phải là một cuốn sách tốt? Và nó có phải là ngày?

Ngoài ra, có những cuốn sách ngắn gọn khác về chủ đề này?


5
thêm liên kết đến các trang nhà xuất bản cho tất cả các cuốn sách. có thể hữu ích cho những người khác đang tìm cách duyệt.
Suresh Venkat

2
Những loại ngữ nghĩa mà bạn quan tâm? Phi lý? Hoạt động? Một cái nhìn tổng quan?
Ohad Kammar

@Ohad Kammar: Tôi quan tâm đến cả hai.
Jay

Câu trả lời:


31

Tất cả phụ thuộc vào mức độ bạn muốn đi sâu và bao nhiêu bạn đã biết. Đối với người mới bắt đầu, cuốn sách của Winksel thực sự rất hay, nhưng đúng vậy, nó không giới thiệu cho bạn về tình trạng của nghệ thuật trong ngữ nghĩa như nó đã được viết cách đây khoảng 20 năm. Tuy nhiên, đây vẫn là phần giới thiệu đầu tiên tốt về chủ đề này. Cũng có thể đáng để chỉ ra rằng T. Nipkow đã chính thức hóa một đoạn đáng kể của cuốn sách của Winskel trong Isabelle / HOL, xem tại đây . Vì vậy, nếu bạn muốn học sử dụng trợ lý bằng chứng tương tác cùng với việc hiểu ngữ nghĩa của ngôn ngữ lập trình, bạn có rất nhiều tài liệu mạch lạc để rút ra.

Những cuốn sách khác nâng cao hơn là:

  • Gunter, Ngữ nghĩa của ngôn ngữ lập trình , một cuốn sách nâng cao hơn tập trung vào ngữ nghĩa học phi nghĩa, một cách tiếp cận ngữ nghĩa, không đáp ứng được kỳ vọng. Tập trung vào các tuyến đường hoàn toàn chức năng và bỏ qua sự tương tranh. Đây là cuốn sách mà tôi đã tự học ngữ nghĩa từ khi còn là sinh viên, và khi nhìn lại, tôi ước mình đã sử dụng cuốn sách của Winksel thay thế. Gunter không phải là một dễ đọc cho người mới bắt đầu.

  • Tên miền và lambda-tính toán của Amadio và Curien. Một cuốn sách khác được viết nhiều hơn trong truyền thống lý thuyết miền, mặc dù nó thảo luận về tính toán quá trình.

  • Những cuốn sách của John Mitchell đã được đề cập ở trên. Họ cũng chủ yếu là về tính toán tuần tự.

Những cuốn sách như TAPL của Pierce rất hay, nhưng tập trung hẹp vào một khía cạnh của ngôn ngữ lập trình, cụ thể là các loại, cũng quan trọng như vậy. Tôi sẽ không đề xuất nó như là một giới thiệu đầu tiên về lĩnh vực chung của ngôn ngữ lập trình, nhưng bắt buộc phải đọc cho bất kỳ ai muốn tìm hiểu về các loại.

Sự thật mà nói, tôi nghĩ rằng hiện tại không có cuốn sách giới thiệu về ngữ nghĩa ngôn ngữ nào phản ánh sự tiến bộ đáng kể của thập kỷ trước, với sự thay đổi quyết định từ phương pháp biểu thị và tính toán tuần tự sang tính đồng thời (tính toán quá trình và ngữ nghĩa trò chơi) , ngữ nghĩa tiên đề và việc sử dụng các trợ lý bằng chứng tương tác trong xác minh.

Cập nhật 22. Tháng 4 năm 2014: Tobias Nipkow và Gerwin Klein đã xuất bản một cuốn sách mới

có thể được xem là 'Winskel in Isabelle / HOL'. Đây là phần giới thiệu về ngữ nghĩa của các ngôn ngữ lập trình (chủ yếu là vận hành và tiên đề) nhưng không giống như các cách tiếp cận dựa trên giấy bút trước đây, cuốn sách này thể hiện tất cả toán học của nó trong Isabelle / HOL. Nói cách khác, đó đồng thời là một cuốn sách về định lý chứng minh.

Cuốn sách này hoàn toàn mới vì vậy tôi chưa từng sử dụng cho việc giảng dạy, nhưng nó thực sự phù hợp như một phần giới thiệu được đặt ở cấp độ thấp hơn so với Tổ chức phần mềm của Pierce et al.


2
Có một sự thay đổi từ các phương pháp biểu thị? Dường như với tôi giống như kiểu người trước đây sẽ sử dụng bằng chứng lượn sóng bằng tay, ngày nay dự kiến ​​sẽ đưa ra bằng chứng chính thức. Vì các phương pháp biểu thị vẫn không thể dễ dàng mô hình hóa mọi thứ chúng ta làm và đòi hỏi nhiều điều kiện tiên quyết hơn, những nhà nghiên cứu này sử dụng các phương pháp dễ tiếp cận hơn như trò chơi, tính toán quy trình, trợ lý chứng minh. Tôi không chắc liệu có sự suy giảm trong các phương pháp biểu thị hay không.
Ohad Kammar

4
Xin đừng nhầm lẫn ngữ nghĩa biểu thị với lý thuyết miền . Ngữ nghĩa trò chơi có thể, và thường là, hoàn toàn có ý nghĩa, nghĩa là, ý nghĩa của một chương trình là một chức năng của ý nghĩa của các phần của nó.
Andrej Bauer

2
Tôi đã mở một chủ đề mới liên quan đến bình luận này. Nhưng ngay cả khi tôi không chắc chắn tôi đồng ý với định nghĩa của bạn, về mặt ngữ nghĩa trò chơi có bản chất là biểu thị. Tôi nghĩ rằng tôi nên thay thế "trò chơi" bằng "ngữ nghĩa hoạt động" trong nhận xét của mình và bao gồm ngữ nghĩa trò chơi như có thể là một hình thức nghiên cứu ngữ nghĩa học khác. cstheory.stackexchange.com/questions/3577/iêu
Ohad Kammar

1
Tôi không tin có một sự thay đổi. Xem bình luận đầu tiên của tôi, theo nhận xét của Andrej.
Ohad Kammar

1
Có một sự thay đổi? Một câu hỏi thú vị. Làm thế nào chúng ta có thể đo lường một sự thay đổi? Có rất nhiều tiêu chí chúng ta có thể áp dụng, từ những tiêu chí tương đối cụ thể như số tiền trợ cấp lại được trao cho các phương pháp khác nhau, cho đến những ý tưởng mơ hồ như chia sẻ tâm trí. Dựa vào mức độ liên quan của chúng tôi, với tư cách là nhà nghiên cứu, với tư cách là nhân viên, với tư cách là người xin cấp tiền, trong kết quả của câu hỏi như vậy, chúng tôi không đồng ý trả lời.
Martin Berger

20

Đây là một mẫu ngẫu nhiên của các tài liệu có sẵn miễn phí trực tuyến:

  • Winskel, Ngữ nghĩa chính thức của ngôn ngữ lập trình , xem trước Google Sách . Tôi không biết gì về cuốn sách này. Nó nằm trong danh sách vì câu hỏi đặc biệt hỏi về nội dung của nó, chủ yếu là trực tuyến.
  • Morgan, Lập trình từ Đặc điểm kỹ thuật , danh sách các tệp ps . Chủ đề là sàng lọc, đó là quá trình bắt đầu với các mô tả không thể thực thi ở mức độ cao và biến đổi một cách có hệ thống sau đó thành một thứ có thể thực thi được. Tất nhiên, mỗi bước tinh chỉnh phải bảo tồn ngữ nghĩa, do đó, nó cũng thảo luận về một loại ngữ nghĩa nhất định (chủ yếu dựa trên các phép đo biến vị ngữ).
  • Harper, Cơ sở thực tiễn của ngôn ngữ lập trình , pdf của dự thảo . Xem bình luận của Dave Clarke bên dưới.
  • Rémy, sử dụng, hiểu và làm sáng tỏ ngôn ngữ OCaml , pdf . Đây là cuốn sách mà tôi học lập trình chức năng (OCaml, chính xác hơn) và tôi thích nó rất nhiều . Nó trình bày ngữ nghĩa của các tính năng ngôn ngữ cơ bản theo một cách rất hay và trong quá trình trình bày tính toán lambda và lý thuyết loại trên cơ sở 'cần biết'.
  • Peyton Jones, Việc thực hiện các ngôn ngữ lập trình chức năng , djvu . Các chương đầu tiên mô tả tính toán lambda (và 'ngữ nghĩa hoạt động' của nó) và cách các tính năng ngôn ngữ cấp cao hơn được đưa vào tính toán lambda. Theo nghĩa này, bài viết đưa ra một ngữ nghĩa hoạt động cho các ngôn ngữ chức năng.
  • Pierce (ed), Chủ đề nâng cao về loại và ngôn ngữ lập trình , xem trước Google Sách .
  • Slonneger, Cú pháp và ngữ nghĩa của ngôn ngữ lập trình , danh sách các tệp pdf . Tôi đã xem xét điều này một thời gian ngắn trước đây và không thích nó nhiều. Nó nằm trong danh sách vì nó được đề cập trong câu hỏi.
  • Brookes, Một ngữ nghĩa cho logic tách đồng thời , pdf . Đây là một bài viết lớn (80 trang), không phải là một cuốn sách. Tôi bao gồm nó bởi vì đó là một sự phát triển gần đây mà tôi thấy thú vị.

1
đó là rất nhiều liên kết :)
Suresh Venkat

3
Điều này sẽ hữu ích hơn nếu nó đã được trình bày dưới dạng một danh sách. Dù sao, tôi muốn giới thiệu cuốn sách Harper: nhấp vào "có thể".
Dave Clarke

Tôi đồng ý. Radu, bạn có thể liệt kê ra những cuốn sách, vì vậy chúng tôi biết những gì chúng tôi đang nhấp vào? đây sẽ là một nguồn tài nguyên tuyệt vời
Suresh Venkat

Bây giờ là một danh sách. (Phiên bản đầu tiên được đăng vào khoảng 2 giờ sáng, sau khi ngủ khoảng 5h đêm hôm trước .: P)
Radu GRIGore

16

Tôi sẽ chia các cuốn sách về ngữ nghĩa ngôn ngữ lập trình thành hai lớp: những cuốn tập trung vào mô hình hóa các khái niệm ngôn ngữ lập trình và những cuốn sách tập trung vào các khía cạnh nền tảng của ngữ nghĩa. Không có lý do gì một cuốn sách không thể làm cả hai. Nhưng, thông thường, chỉ có rất nhiều bạn có thể đưa vào một cuốn sách, và các tác giả cũng có những khuynh hướng của riêng họ về những gì quan trọng.

Cuốn sách của Winskel, đã được đề cập, có một chút cả hai khía cạnh. Và, nó là một cuốn sách tốt cho người mới bắt đầu. Một cuốn sách hay không kém, thậm chí còn tốt hơn, là cuốn sách mà tôi đã bắt đầu: Mô tả ngôn ngữ lập trình của Gordon về ngôn ngữ lập trình . Đây là cuốn sách đầu tiên của tôi về ngữ nghĩa, mà tôi đã đọc ngay sau khi tôi hoàn thành công việc đại học của mình. Tôi phải nói rằng nó đã cho tôi một nền tảng vững chắc về ngữ nghĩa và tôi không bao giờ phải tự hỏi làm thế nào ngữ nghĩa học khác với ngữ nghĩa hoạt động hoặc ngữ nghĩa tiên đề, vv Cuốn sách này sẽ vẫn là yêu thích mọi thời đại của tôi về ngữ nghĩa học.

Các cuốn sách khác tập trung vào các khía cạnh mô hình hóa hơn là các khía cạnh nền tảng như sau:

  • Ngữ nghĩa của Tennent về ngôn ngữ lập trình , là một cuốn sách ít nhiều cải tiến về ngữ nghĩa của các ngôn ngữ lập trình mệnh lệnh. Nó rất dễ đọc. Tuy nhiên, nó có xu hướng trừu tượng trong các phần sau của cuốn sách và bạn có thể phải đấu tranh để xem tại sao mọi thứ lại được thực hiện theo một cách cụ thể.

  • Lý thuyết của Reynold về ngôn ngữ lập trình . Bất cứ ai chuyên về ngữ nghĩa chắc chắn nên đọc cuốn sách này. Đó là sau tất cả bởi Reynold. (David Schmidt đã từng nhận xét với tôi, "ngay cả khi Reynold đang đọc báo buổi sáng cho bạn, bạn muốn lắng nghe cẩn thận, bởi vì bạn có thể học được điều gì đó quan trọng"!) Nó có độ bao phủ tốt về cả khía cạnh mô hình hóa và khía cạnh nền tảng.

Những cuốn sách hay nhất về các khía cạnh nền tảng là của Gunter (mà tôi coi là một cuốn sách văn bản tốt nghiệp) và của Clark (là cuốn sách tham khảo tốt để có trên kệ sách của bạn vì nó khá toàn diện).


Rất vui được gặp bạn ở đây, Uday!
Radu GRIGore

Tôi rất vui khi được ở đây quá. Đây là một nguồn tài nguyên rất tốt đẹp!
Uday Reddy

Làm thế nào về: Chuyển tiếp và cây xanh: Giới thiệu về ngữ nghĩa hoạt động cấu trúc từ Hans Hüttel 2010. Có vẻ như có các đánh giá goood nhưng không ai đề cập đến nó ở đây.
Arturo Hernandez

1
@Uday: Cảm ơn câu trả lời. "Mô hình hóa các khái niệm ngôn ngữ lập trình" và "các khía cạnh nền tảng của ngữ nghĩa" nghĩa là gì? Sự khác biệt và mối quan hệ của họ là gì?
Tim

1
@Tim: Để cung cấp ngữ nghĩa của ngôn ngữ lập trình, bạn cần một số cấu trúc toán học dạng, ví dụ: đặt trong trường hợp đơn giản nhất, nhưng các cấu trúc phức tạp như miền, danh mục, than đá, v.v. cho các vấn đề không thể xử lý. Theo "các khía cạnh nền tảng", ý tôi là lý thuyết về các cấu trúc tinh vi hơn này. Trong trường hợp trước, trọng tâm là các ngôn ngữ lập trình và, trong trường hợp sau, nó tập trung vào các nền tảng toán học.
Uday Reddy

8

Tôi thực sự rất thích đọc Winskel khi tôi đang tham gia khóa học đại học về ngữ nghĩa. Tuy nhiên, tôi không thể biết đó là ngày, vì tôi không nghiên cứu trong lĩnh vực này. Một điểm cộng của Winskel là bạn có thể tìm thấy nó được dịch sang các ngôn ngữ khác ngoài tiếng Anh.

Để đọc thêm, nhiều hơn ở cấp độ sau đại học, tôi đề nghị các cuốn sách của John Mitchell Nền tảng cho ngôn ngữ lập trìnhkhái niệm về ngôn ngữ lập trình . Nếu bạn chỉ đọc những chương đầu tiên, tôi đoán chúng cũng đáp ứng yêu cầu về sự đồng nhất của bạn.

Bạn sẽ không tìm thấy bản nháp miễn phí của những cuốn sách này, vì vậy nếu bạn có ngân sách hạn chế, hãy tìm "có thể" trong câu trả lời của Radu.


6

Chà, tôi không phải là một chuyên gia về vấn đề này, nhưng có một số lời khuyên chung mà tôi có thể đưa ra.

Đầu tiên, có một số người đã đọc cuốn sách và cung cấp các đánh giá về nó. Ví dụ, đối với cuốn sách của Winskel Các ngữ nghĩa chính thức của ngôn ngữ lập trình (xem [1][2] ) tôi đã tìm thấy các đánh giá trên Amazon.

Một phần của một đánh giá đọc:

Cuốn sách này nhầm lẫn giữa cú pháp và ngữ nghĩa ngay từ đầu, giống như tách các chữ theo giá trị của nó. Không có ký hiệu đặc biệt nào được sử dụng để phân biệt chúng. Đây là một vấn đề quan trọng mà tác giả nên giải quyết trong một chủ đề như thế này. Ngoài ra, một số ký hiệu khác mà anh ta sử dụng khá khó hiểu, như hiển thị các tiền đề và kết luận.

Tác giả dường như cho rằng bạn có TẤT CẢ các điều kiện tiên quyết cần thiết khi ông giải thích các tài liệu cơ bản trong một vài chương đầu tiên (tức là lý thuyết tập hợp, ngữ nghĩa hoạt động, cảm ứng, định nghĩa quy nạp) rất ngắn gọn. Phong cách mà tác giả sử dụng trong phần giới thiệu là đặt hai hoặc ba đoạn văn bản và đặt một số công thức sau đó đưa ra bài tập. Đó là, đối với tôi, khá bực bội ...

18/20 người thấy đánh giá hữu ích. Bạn có thể tìm kiếm Amazon (hoặc các nguồn khác) để xem thêm đánh giá.

Thứ hai, Amazon cung cấp các loại và ngôn ngữ lập trình và lý thuyết danh mục cơ bản cho các nhà khoa học máy tính cùng với cuốn sách này. Trong một chủ đề khác, Dave Clarke cung cấp những cuốn sách này như những cuốn sách xuất sắc về "Hệ thống ngữ nghĩa và ngữ nghĩa ngôn ngữ lập trình". Một lần nữa, tôi không phải là một chuyên gia, nhưng những điều đó có thể hữu ích cho bạn.


TaPL đi hơi chậm so với khẩu vị của tôi. Đó là một cuốn sách hay, nhưng tôi đã đề cập đến điều này bởi vì người hỏi có vẻ lo lắng về những cuốn sách "dài dòng".
Radu GRIGore

@Radu: Chắc chắn TAPL chậm, nhưng nó là một giới thiệu khá tốt. Cuốn sách Harper mà bạn đề cập trong các liên kết của bạn đi nhanh hơn nhiều và bao quát hơn rất nhiều, mặc dù nó chưa được hoàn thành.
Dave Clarke

4
Hãy xem đánh giá của Amazon về cuốn sách của Winskel với một chút muối. Nó thường được sử dụng như một văn bản được đề xuất trong các khóa học ngữ nghĩa đại học và có thể thu hút sinh viên bất mãn. Tôi đã đọc cuốn sách và thấy các chương giới thiệu là quá đủ. Ký hiệu của anh ta dường như cũng hoàn toàn chuẩn.
Đaminh Mulligan


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.