Λ-2D: Khám phá vẽ như một ngôn ngữ lập trình
(media.mit.edu)Dự án λ-2D: khám phá hình vẽ như một ngôn ngữ lập trình
-
Tổng quan: Dự án λ-2D là một nghiên cứu khám phá một ngôn ngữ mới cho phép lập trình thông qua hình vẽ. Dựa trên ý tưởng của lambda calculus, ngôn ngữ này được thiết kế để có thể viết mã bằng hình vẽ.
-
Ngôn ngữ lập trình phi ngôn ngữ: Đã tồn tại các ngôn ngữ lập trình phi ngôn ngữ như Befunge và asciidots dựa trên ASCII, hay Piet dựa trên hình ảnh. Lấy cảm hứng từ những ngôn ngữ này, nhóm đã phát triển một ngôn ngữ mới.
-
Mục tiêu:
- Tận dụng ưu điểm của việc viết chương trình bằng hình vẽ để đưa vào những khả năng mà ngôn ngữ dựa trên văn bản không thể có.
- Điều chỉnh số lượng lệnh để không quá ít cũng không quá nhiều, giúp tăng tính dễ sử dụng.
- Cho phép vẽ ra những chương trình hấp dẫn về mặt thị giác, để có thể thưởng thức như các tác phẩm nghệ thuật.
-
Lambda calculus: Lambda calculus chỉ có hai lệnh là áp dụng hàm và định nghĩa hàm. Các ký hiệu phù hợp cho từng lệnh đã được phát triển.
-
Luồng dữ liệu: Ngôn ngữ được thiết kế để dữ liệu có thể chảy qua các đường nối giữa các ký hiệu. Các ký hiệu bổ sung cũng được đưa vào để tăng tính tiện dụng.
-
Khung và thành phần GUI: Một vùng cụ thể trên canvas có thể được đặt làm khung để tận dụng dữ liệu. Các thành phần GUI như slider cũng được thêm vào để có thể điều khiển chương trình một cách động.
-
Phần mềm biên tập: Nhóm đã phát triển một trình biên tập cho phép người dùng vẽ chương trình theo dạng số. Với các ký hiệu 5x5 pixel, có thể dễ dàng đặt chúng lên canvas dạng lưới.
-
Giải quyết vấn đề đầu ra: Do đặc tính của ngôn ngữ hàm thuần túy, rất khó triển khai lệnh "xuất". Để giải quyết điều này, đầu ra được định nghĩa lại theo cách truyền canvas vào hàm và nhận về canvas đã được thay đổi.
-
Phát triển parser: Nhóm đã phát triển một parser chuyển chương trình λ-2D sang JavaScript. Kết quả tạo ra khá phức tạp nhưng hoạt động được.
-
Trải nghiệm lập trình: Trải nghiệm lập trình bằng ngôn ngữ mới này khá giống với Minecraft hoặc Factorio, nhưng vẫn có giá trị như một hướng nghiên cứu.
-
Trực quan hóa và âm thanh: Dự án cũng khám phá khả năng trực quan hóa quá trình thực thi chương trình, và khả năng nghe chương trình đang chạy như âm nhạc.
-
Kế hoạch tương lai: Nhóm dự định tiếp tục cải thiện λ-2D và thiết kế những ngôn ngữ lập trình mới có thể tích hợp vào các hệ thống tính toán thông qua hình vẽ.
-
Demo trực tuyến: Có thể trải nghiệm phiên bản beta của λ-2D trực tuyến, và mã nguồn của parser cùng trình biên tập sẽ sớm được công bố trên GitHub.
1 bình luận
Ý kiến trên Hacker News
Thảo luận về một khái niệm tương tự BitGrid nhưng khác biệt, hình dung các bit diễu hành song song như một sự đơn giản hóa tối hậu của FPGA. Ý tưởng này có thể có hoặc không có tính hữu dụng trong việc mang Petaflops đến cho đại chúng. Năng lượng mà DFF tiêu thụ trong ASIC là điều quan trọng.
Công việc của kỹ sư dự án tự động hóa có thể thú vị hoặc quen thuộc. Sơ đồ khối chức năng là nơi các khối chức năng được nối với nhau bằng dây, và thứ tự công việc được xác định theo thứ tự các khối. Các khối có thể là hàm dựng sẵn của bộ máy hoặc là tổ hợp.
Ngôn ngữ hiện tại là Turing-complete nhưng rất khó sử dụng, nên vi phạm quy tắc thiết kế #2. Đã dừng lại ở bước 1 với Lambda Diagrams.
Những việc như thế này đã được làm trong Labview, nhưng rất khó tiến xa. Trong phần mềm như Max cũng đã làm, nhưng nhanh chóng trở nên phức tạp.
Đã từng quan tâm đến một đặc tả hình thức dạng đồ họa cho Petri Nets. Từng nghĩ rằng nếu có biểu diễn đồ họa thì các kỹ sư sẽ dùng các phương pháp hình thức nhiều hơn, nhưng khi cho họ xem Petri Nets thì họ mất hứng.
Có ý kiến cho rằng lĩnh vực các ngôn ngữ lập trình phi ngôn từ vẫn chưa được khám phá.
Gợi nhớ đến "Wireworld" năm 1987, và đã từng thấy một bộ đếm 8-bit được triển khai trong Wireworld.
Xét về mặt mô hình lập trình thì tương tự Funciton.