Ngôn ngữ bị ràng buộc của Fernando J. Corbató


13

Trong bài phát biểu giải thưởng Turing năm 1990 , Fernando J. Corbató đã liệt kê những lý do tại sao các hệ thống phức tạp chắc chắn sẽ thất bại. Trong kết luận của mình, ông đưa ra một số gợi ý để giảm xác suất thất bại. Ông liệt kê một ý tưởng như sau:

[U] se các ngôn ngữ bị hạn chế cho thiết kế hoặc tổng hợp là một phương pháp mạnh mẽ. Bằng cách không cho phép một lập trình viên hoặc nhà thiết kế thể hiện những ý tưởng không liên quan, miền lỗi có thể trở nên hạn chế hơn rất nhiều.

Anh ta có ý gì bởi "ngôn ngữ bị gò bó?"

Trong một khoảnh khắc tôi đã xem xét lập trình ràng buộc . Tuy nhiên, lập trình ràng buộc là về việc giới hạn không gian giải pháp của chương trình. Nó là một công cụ trao quyền cho một lập trình viên. Tính năng mà Corbató đang đề cập đến dường như là thứ gì đó thực sự hạn chế lập trình viên, hoặc ít nhất khiến cô ấy có xu hướng viết mã terser hơn.

Suy nghĩ thứ hai của tôi là anh ấy đang đề cập đến các ngôn ngữ lập trình bảo thủ . Corbató đã nhận được giải thưởng Turing cho công việc được thực hiện trong những năm 1960 và 1970. Theo hiểu biết của tôi, anh ấy đã xử lý rất nhiều thẻ đục lỗ. Tôi chưa bao giờ nhìn thấy một thẻ đục lỗ, vì vậy tôi chắc chắn không biết cách lập trình một thẻ, nhưng tôi có thể đoán rằng lập trình thẻ đục lỗ là vô cùng tự do. Tôi nghi ngờ các khái niệm về kiểm tra loại, phân tích tĩnh, v.v ... đơn giản là không tồn tại. Vì vậy, có lẽ Corbató đề cập đến ý tưởng về các ngôn ngữ hạn chế nhà phát triển phạm sai lầm ngớ ngẩn? Điều này dường như cũng không phải là trường hợp. Kiểm tra an toàn và mô hình dữ liệu không liên quan gì đến sự căng thẳng, đó là điều mà dường như ông đang nói đến khi đề cập đến việc "không cho phép ... những ý tưởng không liên quan".


@jweyrich Cảm ơn bạn đã chuyển tiếp tôi đến Lập trình viên. Tuy nhiên, khi tôi đi đến thẻ ngôn ngữ lập trình trên StackOverflow, tôi thấy rất nhiều câu hỏi cũng chung chung như của tôi, chẳng hạn như "Có ngôn ngữ gõ yếu nào không?" trong đó tác giả cũng tham khảo các tài liệu đọc chung
Xander Dunn

5
@ Dùtadvances Kiểm tra ngày trên các câu hỏi bạn đề cập, tôi sẵn sàng đặt cược hầu hết chúng đều khá cũ. SO 4 tuổi, mọi thứ thay đổi, và nói chung chúng ta ngày càng khắt khe hơn khi thời gian trôi qua. Câu hỏi của bạn là tốt đối với các lập trình viên (Tôi là một mod ở đó), nhưng sẽ dễ dàng hơn nếu bạn chỉ gắn cờ này để kiểm duyệt và yêu cầu nó được di chuyển thay vì đăng lại. Di chuyển sẽ giúp bạn tiết kiệm được những rắc rối khi đăng lại nó sẽ mang lại câu trả lời cho các lập trình viên cùng với câu hỏi. Đừng lo lắng về nó bây giờ, tôi sẽ chăm sóc nó.
yannis

3
Ví dụ, nếu (lưu ý: if ) ý tưởng về malloc là "không liên quan" cho ứng dụng cụ thể vì một số lý do, thì việc chọn Java ("bị ràng buộc bởi không có malloc) trên C (malloc is there) sẽ hạn chế" miền có thể có lỗi "có thể được liên kết với malloc
gnat

@YannisRizos Cảm ơn bạn rất nhiều vì đã di chuyển nó. Tôi không biết rằng chức năng này tồn tại. Có lẽ những người dùng có kinh nghiệm hơn trên StackOverflow có thể đã đề xuất đường dẫn này thay vì chỉ đóng nó.
Xander Dunn

3
"Viết mã trên thẻ đục lỗ " chỉ là một cách khác để gõ chương trình. Vào cuối những năm 1960 và đầu những năm 1970, chúng ta có những ngôn ngữ cũng tinh vi như những ngôn ngữ chúng ta có ngày nay. Nhiều khái niệm cốt lõi của ngôn ngữ lập trình đã được thiết lập tốt và ALGOL 60 đã thiết lập tiêu chuẩn cho các công cụ lập trình vào năm 1963.
Ross Patterson

Câu trả lời:


8

"Ngôn ngữ lập trình ràng buộc" chỉ đơn giản là một cách không cung cấp (dễ dàng) để làm những việc không liên quan đến mục đích ngôn ngữ.

Lưu ý rằng "không liên quan", không "ngu ngốc", "ngu ngốc" hoặc "không chính xác".

Một ví dụ công bằng về điều này có thể là ISO / ANSI SQL (trước SQL-92), không có cách nào trong ngôn ngữ truy vấn để diễn tả nhiều tạo phẩm lập trình kiểu thủ tục như đệ quy hoặc vòng lặp. (Mặc dù, hiện tại đã có chúng và các nhà cung cấp đã thêm tiện ích mở rộng tùy chỉnh cho chúng trước đây).


6
Đây chính xác là quan điểm của Corbató. Ông đã đi sâu vào rất nhiều chi tiết trong một bài báo Datamation 1969 có tên PL / I As a Tool for System Lập trình (với phụ đề tuyệt vời " năm năm với một trình biên dịch tạm thời "!).
Ross Patterson

Cảm ơn bạn, câu trả lời này rất hữu ích. Ý tưởng này có ý nghĩa thú vị. Điều này dường như chỉ ra rằng một lập trình viên muốn có quyền truy cập vào rất nhiều ngôn ngữ khác nhau với các khả năng khác nhau thay vì có một ngôn ngữ để thống trị tất cả, đó là điều mà nhiều lập trình viên muốn giả sử là C, C ++ hoặc Java.
Xander Dunn

@RossPatterson Tuyệt vời! Cảm ơn bạn! Tôi đang tìm kiếm một chi tiết về chủ đề từ Corbató, nhưng tôi không tìm thấy nhiều.
Xander Dunn

1
Một trích dẫn tóm tắt tuyệt vời từ bài báo Datamation đó: " Đối tượng của chúng tôi khi thực hiện hệ thống ... đã khám phá biên giới và xem làm thế nào để kết hợp hiệu quả một hệ thống đạt và thỏa mãn các mục tiêu đã đề ra. Chúng tôi đang cố gắng tìm đưa ra các ý tưởng thiết kế chính và truyền đạt những ý tưởng này cho người khác, bất kể họ quen thuộc với hệ thống nào. Do đó, một ngôn ngữ vượt trên các chi tiết cụ thể của phần cứng chắc chắn là đáng mong muốn, ... Nói cách khác, nó buộc người ta phải thiết kế, không nghịch ngợm với mã. Và điều này hóa ra là một trong những điểm mạnh của nó . "
Ross Patterson

2
@ Dùtadvances " Điều này dường như chỉ ra rằng một lập trình viên muốn có quyền truy cập vào rất nhiều ngôn ngữ khác nhau với các khả năng khác nhau thay vì có một ngôn ngữ để thống trị tất cả " - đó là một trong những khác biệt giữa một lập trình viên cấp cao và cấp cao. Không có thợ mộc chỉ có một cái búa :-)
Ross Patterson


0

Đầu tiên, bạn cần hiểu về thời đại của điện toán khi bài phát biểu của anh ấy được đưa ra (1990). Ngoài ra, nhận ra anh ấy đang nói chuyện với khán giả hàn lâm và MIT là cơ sở của anh ấy.

Trong thời đại đó, ngôn ngữ để viết ngôn ngữ (ngôn ngữ meta) là một chủ đề nóng. Giao thức Art of the Meta-Object vừa ra mắt và đang truyền cảm hứng cho việc thiết kế các ngôn ngữ mới. Tuy nhiên, tất cả sự xa xỉ này đều có giá: sự phức tạp.

Để giúp giảm độ phức tạp của các hệ thống và cho phép kiểm tra các hệ thống này, các ngôn ngữ meta như Z đã xuất hiện để tạo ra một đặc tả có thể kiểm tra được. Theo suy đoán của tôi, anh ấy đề cập đến các loại ngôn ngữ.


2
Corbató không chỉ là một học giả MIT cuối năm hai mươi. Anh ấy là một trong những người tiên phong trong lĩnh vực của chúng tôi. Công việc của ông về CTSS là rất quan trọng, trực tiếp dẫn đến các hệ thống Multics, Unix, CP / 67 và Linux và z / VM ngày nay. Và tuyên bố trong câu hỏi có liên quan đến một nguyên tắc mà ông đã công khai khai thác 20 năm trước The Art of the Meta-Object Protocol và bài giảng Turing của ông.
Ross Patterson

0

Có thể anh ta có nghĩa là một ngôn ngữ có số lượng khái niệm khá thấp để nắm bắt. Kiểm tra các sơ đồ ở đây cho thấy các biểu diễn đồ họa của các khái niệm trong Coffescript, Ruby và C ++. Có thể là Tuner có nghĩa là bạn càng có ít khái niệm trong một ngôn ngữ, thì càng ít cơ hội thể hiện những ý tưởng không liên quan.


"... Hoặc một ngôn ngữ" - đây có phải là một nhận xét về một cái gì đó?
gnat

Chỉnh sửa bài đăng, để không trông giống như một bình luận.
Manoj R
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.