Câu hỏi trực tuyến là gì mà lý thuyết ngôn ngữ lập trình đang cố gắng trả lời?


10

Tôi đã quan tâm đến nhiều chủ đề khác nhau như Logic kết hợp, Tính toán Lambda, Lập trình hàm trong một thời gian và đã nghiên cứu chúng. Tuy nhiên, không giống như "Lý thuyết tính toán" cố gắng trả lời câu hỏi về "khả năng tính toán", tức là những thứ có thể / không thể được tính toán với nhiều ràng buộc khác nhau, tôi đang loay hoay tìm cách tương tự cho "Lý thuyết lập trình"

Wikipedia mô tả nó như sau:

Lý thuyết ngôn ngữ lập trình (PLT) là một nhánh của khoa học máy tính liên quan đến việc thiết kế, thực hiện, phân tích, mô tả và phân loại ngôn ngữ lập trình và các tính năng riêng lẻ của chúng.

Điều này giống như nói "mọi thứ" không thực sự cụ thể.

Sự tiến triển chung của các chủ đề thường là như vậy:

Logic kết hợp> Tính toán Lambda> Lý thuyết loại Martin Lof> Tính toán Lambda đã nhập> (Có gì đó xảy ra ở đây)> Ngôn ngữ lập trình được phát triển - có rất ít kết nối với CL /λ

Tôi có thể thấy "toán học" cơ bản liên quan đến CL / và các bằng chứng thú vị được đưa ra như là kết quả bao gồm định lý Church-Rosser và điều đó thật gọn gàng. Tuy nhiên, tôi đang đấu tranh để hiểu "mục tiêu cuối cùng" của tất cả các cam kết này? Là gì Chén thánh của PLT nếu bạn sẽ? Bây giờ nó dường như chỉ là gãi ngứa nhưng tôi thực sự không thể vượt qua cầu nối từ nghiên cứu / lý thuyết đến bất cứ điều gì thực tế.λ

Lưu ý: Tôi nhận được nó cho đến khi sử dụng -calc cho bằng chứng không thể giải quyết được. Nhưng ngoài khả năng ứng dụng vào "khả năng tính toán", tôi chỉ không hiểu và đang gặp khó khăn thậm chí hiểu được nhu cầu nghiên cứu về PLT từ POV hẹp này. Bất kỳ cuốn sách, tài liệu tham khảo nào có thể làm sáng tỏ "bức tranh lớn" của PLT?λ


1
Bạn hoàn toàn phớt lờ toàn bộ dòng PLT trong "tiến trình chung" của bạn. Vì một số lý do, quan điểm của bạn dường như bị sai lệch bởi -calculus và lý thuyết loại. Chúng ta hãy xem các giấy tờ được chấp nhận của POPL 2019 : lập trình ngẫu nhiên đồng thời, lập trình xác suất, lắp ráp có thể kiểm chứng, hiệu ứng đại số, chứng nhận mạng thần kinh, PL và mô hình bộ nhớ yếu phần cứng, lập trình lượng tử, v.v. loại lý thuyết ", bạn sẽ không nói? λ
Andrej Bauer

Bạn đúng 100%. Do đó tôi gọi "POV hẹp" của mình. Tôi chỉ quen thuộc với "các chủ đề khác" bằng cách đọc xung quanh đây và kiểm tra Kỷ yếu SIGPLAN / POPL. Tôi vẫn chưa tìm thấy một "cuốn sách tham khảo toàn diện" cung cấp một cái nhìn tổng quan về PLT bao gồm các chủ đề bạn đã đề cập. Bit lý thuyết loại chỉ từ POV của "ngôn ngữ lập trình" của tôi. Bạn có thể có một số gợi ý có thể cung cấp giới thiệu cấp cao cho các lĩnh vực khác nhau của PLT để có được một cái nhìn tổng quan về bức tranh lớn? Tôi tò mò muốn biết những "mô hình" cơ bản nào họ sử dụng và làm thế nào? ở khắp mọi nơi? λ
Tiến sĩ

2
@PhD Không có giới thiệu cấp cao cho các lĩnh vực khác nhau của PLT mà bạn muốn, c'est la vie ! Có lẽ một ngày này sẽ thay đổi. Nhưng đừng nín thở. Lĩnh vực này đang phát triển nhanh chóng, và phân biệt chính nó thành các trường con. Các mô hình đơn giản phổ biến khác bao gồm -calculus, ngữ nghĩa hoạt động cấu trúc, phép tính mệnh lệnh đơn giản (như ngôn ngữ WHILE) và nhiều mô hình khác. Thông thường người ta phát minh ra một phép tính đồ chơi phù hợp với miền ứng dụng của một người. π
Martin Berger

Câu trả lời:


13

Mục đích chung của PLT là làm cho kỹ thuật phần mềm công nghiệp (nói chung) rẻ hơn (cũng theo nghĩa chung), thông qua tối ưu hóa công cụ quan trọng nhất (ngôn ngữ lập trình) và hệ sinh thái công cụ liên quan.

Một số lý do tại sao toán học có liên quan:

  • PL rất không tầm thường và không rõ ràng rằng họ làm đúng mà không cần bằng chứng. Các toán học đưa ra một mô hình đơn giản hóa các ngôn ngữ lập trình thực. Mô hình này cho phép chúng tôi nghiên cứu các ngôn ngữ lập trình thực trong một cài đặt đơn giản hơn nhiều, loại bỏ (hy vọng) hầu hết các vấn đề đã ở cấp độ mô hình. Ngôn ngữ lập trình thực hiện đang có thể toán học. Nói cách khác: lambda-compus là ruồi giấm, E.Coli, con bò hình cầu của PLT.

  • PLT thiếu các phương pháp thực nghiệm phù hợp, sẽ tốt hơn / tốt hơn để có, vì vậy toán học được thực hiện như một sự thay thế.

  • Toán học thật đẹp và sâu sắc.

  • Các toán học đưa ra một phương pháp nghiên cứu đơn giản, đã thử và kiểm tra, điều này rất quan trọng để giúp sinh viên tiến sĩ tốt nghiệp. Thông thường, một số biến thể của ví dụ: Điều tra PL có tính năng XYZ thông qua việc thêm nó vào lambda-compus. Thêm các loại đơn giản cho XYZ và chứng minh loại âm thanh. Thêm thuốc generic cho XYZ và chứng minh loại âm thanh. Chứng minh một định lý tham số cho các tổng quát XYZ. Thêm các loại phụ thuộc cho XYZ và chứng minh loại âm thanh. Phát triển một loại suy luận một phần cho các loại phụ thuộc XYZ. Thêm các loại dần dần cho XYZ và chứng minh loại âm thanh. Thêm hợp đồng cho XYZ. Mỗi cái là một tờ giấy. Bạn có thể dừng lại nếu nghiên cứu sinh hoặc postdoc của bạn hết thời gian. Mỗi điều ở trên đều thú vị và sẽ mang lại cái nhìn sâu sắc về khái quát, tham số, suy luận kiểu v.v ... Đường ống này là một điều tuyệt vờicách điều hướng các vùng nước khó khăn của tất cả các ngôn ngữ lập trình có thể. Cách học thứ hai là triển khai các ngôn ngữ trong trình biên dịch, nhưng điều đó ít dễ điều khiển hơn đối với một cá nhân.

Liệu PLT có cần thiết hay không là một câu hỏi thú vị. Hầu hết các lập trình viên làm việc dường như nghĩ rằng nó không phải. Họ đã sai: hầu hết các ngôn ngữ được phát triển bởi các lập trình viên làm việc không có nền tảng PLT (ví dụ Javascript, PHP) bắt đầu khủng khiếp và tạo ra tất cả các lỗi mà các nhà lý thuyết PL đã học cách tránh. Nếu một PL được phát triển bởi một người nghiệp dư đánh vào dòng chính, các nhà lý thuyết PL cần một thập kỷ hoặc lâu hơn để sửa các lỗi rõ ràng (ví dụ: trang bị thêm một hệ thống gõ tĩnh, xem Bản mô tả). Hãy để tôi tóm tắt tình huống này:

 Every successful programming language ends up being ML! Either because 
 it was designed by a PL theorist as ML from the start, or because a 
 decade of painful evolution removes all the obvious flaws, leaving ML. ;-)

Ngoài ra: Tình trạng này hoàn toàn là lỗi của PLT bởi vì hầu hết trong số họ không có kinh nghiệm lập trình công nghiệp, vì vậy không thực sự biết điểm đau của các kỹ sư phần mềm làm việc là gì. Đặc biệt, vì lý do xã hội học, hầu hết các nhà lý thuyết PL cho rằng lập trình chức năng thuần túy trong các ngôn ngữ như Agda là giải pháp cho tất cả các vấn đề, không đứng vững để xem xét.


1
@MartinBerger: CompCert có được coi là một ví dụ về khả năng xử lý ngôn ngữ lập trình trong thế giới thực "về mặt lý thuyết" không? Nếu không, bạn đặt thanh cao bao nhiêu, vì CompCert khá ấn tượng.
Andrej Bauer

2
@MartinBerger: Vui lòng xem xét việc tưới nước "hầu hết các nhà lý thuyết PL nghĩ rằng lập trình chức năng thuần túy trong các ngôn ngữ như Agda là giải pháp cho tất cả các vấn đề" bởi vì đó chỉ là sự ca ngợi và trút giận của bạn. Đối với người mới bắt đầu, ngay cả khi bạn xem các chủ đề hiện đang có tại ICFP và POPL, phần lớn là về các ngôn ngữ lập trình không tinh khiết .
Andrej Bauer

5
@PhD: có nhiều thứ hơn với PLT so với lý thuyết loại. Đó chỉ là lý thuyết loại là điều đầu tiên mà bạn chú ý vì nó là một trong những công cụ chính của PLT.
Andrej Bauer

1
@AndrejBauer CompCert, CakeML, v.v ... rất ấn tượng, nhưng chúng khác xa các trình biên dịch được sử dụng rộng rãi như LLVM, GCC, v.v. mà bạn không có được trong kỹ thuật phần mềm công nghiệp bình thường. Chưa kể rằng một phần lớn công việc ban đầu của Xavier trên CompCert bao gồm việc xác định trước đặc tả.
Martin Berger

2
@PhD Liên quan đến "" hoàn toàn hiệu quả hơn "so với> không phải PLT C / C ++, Java, C #", xin lưu ý rằng nếu bạn xem các ngôn ngữ đó, cụ thể hơn, sự tiến hóa của chúng theo thời gian, hầu hết mọi thứ chúng đã đạt được thời gian, ví dụ lambdas, monads (LINQ), khớp mẫu, suy luận kiểu một phần đến từ PLT. Nhóm C # có Tiến sĩ PLT. Quả thực họ đã cố gắng thuê tôi tại một số điểm. Cuộc phỏng vấn xin việc là tôi đang cố gắng thuyết phục Anders Heijlsberg rằng C # cần thuốc generic, điều mà anh ấy không thích vào thời điểm đó ...
Martin Berger
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.