Folders: Ngôn ngữ lập trình nơi thư mục trống chính là mã nguồn
Folders là một ngôn ngữ lập trình phi văn bản, trong đó mã nguồn được thể hiện hoàn toàn qua cấu trúc lồng nhau và thứ tự của các thư mục. Ra đời năm 2015 bởi tác giả của Rivulet và Velato, ngôn ngữ này biến những thư mục trống tưởng như vô nghĩa thành chương trình, đồng thời mở ra ý tưởng lưu trữ dữ liệu vô hạn ngay trong tên thư mục.

Folders: Ngôn ngữ lập trình nơi thư mục trống chính là mã nguồn
Trong thế giới lập trình, chúng ta quen với những dòng mã văn bản, những ký tự xếp thành câu lệnh. Nhưng Folders — một ngôn ngữ esoteric (esolang) ra đời năm 2015 — lại đi theo hướng ngược lại hoàn toàn: mã nguồn không có một ký tự nào, chỉ là những thư mục trống lồng vào nhau theo một thứ tự nhất định. Ý tưởng táo bạo này biến chính sự trống rỗng thành ngôn ngữ, và biến ổ cứng thành không gian lưu trữ vô hạn theo đúng nghĩa đen.
Khi thư mục trống trở thành mã
Folders là một ngôn ngữ phi văn bản (non-textual). Toàn bộ chương trình được biểu diễn bằng cấu trúc lồng nhau và thứ tự của các thư mục — tên thư mục bị bỏ qua hoàn toàn, ngoại trừ việc dùng để sắp xếp theo bảng chữ cái. Nói cách khác, một chương trình Folders chính là một cây có thứ tự thuần túy.
Minh họa cấu trúc thư mục trong ngôn ngữ Folders
Ý tưởng này lấy cảm hứng từ ngôn ngữ Whitespace, vốn cũng nổi tiếng với triết lý "mã hóa phi vật chất". Tác giả của Folders — người từng tạo ra Rivulet và Velato — bắt đầu bằng câu hỏi: "Điều gì còn trống rỗng hơn cả một tập tin không có văn bản hiển thị?" Câu trả lời chính là thư mục trống: một thứ mà trong Git hoàn toàn bị bỏ qua. Vì lý do đó, tài liệu của Folders khuyến nghị các chương trình nên đặt tập tin .gitignore ở những tầng sâu nhất của cây thư mục để chúng không bị biến mất khi đẩy lên kho mã.
Không chiếm dung lượng, lưu trữ vô hạn
Trên Windows, thư mục trống còn là một dạng "rỗng" cực đoan hơn nữa: chúng không chiếm bất kỳ dung lượng đĩa nào. Tác giả đưa ra một thử nghiệm thú vị: hãy tạo 352.449 thư mục rồi xem thuộc tính của chúng — dung lượng vẫn là 0 byte.
Chính đặc điểm này mở ra ý tưởng gây tranh cãi: nếu mã và dữ liệu đều có thể mã hóa trong tên và cấu trúc thư mục, thì về lý thuyết bạn có dung lượng lưu trữ vô hạn. Bạn có thể nhồi toàn bộ dữ liệu vào tên thư mục và không bao giờ phải lo hết chỗ. Tất nhiên, tài liệu cũng kèm theo lời cảnh báo đúng chất esolang: "hãy thử với rủi ro của riêng bạn".
Folders cung cấp không chỉ một cách tiếp cận phi vật chất hóa đối với mã nguồn, mà còn cả khả năng lưu trữ vô hạn.
Cách mã hóa lệnh và biểu thức
Cú pháp của Folders tuy kỳ lạ nhưng lại rất logic. Mỗi thư mục lệnh có ít nhất một thư mục con. Số lượng thư mục con trong thư mục con đầu tiên (theo thứ tự bảng chữ cái) quyết định loại lệnh; các đối số được biểu diễn ở thư mục con thứ hai, và một số lệnh cần thêm thư mục con thứ ba.
Dưới đây là bảng tóm tắt các lệnh chính:
- if — 0 thư mục con: thư mục thứ hai chứa biểu thức điều kiện, thư mục thứ ba chứa danh sách lệnh
- while — 1 thư mục con: vòng lặp với điều kiện và thân lệnh tương tự
- declare — 2 thư mục con: khai báo biến với kiểu dữ liệu và tên biến
- let — 3 thư mục con: gán giá trị cho biến
- print — 4 thư mục con: in ra biểu thức
- input — 5 thư mục con: nhập dữ liệu vào biến
Các biểu thức cũng tuân theo quy tắc tương tự: 0 thư mục là biến, 1 là phép cộng, 2 là trừ, 3 là nhân, 4 là chia, 5 là giá trị hằng, 6 là so sánh bằng, 7 là lớn hơn, 8 là nhỏ hơn. Về kiểu dữ liệu, chỉ có ba loại: số thực (1 thư mục), chuỗi (2 thư mục) và ký tự (3 thư mục).
Trực quan hóa: từ cây thư mục đến bản đồ địa hình
Một chương trình Folders bản chất là một danh sách lồng nhau kết thúc bằng nil (nil-terminated nested list). Dạng đơn giản nhất của nó là cấu trúc thuần túy của sự chứa đựng và thứ tự — giống hệt một đoạn JSON toàn mảng.
Sơ đồ cây thư mục của một chương trình Folders
Điều thú vị là cùng một cấu trúc dữ liệu này có thể được trực quan hóa theo nhiều cách khác nhau, vì chương trình Folders là "nội dung dưới dạng cấu trúc" và có thể áp lên bất kỳ loại dữ liệu thô nào. Tác giả đã thử nghiệm biểu diễn một Truth Machine (máy chân lý) dưới dạng bản đồ đường đồng mức, trong đó các đường đậm hơn là vật chứa, và thứ tự thư mục được đọc từ góc trên bên trái theo chiều kim đồng hồ ngược.
Trực quan hóa chương trình Truth Machine dưới dạng bản đồ đường đồng mức
Những cách trực quan hóa khác có thể kể đến như cây phả hệ (với toàn bộ cha/mẹ đơn thân), cấu trúc phân nhánh thực vật (như bông lúa tách nhánh), hay các lối đi trong một mê cung. Một chương trình Echo đơn giản cũng có thể được biểu diễn tương tự, với các chấm đỏ đánh dấu ngưỡng chuyển từ một vật chứa sang một con đơn lẻ.
Hệ thống tập tin Folders và ý tưởng về "cõi phi vật chất"
Điểm đặc biệt của trình thông dịch Folders là nó không tạo tập tin tạm. Mọi thứ không được giữ trực tiếp trong bộ nhớ đều được lưu dưới dạng một tập hợp các thư mục tạm — và khác với mã Folders, ở đây chính tên thư mục mới là nơi lưu dữ liệu.
Hệ thống này được gọi là Folders FS. Đầu vào/đầu ra ưa thích của Folders cũng là một tập hợp thư mục khác, cho phép bạn mã hóa toàn bộ dữ liệu trong thư mục, bỏ qua hoàn toàn "cõi vật chất" của tập tin. Theo tác giả, đây là cách đạt được dung lượng đĩa vô hạn: Folders lang cho mã, Folders FS cho lưu trữ dữ liệu.
Tất nhiên, không phải ai cũng chạy Windows. Với người dùng hệ điều hành khác, một trình giả lập bằng JavaScript được cung cấp để mang lại phần nào trải nghiệm về cách Folders quản lý dữ liệu và mã nguồn. Bản triển khai gốc cùng trình biên dịch tham chiếu có thể tìm thấy trên GitHub tại kho rottytooth/Folders.
Vì sao một ngôn ngữ như vậy lại đáng quan tâm?
Với đa số lập trình viên Việt Nam đang làm việc với các ngôn ngữ phổ thông như JavaScript, Python hay Go, Folders thoạt nhìn chỉ là một trò đùa học thuật. Nhưng esolang nói chung, và Folders nói riêng, có giá trị riêng của chúng:
- Rèn luyện tư duy trừu tượng — khi phải suy nghĩ về chương trình dưới dạng cây thay vì dòng lệnh, bạn hiểu sâu hơn về bản chất của tính toán
- Thử thách các giả định — Folders đặt câu hỏi: điều gì thực sự tạo nên "mã nguồn"? Ký tự, hay cấu trúc?
- Khám phá giới hạn hệ thống — ý tưởng thư mục trống không chiếm dung lượng là một góc nhìn thú vị về cách hệ điều hành quản lý dữ liệu
Dù bạn có bao giờ viết một chương trình Folders hoàn chỉnh hay không, việc biết rằng tồn tại một ngôn ngữ mà ở đó sự trống rỗng được sắp xếp có thứ tự chính là mã nguồn cũng đủ khiến ta nhìn lại những điều tưởng chừng hiển nhiên trong lập trình.


