Đối với những người bên ngoài thế giới lập trình, ngôn ngữ lập trình hầu như chỉ đơn thuần là ngôn ngữ lập trình - một đống các biểu tượng toán học xen lẫn các từ tiếng Anh khó hiểu. Bất kì cấu trúc hay tổ chức nào của đoạn code hầu hết đều nằm trong ý nghĩa của những biểu tượng và từ ngữ này của một ngôn ngữ lập trình hay loại ngôn ngữ lập trình nhất định. Những người ngoài ngành trông chúng không khác gì một mớ hỗn độn, dù là JavaScript, Java hay Brainfuck.
- Cuối cùng các trường đại học lớn đã nhận ra Java là một ngôn ngữ tệ hại nếu dùng để dạy nhập môn lập trình
- JavaScript là gì? Internet có thể tồn tại mà không có JavaScript hay không?
- 16 ngôn ngữ lập trình sẽ thay đổi thời vận của bạn trong năm 2017
Nếu ngôn ngữ lập trình đặc biệt (esolang - Esoteric programming language) Asciidots trông giống một mớ hỗn độn thì ít nhất nó cũng mang một dáng vẻ khác, hay ít nhất là kiểu hỗn độn có thẩm mỹ và khiến người ta thoải mái. Đơn giản là cơ chế và cú pháp của nó được xây dựng trên nghệ thuật Ascii. Trước khi tìm hiểu kĩ hơn, hãy xem qua ví dụ về Asciidots.
Một ví dụ về ngôn ngữ lập trình Asciidots
Chương trình nói trên trông khá đơn giản. Nó xếp một biến và tăng 1 lần mỗi khi thực thi đoạn mã. Nếu bắt đầu với biến x giá trị 0 và chạy chương trình 3 lần, chúng ta sẽ có x tương đương với 3.
Cách nó làm điều này vẫn chưa thực rõ ràng. Asciidots là kiểu ngôn ngữ lập trình độc đáo được biết đến là ngôn ngữ dòng dữ liệu (dataflow language). Trong ngôn ngữ này, chúng ta có thể tưởng tượng các đơn vị dữ liệu (như biến x nói trên) đi trên một chiếc xe dữ liệu dừng lại ở những vị trí khác nhau. Những điểm dừng này thay đổi giá trị của dữ liệu. Một điểm dừng có thể cộng thêm 1 vào biến trong khi điểm dừng khác có thể chia đôi giá trị. Ở một số điểm, con đường còn có thể chia ra và chiếc xe dữ liệu sẽ chọn 1 nhánh để đi tiếp, phụ thuộc vào giá trị hiện tại của nó. Ví dụ như nếu lớn hơn 2 thì rẽ trái còn nếu không thì sẽ rẽ phải.
Những ví dụ khác của ngôn ngữ dòng dữ liệu là LabVIEW, Pure Data, Max/MSP, Verilog và Simulik. Chúng thường được dùng trong các hệ thống phần cứng điện tử mô phỏng. Pure Data và Max/MSP thường được dùng để làm nhạc và trình diễn.
Với Asciidots, con đường của chiếc xe nói trên được mô tả bằng các đường thẳng (|, -, /, \). Chương trình dưới đây hướng một đơn vị dữ liệu đi từ vị trí xuất phát tới cuối cùng mà không thực sự làm gì.
Điểm đầu và điểm cuối của chương trình
Hầu hết các biểu tượng không phải đường thẳng là về toán học nhưng cũng có những biểu tượng hướng chương trình yêu cầu dữ liệu đầu vào từ người dùng, thiết lập giá trị, xuất giá trị, thay đổi hướng đi của đơn vị dữ liệu. Đơn vị này được biểu hiện bằng một dấu chấm. Các chấm trong chương trình đại diện cho điểm đầu vào của các đơn vị dữ liệu mới.
Chiếc xe dữ liệu với 2 ngã rẽ
Ở đây chúng ta thấy hai dấu chấm tham gia vào con đường. Mỗi dấu có một giá trị sử dụng dấu thăng, theo sau là giá trị. Hai đơn vị dữ liệu sau đó gặp nhau ở dấu trừ rồi ra kết quả. Sau đó chúng đi theo biểu tượng đô-la ở phía trên, nghĩa là xuất giá trị mà nó nhận được.
Dưới đây là toàn bộ code trong Asciidots. Hãy nhớ rằng biểu tượng đô la là xuất bất kì giá trị nào nó nhận được, trong trường hợp này là hướng dẫn cho người dùng.
Toàn bộ chương trình Asciidots
Về bản chất thì Asciidots là một chương trình Python. Nó chỉ đưa vào chương trình code Python bình thường rồi thực thi. Có nhiều ngôn ngữ như vậy, bao gồm cả Python, có thể dịch sang C.
Esolang thường có lợi ích khi nó buộc nhà lập trình nhìn lại công việc của mình từ một góc nhìn mới. Asciidots ít nhất cũng đã làm được điều này, và tất nhiên là trông nó cũng rất ngầu.