Tập 19: DUY không chỉ là compiler

Compiler là trái tim của DUY, nhưng không một kỹ sư phần mềm nào thức dậy vào sáng thứ Hai với nhu cầu tự nhiên: “Hôm nay tôi muốn sử dụng một compiler mới cho vui”. Người ta thức dậy với nhu cầu viết một dịch vụ mạng (web service), lập trình một firmware cho thiết bị nhúng, viết một công cụ dòng lệnh (CLI tool), phát triển một game engine, hay xây dựng một hệ thống xử lý dữ liệu quy mô lớn. Compiler chỉ thực sự có giá trị khi nó trở thành công cụ đáng tin cậy giúp họ hoàn thành xuất sắc những mục tiêu thực tế đó.

Ngay từ những ngày đầu tiên phác thảo thiết kế, tầm nhìn của DUY đã nhanh chóng bị kéo giãn ra nhiều hướng đi đầy tham vọng: web framework, embedded systems, freestanding runtime, OS lab, package registry, và các công cụ phát triển tích hợp sâu với AI. Sự rộng lớn của tầm nhìn ấy vừa là nguồn động lực sáng tạo to lớn, vừa là một cái bẫy tử thần cực kỳ nguy hiểm. Mười lộ trình công nghệ (roadmaps) hoành tráng không tự động tạo ra một nền tảng vững chắc. Đôi khi chúng chỉ là mười lý do đẹp đẽ để ta trì hoãn việc hoàn thành một compiler cốt lõi hoạt động đúng đắn.

Tôi bắt buộc phải học cách phân định rạch ròi giữa tầm nhìn dài hạn và thứ tự ưu tiên xây dựng trong thực tế kỹ thuật.

Mảng lập trình web đòi hỏi hệ thống phải hỗ trợ tốt các tác vụ mạng (networking), lập trình bất đồng bộ (async), định dạng dữ liệu (serialization), kết nối cơ sở dữ liệu (database drivers) và công cụ giám sát hiệu năng (observability). Mảng lập trình nhúng (embedded) ép buộc trình biên dịch phải hỗ trợ tốt biên dịch chéo (cross-compilation), tương thích chuẩn ABI phần cứng, quản lý ngắt (interrupts) và cấu hình không dùng heap (no-heap profile). Phòng thí nghiệm hệ điều hành (OS lab) đòi hỏi compiler phải sinh được mã nguồn bootloader, quản lý phân trang bộ nhớ (paging), ranh giới cuộc gọi hệ thống (syscall) và một bộ runtime freestanding tối giản hoạt động ổn định. Công cụ tích hợp AI đòi hỏi compiler phải cung cấp các API truy cập cây AST, type context và diagnostics dưới dạng dữ liệu có cấu trúc để các AI agent có thể truy vấn trực tiếp thay vì phải đứng phỏng đoán mã nguồn dạng text thô.

Mỗi miền đất công nghệ ấy không thể được xây dựng bằng việc đi "sao chép nhanh" (clone) mã nguồn từ các dự án mở của nhân loại. Mã nguồn mở cho phép chúng ta tự do đọc và học hỏi kiến trúc; nó hoàn toàn không miễn phí cho chúng ta các ngữ nghĩa cốt lõi, tính portable trên nhiều phần cứng, hệ thống kiểm thử toàn diện, nghĩa vụ bảo trì lâu dài và hàng vạn quyết định thiết kế tinh tế đã tích lũy qua nhiều năm. Viết lại một giao diện API thì rất nhanh; nhưng xây dựng lại niềm tin kỹ thuật của người dùng thì chậm hơn rất nhiều.

Vì vậy, hệ sinh thái của DUY phải lớn lên một cách tuần tự theo đồ thị dependency (sự phụ thuộc chéo): Core ngôn ngữ phải hoàn thiện trước khi viết web framework. Module và package manager phải chạy tốt trước khi mở package registry. Tương thích chuẩn C ABI phải đáng tin cậy trước khi mơ tưởng đến việc thay thế các thư viện C lâu năm. Một HTTP server nhỏ gọn, đo đạc được hiệu năng và có test đầy đủ luôn có giá trị hơn một web framework hoành tráng đầy rẫy các decorator bóng bẩy nhưng sập ngay lập tức ở request thứ một nghìn. Một bo mạch nhúng chạy lặp lại đáng tin cậy luôn tốt hơn một bảng danh sách hỗ trợ phần cứng dày đặc logo các hãng công nghệ lớn.

OS lab của DUY mang một vai trò đặc biệt quan trọng. Nó sinh ra không phải để cạnh tranh thị phần với Linux hay Windows. Nó là phòng thử nghiệm áp suất khắc nghiệt nhất để kiểm chứng các lời hứa lập trình hệ thống của DUY: tệp nhị phân có thật sự chạy được freestanding không cần hệ điều hành host hỗ trợ hay không, layout bộ nhớ của struct có chính xác đến từng byte vật lý như khai báo hay không, panic handler ứng xử thế nào khi phần cứng gặp sự cố, bộ nhớ được cấp phát ở đâu khi không có heap của hệ điều hành. Nếu DUY chỉ chạy tốt khi có đầy đủ môi trường Node.js, thư viện libc và một hệ điều hành Linux giàu tiện nghi hỗ trợ phía sau, danh xưng "systems language" của chúng tôi sẽ còn hơi rộng quá so với bằng chứng thực tế.

Hệ sinh thái cũng bắt buộc phải bắt đầu từ những thứ bình dị và ít hào nhoáng nhất: trình cài đặt hoạt động ổn định trên mọi hệ điều hành, lệnh duy new tạo dự án chuẩn xác, công cụ build và test tự động mượt mà, bộ định dạng code (formatter), giao thức LSP cho trình soạn thảo code, tài liệu hướng dẫn và các thông báo lỗi rõ ràng. Lập trình viên không thể yêu quý một ngôn ngữ lập trình mà họ thậm chí không cách nào cài đặt thành công lên máy của mình. Họ càng không thể tham gia đóng góp cho hệ sinh thái nếu mỗi lần chạy thử test lại phải hỏi tác giả về một nghi lễ cấu hình bí mật nào đó.

DUY không chỉ là một compiler đơn độc, nhưng mọi nhánh phát triển của hệ sinh thái đều phải quay về phục vụ mục tiêu làm cho compiler và core ngôn ngữ tốt hơn. Mảng web ép buộc compiler giải quyết tốt bài toán cấp phát bộ nhớ theo request. Mảng nhúng ép buộc visible cost của compiler phải hoạt động cực kỳ tường minh. OS lab thử nghiệm độ tin cậy của freestanding runtime. Công cụ AI ép buộc diagnostics và IR của compiler phải có cấu trúc dữ liệu rõ ràng. Nếu một nhánh phát triển chỉ tạo ra các demo bóng bẩy để trình diễn mà không mang về bất kỳ bằng chứng thực tế hay yêu cầu thiết kế mới nào cho lõi ngôn ngữ, nó đang làm loãng đi tài nguyên và tầm nhìn của dự án.


Bình luận (0)

Đang tải bình luận...