Nghiên cứu và thách thức mở trong Lý thuyết ngôn ngữ lập trình


32

Theo tinh thần của một số cuộc thảo luận chung như thế này , tôi mở chủ đề này với ý định thu thập ý kiến ​​về những thách thức mở và chủ đề nóng trong nghiên cứu về ngôn ngữ lập trình . Tôi hy vọng rằng cuộc thảo luận thậm chí có thể đưa ra ý kiến ​​bề mặt liên quan đến tương lai của nghiên cứu trong các ngôn ngữ lập trình.

Tôi tin rằng loại thảo luận này sẽ giúp các nhà nghiên cứu sinh viên mới, như bản thân tôi, quan tâm đến PL, cũng như những người đã tham gia.


7
wiki cộng đồng?
Suresh Venkat

2
Tôi nghĩ rằng nó thực sự sẽ cải thiện câu hỏi này và những người trả lời nó nếu bạn trích dẫn hoặc tóm tắt văn bản của câu hỏi "Frontiers of TCS". Phạm vi dự kiến ​​của câu trả lời cho câu hỏi này không rõ ràng trong khi câu hỏi còn lại chính xác hơn về những gì nó mong đợi.
Vijay D

khi tôi hỏi câu hỏi này trên stackoverflow một thời gian trước đây ... tôi đã nhận được thông báo và câu hỏi của tôi đã bị đóng!
Rorschach

Câu trả lời:


23

Tôi nghĩ mục tiêu chung của lý thuyết PL là giảm chi phí lập trình quy mô lớn bằng cách cải thiện ngôn ngữ lập trình và hệ sinh thái techincal trong đó ngôn ngữ được sử dụng.

Dưới đây là một số mô tả cấp cao, hơi mơ hồ về các lĩnh vực nghiên cứu PL đã nhận được sự chú ý liên tục và có thể sẽ tiếp tục làm như vậy trong một thời gian.

  • Hầu hết các nghiên cứu ngôn ngữ lập trình đã được thực hiện trong bối cảnh tính toán tuần tự, và đến bây giờ chúng tôi đã hội tụ được một cách rõ ràng về cốt lõi của các tính năng có sẵn trong hầu hết các ngôn ngữ lập trình hiện đại (ví dụ: hàm bậc cao, suy luận kiểu (một phần), khớp mẫu , ADT, đa hình tham số) và được hiểu rõ. Vẫn chưa có sự đồng thuận như vậy về các tính năng ngôn ngữ lập trình cho tính toán đồng thời và song song.

  • Liên quan đến điểm trước, lĩnh vực nghiên cứu của các hệ thống gõ đã thấy phần lớn hoạt động của nó là về tính toán tuần tự. Chúng ta có thể khái quát công việc này để tìm ra các nguyên tắc đánh máy hữu ích và có thể hạn chế tính toán đồng thời và song song không?

  • Như một trường hợp đặc biệt của điểm trước, sự tương ứng của Curry-Howard liên quan đến lý thuyết bằng chứng cấu trúc và lập trình chức năng, dẫn đến sự chuyển giao công nghệ bền vững giữa khoa học máy tính và (nền tảng) toán học, ví dụ như lý thuyết kiểu đồng luân là một ví dụ ấn tượng. Có nhiều gợi ý trêu ngươi rằng nó có thể được mở rộng thành (một số dạng) tính toán đồng thời và song song.

  • Đặc điểm kỹ thuật và xác minh các chương trình đã trưởng thành rất nhiều trong những năm gần đây, ví dụ như với các trợ lý chứng minh tương tác như Isabelle và Coq, nhưng công nghệ này vẫn còn xa mới có thể sử dụng được ở quy mô lớn trong lập trình hàng ngày. Vẫn còn nhiều việc phải làm để cải thiện tình trạng này.

  • Ngôn ngữ lập trình và công nghệ xác minh cho các hình thức tính toán mới. Tôi đang
    nghĩ ở đây đặc biệt là tính toán lượng tử và các cơ chế tính toán lấy cảm hứng từ sinh học, xem ví dụ ở đây .

  • Thống nhất. Có nhiều cách tiếp cận ngôn ngữ lập trình, loại, xác minh và đôi khi người ta cảm thấy rằng có rất nhiều sự chồng chéo giữa chúng và có một cách tiếp cận trừu tượng hơn đang chờ được khám phá. Đặc biệt, các cơ chế tính toán lấy cảm hứng từ sinh học có khả năng tiếp tục áp đảo chúng ta.

Một vấn đề của nghiên cứu PL là không có vấn đề mở rõ ràng như câu hỏi P / NP nơi chúng tôi có thể nói ngay nếu một giải pháp được đề xuất có hiệu quả hay không.


1
nếu tôi có thể thêm, điện toán lượng tử và ngôn ngữ lập trình lượng tử, ngay cả khi điện toán lượng tử không xảy ra, thì nghiên cứu về cách một số khái niệm lập trình có thể được chuyển giao trong mô hình tính toán này là thú vị nếu không có gì khác, lập trình bằng ngôn ngữ tự nhiên, lập trình mờ, và thậm chí tính toán vật lý và lập trình vật lý (lập trình trực tiếp trên vật chất, vượt quá mức phân tử)
Nikos M.

1
@NikosM. Tôi đồng ý, QC là một vấn đề lớn và được điều tra rất nhiều. Bài viết này cho thấy một mối liên hệ đáng ngạc nhiên giữa nền tảng của cơ học lượng tử và lý thuyết ngôn ngữ lập trình, được khai quật chỉ bằng cách trừu tượng hóa.
Martin Berger

Thật tuyệt, có lẽ một câu hỏi có thể giải quyết các loại quan hệ chính thức (hoặc không chính thức) này
Nikos M.

11

Hãy để tôi liệt kê một số giả định giới hạn nghiên cứu ngôn ngữ lập trình. Chúng khó có thể tách rời vì chúng cảm thấy như chúng là một phần thiết yếu của ngôn ngữ lập trình, hoặc bởi vì khám phá các lựa chọn thay thế sẽ là "không thiết kế ngôn ngữ lập trình nữa". Với mỗi giả định tôi liệt kê các tác dụng hạn chế của nó.

  1. Các chương trình là cấu trúc cú pháp.

    • Các lập trình viên thực sự sẽ không bao giờ sử dụng iPad để xây dựng mã nguồn. Và ngay cả khi họ đã làm, họ không bao giờ có thể hiệu quả như với Emacs, Eclipse, NetBeans, XCode, v.v.
    • Nghiên cứu về các cách khác nhau để xây dựng chương trình không phải là thiết kế ngôn ngữ lập trình, mà là thiết kế giao diện người dùng đồ họa hoặc giáo dục (xem Scratch).
  2. Một chương trình được viết một phần không thể được thực thi.

    • Ít nhất, lỗi thời gian chạy xảy ra khi thực thi đến một phần bị thiếu.
    • Điều gì tốt có thể có trong việc chạy các chương trình chưa hoàn thành?
  3. Các chương trình là về hướng dẫn cho máy tính.

    • Thiết kế ngôn ngữ lập trình không có gì để nói về cách viết và tổ chức luật. bất đồng.
    • Vi khuẩn không viết chương trình.
  4. Lập trình giống như tham gia và không thể được thực hiện bởi những người bình thường.

    • Người bình thường không biết cú pháp, khái niệm, công cụ, vì vậy họ không thể viết chương trình.
    • Ngay cả khi chúng ta cố gắng làm cho những người bình thường có thể viết chương trình, họ sẽ chỉ có thể viết những thứ tầm thường.

Tôi nghĩ rằng tôi có thể tiếp tục.


2
James: xuất sắc, tôi sẽ thông báo cho dì của tôi. Martin: đây chính xác là điều mà tôi đang nói đến - lập trình phi văn bản chưa được thiết lập một cách thuyết phục vì cộng đồng PL không coi trọng nó, bởi vì nó chưa được thiết lập một cách thuyết phục. Nhưng có vẻ khá rõ ràng đối với tôi rằng con người không được tạo ra để gõ từ trên màn hình. Chúng tôi rất giỏi trong việc ném đồ và hái quả việt quất.
Andrej Bauer

1
@AndrejBauer Như một lập luận khoa học, "Nó khá rõ ràng đối với tôi" không nằm ngoài sự cải thiện. Nếu bạn nhìn vào lịch sử của các hệ thống chữ viết, trong đó các ngôn ngữ lập trình là một ví dụ gần đây, quỹ đạo lịch sử của chúng đã tránh xa việc viết nhật ký. Có lẽ khả năng phân tích chuỗi của chúng tôi có liên quan nhiều hơn quả việt quất. Chữ viết đã phát triển qua hàng thiên niên kỷ, do đó không chắc là nó có chứa các lỗi lớn, dễ sửa chữa. Điều đó nói rằng, tôi rất vui khi tin rằng chúng ta có thể làm tốt hơn các chuỗi tuyến tính dựa trên ASCII. Tôi nghĩ rằng sẽ có một thời gian trước khi chúng ta làm.
Martin Berger

1
Quan điểm của câu trả lời của tôi là "nghĩ bên ngoài hộp". Để xem xét các giả định ẩn trong nghiên cứu PL và để xem làm thế nào họ giới hạn nghiên cứu PL tiềm năng đã có.
Andrej Bauer

4
@AndrejBauer, tôi nghĩ rằng việc giới hạn phạm vi đối với POPL là một sai lầm - rất nhiều công việc này được thực hiện tại OOPSLA, hoặc tại ICSE, hoặc thậm chí tại CHI. POPL không được quan tâm trừ khi có một cách tiếp cận chính thức mới lạ, nhưng POPL không phải là toàn bộ cộng đồng PL.
Sam Tobin-Hochstadt

2
@DominicMulligan: chắc chắn, đây đều là những ý tưởng rất đáng hoan nghênh. Với ý kiến ​​của tôi, tôi đang cố gắng thay đổi nhận thức về lập trình là gì. Vì vậy, nếu các ý tưởng lý thuyết có thể được sử dụng tốt trong thực tế (theo ý tôi là các lập trình viên "bình thường" sẽ sử dụng chúng trong cuộc sống hàng ngày), thì chúng ta đã chiến thắng.
Andrej Bauer

0

Có một vấn đề tôi đã tự hỏi về. Tôi không biết liệu nó có đủ điều kiện là một thách thức mở hay không.

Kiến thức toán học đã tăng trưởng đều đặn theo thời gian. Các nền tảng lý thuyết, khái niệm, ký hiệu và bằng chứng đã phát triển qua nhiều thế kỷ. Các nhà toán học đã quản lý tập hợp mà không nhất thiết phải kiểm tra tính nhất quán toàn cầu của nó một cách có hệ thống và chính thức tại bất kỳ thời điểm nào (mặc dù đã có những nỗ lực để làm điều đó).

Chúng ta nên mong đợi các ngôn ngữ lập trình và thư viện chương trình sẽ tổng hợp và phát triển tương tự theo thời gian. Loại công cụ nào có thể giúp quản lý tổng hợp kết quả lập trình và thư viện để giữ cho chúng phù hợp và có thể sử dụng hiệu quả bởi tất cả mọi người, vì máy tính có thể chính thức hơn và đòi hỏi về tính nhất quán. Chúng ta có phải làm lại các thư viện cho mỗi ngôn ngữ lập trình mới. Tại sao chúng ta phải chọn một ngôn ngữ vì nó có các thư viện phù hợp cho ứng dụng dự định thay vì chất lượng nội tại của nó như một phương tiện lập trình?

Ở một chủ đề khác, bạn có thể tìm thấy ý tưởng trong câu hỏi sau: Các ngôn ngữ lập trình có trở nên giống ngôn ngữ tự nhiên hơn không? Tôi nhận ra rằng ý tưởng này có thể không hấp dẫn nhiều nhà khoa học máy tính lý thuyết, nhưng nó vẫn có thể hữu ích bằng cách xem xét các vấn đề khác nhau hoặc từ một quan điểm khác. Tôi không đồng ý với nhiều ý tưởng đã được đăng, nhưng đó là những gì thảo luận dành cho.


Đồng thời là quá nóng.
Andrej Bauer

1
Tôi có thể thấy rằng không có nhiều thỏa thuận về điều này, tuy nhiên, khiêm tốn, đề nghị. Tuy nhiên, nó có thể hữu ích hơn, ít nhất là với tôi, để có một vài từ giải thích về lý do tại sao. Trong trường hợp tôi không rõ ràng, tôi không bao giờ có ý nói rằng toán học có thể không nhất quán, chỉ có điều nó không (nhất thiết) được tổng hợp với các phương tiện nhất quán (các nhà sử học sẽ nói tốt hơn). Từ quan điểm của CS, tôi có thể sai về khó khăn của việc tổng hợp (tôi chưa bao giờ thực hiện bất kỳ công việc kỹ thuật nào về vấn đề này), nhưng tôi chỉ liên quan đến trải nghiệm người dùng và quan điểm thường nghe, gián tiếp đối với các ngôn ngữ do TCS tạo ra.
babou

1
Vâng, nhận xét của tôi chủ yếu là về thực tế rằng tính nhất quán là một ý tưởng hoàn toàn hoặc không có gì, trong khi thực tế hầu hết các phần mềm là "chủ yếu nhất quán". Nhưng chúng tôi sử dụng nó và thấy nó hữu ích. Tại sao sau đó các nhà lý thuyết bị ám ảnh bởi những gì dường như là một khái niệm thực tế không thể đạt được và quá lý tưởng? Có vẻ tốt hơn để có thể định lượng tính nhất quán theo một cách ít tầm thường hơn.
Andrej Bauer

@AndrejBauer - Cảm ơn bạn đã trả lời. Tôi hơi ngạc nhiên bởi tuyên bố của bạn, như áp dụng cho những gì tôi đã viết. Không có gì ở đó hỗ trợ một số dạng nhất quán tuyệt đối, nhưng chỉ mong muốn một cách tiếp cận khả thi nào đó sẽ làm cho sự tổng hợp có thể và có ý nghĩa trong bối cảnh phát triển. Chủ yếu là nhất quán như bạn nói, có thể làm. Tìm kiếm những gì phù hợp có nghĩa là cho mục đích là một phần của ý tưởng, và tôi đã không đề xuất bất kỳ câu trả lời, tầm thường hay cách khác. Tôi chưa bao giờ là một nhà lý thuyết bị ám ảnh, và tôi không thấy từ câu trả lời của bạn, nơi chúng ta có thể bất hòa.
babou

1
Tôi nghĩ rằng tôi chỉ đang ca ngợi về "những nhà lý thuyết thuần túy", thế thôi. Hãy bỏ qua cho tôi.
Andrej Bauer

0

đã có một sự đổi mới và bùng nổ mạnh mẽ trong các ngôn ngữ lập trình từ các khía cạnh ứng dụng và lý thuyết trong thế kỷ trước, nhưng một trường hợp có thể được đưa ra rằng đây là một sự kiện đơn lẻ / một lần trong lịch sử điện toán, tương tự như một "vụ nổ tiến hóa" (xem thêm "tại sao có quá nhiều ngôn ngữ lập trình?" trên cs.se) và do đó, tương lai sẽ không giống như quá khứ về mặt này. tuy nhiên, có một số xu hướng hiện tại dài hạn có thể xác định trong phát / chơi đang phát triển.

  • Lập trình / độ phức tạp phần mềm và cách quản lý / giảm thiểu / giảm thiểu / giảm thiểu nó là một chủ đề luôn ảnh hưởng đến thiết kế ngôn ngữ và thậm chí còn có ý nghĩa hơn trong thời đại hiện nay với các hệ thống phần mềm rất lớn / phức tạp khá phổ biến. đó là một khía cạnh chính của lý do thiết kế OOP nhưng bây giờ chúng ta có các hệ thống OOP rất phức tạp! suy ngẫm tập trung vào nó đã dẫn đến những tác phẩm kinh điển trong lĩnh vực như Tháng huyền thoại của Brooks, theo nhiều cách vẫn là một quan điểm rất hợp lệ, thậm chí có thể phù hợp hơn so với khi nó được viết.

  • song song. có sự thay đổi trong phần cứng theo hướng song song lớn hơn (ví dụ như đa lõi, v.v.) và việc tăng tốc độ xung nhịp không còn đủ để tăng hiệu suất. sự thay đổi này xảy ra vào khoảng giữa những năm 2000 và có ảnh hưởng lớn đến nghiên cứu / thiết kế ngôn ngữ. song song luôn là một chủ đề nhưng nó có một sự nổi bật / cấp bách mới nhất, và có một số suy nghĩ / sự đồng thuận rộng rãi rằng song song quá phức tạp và khó khăn trong lập trình và có thể các cách tiếp cận lý thuyết khác nhau có thể làm giảm bớt một số điều này. một giới thiệu tuyệt vời về điều này: Phong cảnh nghiên cứu tính toán song song: Một góc nhìn từ Berkeley

  • datamining / dữ liệu lớn . đây là những ảnh hưởng đến thiết kế ngôn ngữ lập trình. Ngoài ra các hướng mới trong kiến ​​trúc cơ sở dữ liệu là các ngôn ngữ lập trình gợn / tác động.

  • siêu máy tính có tác động đáng kể đến thiết kế ngôn ngữ và cũng trùng lặp với tính song song và dữ liệu / dữ liệu lớn, ví dụ như với các ngôn ngữ mới như MapReduce .

  • lập trình trực quan / dataflow . đã có sự gia tăng các loại "ngôn ngữ" này (theo một nghĩa nào đó, lập trình trực quan theo nhiều cách thực sự tách rời lập trình khỏi "ngôn ngữ"). cũng thụ phấn chéo mạnh với song song.

  • AI . đây là nhiều hơn một ký tự đại diện dài và hiện tại nó không rõ ràng về cách nó sẽ tác động đến ngôn ngữ máy tính và lập trình nhưng có lẽ nó sẽ rất đáng kể. trong quá khứ [ở một dạng khác] nó đã dẫn đến toàn bộ các ngôn ngữ như prolog . một dấu hiệu sớm về cách nó có thể được áp dụng với kết quả nổi bật là Thuật toán di truyền / Lập trình di truyền .

một tài liệu tham khảo có thể có một số ý tưởng hữu ích dọc theo dòng "tương lai của ngôn ngữ lập trình", Beyond Java của Tate. Ông suy nghĩ (mặc dù còn nhiều tranh cãi) rằng có lẽ Java (được cho là một trong những ngôn ngữ lập trình tinh vi / toàn diện nhất đang tồn tại) đang bắt đầu cho thấy tuổi của nó và có những dấu hiệu ban đầu của các ngôn ngữ / phương pháp tiếp cận mới xuất hiện trong thời gian dài.

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.