Website đang trong giai đoạn hoàn thiện và chạy thử nghiệm, rất mong nhận được sự đóng góp ý kiến của mọi người để website hoàn thiện tốt hơn! Đóng góp

Ngôn ngữ lập trình kì bí - phần 1

Giới thiệu những ngôn ngữ lập trình mới lạ và thú vị

Chúng ta đã quá quen thuộc với hàng loạt ngôn ngữ lập trình phổ dụng như C/C++, Python, Java,... bởi tính tiện dụng của chúng. Bên cạnh những cái tên quen thuộc này, thì trong giới IT, cũng có những chiếc ngôn ngữ lập trình khác rất nổi tiếng, nhưng là vì chúng quá khó hiểu.

Esolang (esoteric programming language) là thuật ngữ dùng để chỉ các ngôn ngữ lập trình khiến các lập trình viên rất mất công sức và thời gian để đọc hiểu và viết những câu lệnh. Chúng được tạo nên vô tình hoặc cố ý để trở nên quá sức khó hiểu, và cũng thường vô tình trở thành trò đùa hay thú vui tao nhã của các lập trình viên muốn “luyện não”, nhưng lại ít được sử dụng với chức năng chính của 1 ngôn ngữ lập trình. Và sau đây, Sata STEM sẽ điểm qua những cái tên nổi bật nhất trong làng Esolang.

Ngôn ngữ lập trình kì bí - Phần 1
Ngôn ngữ lập trình kì bí - Phần 1

Chef

Chef
Chef

Nếu bạn là người có tâm hồn ăn uống, nhưng cũng đam mê IT, có phải bạn đang học tổ hợp khoa học tự nhiên gặp được Chef? Nếu để ý lập trình và nấu ăn giống nhau ở chỗ đều nhận vào nguyên liệu và cho ra thành phẩm, có vẻ như David Morgan-Mar đã nhận thấy điểm này và tạo ra ngôn ngữ Chef để khiến việc lập trình giống với viết công thức làm món ăn.

“Program recipes should not only generate valid output, but be easy to prepare and delicious.” là một tiêu chí quan trọng khi viết các “công thức” bởi ngôn ngữ Chef. Hiểu cơ bản là dữ liệu đầu vào (input) phải đơn giản nhất có thể mà vẫn cho dữ liệu đầu ra (output) như mong muốn.

Hai đoạn code đầu tiên là tên và nhận xét chung về món ăn. Chúng không phải là các câu lệnh. Trong phần Ingredients, ta thông báo các nguyên liệu sử dụng, thực chất là các biến xuất hiện trong chương trình. Trong Chef, các nguyên liệu có thể ở thể rắn (đơn vị đo là kg, g, pinches) hoặc lỏng (đơn vị ml, l, dashes), hoặc cả 2, nhưng đều phải có giá trị số. Các nguyên liệu rắn khi in ra màn hình sẽ là các số thường, còn nguyên liệu lỏng sẽ in ra các kí tự tương ứng với bảng mã ASCII. Dòng code Cooking time cho ta biết thời gian nấu ăn, tất nhiên cũng không có ý nghĩa gì về mặt lập trình. Phần code chính bắt đầu trong phần Method.

Nhìn chung, Chef cơ bản là một ngôn ngữ được tạo ra để viết cho vui, thế thôi. Còn trong thực tế lập trình, ngôn ngữ này có nhiều dòng lệnh thừa và khá dài dòng (hoặc là chương trình của bạn trông sẽ vẫn rất Chef nhưng không thực sự ổn áp với tinh thần là công thức nấu ăn) để các lập trình viên có thể sử dụng thường xuyên.

Brainfsck

Brainfsck
Brainfsck

Brainfsck được phát triển bởi một sinh viên Vật Lí người Thụy Sĩ, Urban Miller năm 1993, với mục đích tạo ra một ngôn ngữ có trình phiên dịch (compiler) nhẹ nhất. Quả nhiên compiler C của ngôn ngữ này chỉ vỏn vẹn chưa đến 200 byte.

Trong mỗi chương trình, ngôn ngữ Brainfsck tự động cấp phát một mảng kí tự (char) gồm 3000 phần tử và một con trỏ dữ liệu đang ở phần tử đầu tiên. Ta chỉ sử dụng 8 kí tự sau để viết lệnh, các kí tự khác đều được coi là một comment.

  • Kí tự “<” và “>” dùng để di chuyển vị trí con trỏ sang vị trí liền trước hoặc liền sau.
  • Kí tự “+” và “-” dùng để tăng hoặc giảm 1 đơn vị của giá trị phần tử đang được trỏ.
  • Kí tự “.” dùng để xuất kí tự được lưu tại vị trí mà con trỏ đang trỏ (lưu ý kí tự in phụ thuộc vào bảng mã ASCII).
  • Kí tự “,” để lưu input tại vị trí mà con trỏ đang trỏ.
  • Cụm kí tự “[]” dùng để tạo một vòng lặp. Vòng lặp này trong C/C++ tương đương với while (giá trị trong phần tử đang trỏ!=0)

Thêm vào đó, Brainfsck, giống như bao ngôn ngữ hiện đại khác, cũng có tính Turing-Complete, tức là có thể cung cấp đủ thời gian và bộ nhớ, cùng với các hướng dẫn cần thiết để có thể giải quyết vấn đề tính toán nào, cho dù nó có phức tạp đến đâu.

Nghe đến đây thì có vẻ mọi thứ vẫn đang rất “không có vấn đề gì” cho đến khi bạn phát hiện ra vấn đề của Brainfsck chính là sự tối ưu hóa cực đại của nó, do đó khiến cho ngôn ngữ này không có cú pháp chuẩn, và là lí do “gây lú” cho hầu hết mọi người khi đọc hiểu ngôn ngữ này, kể cả những lập trình viên lão làng.

Để dễ hình dung, hãy đến với 1 ví dụ về chương trình in ra màn hình chữ “Hello World”. Bạn sẽ cần phải viết một chương trình gồm 1 dãy kí tự kiểu như này [> > > > <<<<-> .> . .. .> .<< .>. .——.——–.> .>

Cách viết "Hello World" bằng Brainfsck
Cách viết "Hello World" bằng Brainfsck

Rõ ràng các chương trình kiểu này nhìn vào rất khó để đọc hiểu nhanh và thường dài dòng “khủng khiếp” đối với các chương trình có độ phức tạp cao hơn.

Post a Comment

Copyright © SATA JSC. All rights reserved. Developed by Code Pro