Paul Graham công bố ngôn ngữ lập trình mới Bel

Ngôn ngữ Bel được viết bằng ngôn ngữ Bel.

Paul Graham công bố ngôn ngữ lập trình mới Bel
Năm 1960, John McCarthy mô tả Lisp, một loại ngôn ngữ lập trình mới. Tôi nói "loại mới" vì Lisp không chỉ là một ngôn ngữ mới mà còn là một cách mô tả ngôn ngữ mới.

Để định nghĩa Lisp, anh ấy bắt đầu với một tập hợp nhỏ các câu lệnh, một loại tiên đề, sau đó anh ấy dùng nó để viết một trình thông dịch cho chính ngôn ngữ đó.

Nó không nhằm mục đích mô tả ngôn ngữ lập trình theo nghĩa thông thường - ngôn ngữ dùng để ra lệnh cho máy tính phải làm gì. Trong công trình năm 1960 của mình, Lisp được hiểu là một mô hình tính toán chính thức giống như Máy Turing. McCarthy chưa hề nghĩ đến việc sử dụng nó trên máy tính cho đến khi Steve Russell, sinh viên tốt nghiệp của ông, gợi ý.

Lisp năm 1960 không có những đặc điểm chung của các ngôn ngữ lập trình. Ví dụ: không có số, lỗi hoặc I/O. Vì vậy những người sử dụng Lisp làm nền tảng cho các ngôn ngữ dùng để lập trình máy tính đã phải tự bổ sung thêm những tính năng này. Và họ đã làm điều này bằng cách từ bỏ cách tiếp cận tiên đề.

Do đó, sự phát triển của Lisp được tiến hành theo hai giai đoạn - và dường như khá độc lập -: giai đoạn chính thức, được giới thiệu trong một bài báo năm 1960 và giai đoạn triển khai, trong đó ngôn ngữ được điều chỉnh và mở rộng để chạy trên máy tính. Công việc chính, nếu đo bằng số lượng cơ hội được thực hiện, diễn ra ở giai đoạn thực hiện. Bản Lisp 1960 dịch sang Common Lisp chỉ có 53 dòng. Nó chỉ làm những gì cần thiết để diễn giải các biểu thức. Mọi thứ khác đã được thêm vào ở giai đoạn thực hiện.

Giả thuyết của tôi là, mặc dù có lịch sử khó khăn, Lisp được hưởng lợi từ thực tế là sự phát triển của nó diễn ra theo hai giai đoạn; rằng bài tập ban đầu là xác định một ngôn ngữ bằng cách viết trình thông dịch của nó vào đó đã mang lại cho Lisp những phẩm chất tốt nhất của nó. Và nếu vậy, tại sao không tiến xa hơn?

Bel là một nỗ lực nhằm trả lời câu hỏi: điều gì sẽ xảy ra nếu thay vì chuyển từ giai đoạn chính thức sang giai đoạn thực hiện ở giai đoạn đầu, quá trình chuyển đổi này được thực hiện càng muộn càng tốt? Nếu bạn tiếp tục sử dụng phương pháp tiên đề cho đến khi bạn có thứ gì đó gần giống với một ngôn ngữ lập trình hoàn chỉnh, bạn sẽ cần những tiên đề nào và ngôn ngữ thu được sẽ trông như thế nào?

Tôi muốn làm rõ Bel là gì và nó không phải là gì. Mặc dù có nhiều tính năng hơn Lisp 1960 của McCarthy, Bel vẫn là một sản phẩm đang trong giai đoạn hình thức. Giống như Lisp, được mô tả trong một bài báo năm 1960, nó không phải là ngôn ngữ bạn có thể sử dụng để lập trình. Chủ yếu là vì, giống như Lisp của McCarthy, nó không quan tâm đến hiệu quả. Khi tôi thêm thứ gì đó vào Bel, tôi mô tả ý nghĩa của việc bổ sung đó mà không cố gắng cung cấp cách triển khai hiệu quả.

Để làm gì? Tại sao lại mở rộng giai đoạn chính thức? Một câu trả lời là hãy xem cách tiếp cận tiên đề có thể đưa chúng ta đến đâu, bản thân nó đã là một bài tập thú vị. Nếu máy tính mạnh mẽ như chúng ta mong muốn thì ngôn ngữ sẽ như thế nào?

Nhưng tôi cũng tin rằng có thể viết một triển khai dựa trên Bel hiệu quả bằng cách thêm các hạn chế. Nếu bạn muốn một ngôn ngữ có sức mạnh biểu cảm, sự rõ ràng và hiệu quả, thì bạn nên bắt đầu với sức mạnh biểu cảm và sự rõ ràng, sau đó thêm các hạn chế, thay vì đi theo hướng ngược lại.

Vì vậy, nếu bạn muốn thử viết một triển khai dựa trên Bel, hãy tiếp tục. Tôi sẽ là một trong những người dùng đầu tiên.

Cuối cùng, tôi đã sao chép lại một số thứ từ các phương ngữ trước đó. Hoặc là nhà thiết kế của họ đã làm đúng hoặc bị ảnh hưởng bởi các phương ngữ đã sử dụng trước đó, tôi không thấy câu trả lời đúng - thời gian sẽ trả lời. Tôi cũng cố gắng không đi quá xa khỏi các quy ước của Lisp. Điều đó có nghĩa là nếu bạn nhận thấy có sự thay đổi so với các quy ước của Lisp thì có thể có lý do giải thích cho điều đó.

Tiếp tục mô tả ngôn ngữ ở đây.

Cảm ơn vì bản dịch: Denis Mitropolsky

PS

Nguồn: www.habr.com

Thêm một lời nhận xét