Zig và triết lý không phép màu
Ảnh: GameFromScratch.com

Zig và triết lý không phép màu

Trong khi ngôn ngữ mới đua thêm tính năng, Zig đi ngược: đọc mã là biết chính xác máy làm gì, không gì xảy ra sau lưng. Triết lý 'không phép màu' và chỗ nó thật sự tỏa sáng.

Trong khi phần lớn ngôn ngữ mới đua nhau thêm tính năng để viết được ngắn hơn và biểu cảm hơn, Zig đi ngược hẳn dòng chảy: mục tiêu của nó là bạn đọc một đoạn mã và biết chính xác máy sẽ làm gì, không có bất cứ điều gì xảy ra sau lưng. Triết lý đó — thường được gọi gọn là "không phép màu" — nghe như một bước lùi, nhưng với một lớp bài toán cụ thể, nó chính là thứ đang thiếu.

Không có cấp phát ngầm

Trong Zig, hàm nào cần bộ nhớ động thì phải nhận một bộ cấp phát làm tham số. Nghe phiền — và đúng là phiền hơn — nhưng đổi lại, chỉ cần nhìn chữ ký của một hàm là biết ngay nó có cấp phát bộ nhớ hay không. Với phần mềm nhúng chạy trên chip có vài KB RAM, hay mã trong nhân nơi cấp phát sai chỗ là thảm hoạ, khả năng biết chắc điều này chỉ bằng cách đọc là vô giá. Nó cũng khiến việc kiểm thử rò rỉ bộ nhớ trở nên dễ lạ thường: truyền vào một bộ cấp phát có theo dõi, và cuối bài kiểm tra hỏi nó "còn sót vùng nào chưa trả không?" — rò rỉ bị bắt tại chỗ thay vì phát hiện sau nhiều tháng chạy.

Không có luồng điều khiển ẩn

Zig cố tình bỏ đi những thứ mà các ngôn ngữ khác coi là tiện: không ngoại lệ, không nạp chồng toán tử, không hàm khởi tạo ngầm chạy sau lưng bạn. Lỗi được trả về như một giá trị bình thường và trình biên dịch bắt buộc bạn phải xử lý nó, không cho lờ đi. Hệ quả là khi đọc một đoạn mã Zig, mọi chỗ mà luồng thực thi có thể nhảy đi nơi khác đều nhìn thấy được ngay trên trang — không có dấu cộng nào bí mật gọi một hàm, không có ngoại lệ nào âm thầm phóng qua mười tầng gọi hàm.

Chạy mã ngay lúc biên dịch

Đây là phần thanh lịch nhất. Zig cho phép thực thi chính mã Zig thường ngay trong lúc biên dịch — dùng để sinh kiểu dữ liệu, tính sẵn bảng tra cứu, hay chọn nhánh mã theo nền tảng đích. Thay vì phải học một ngôn ngữ macro riêng biệt với cú pháp lạ như nhiều ngôn ngữ khác, bạn dùng đúng ngôn ngữ mình đã biết để lập trình cả giai đoạn biên dịch. Một khái niệm ít hơn để học, mà lại mạnh hơn.

Ai nên để mắt

Cần thành thật: Zig chưa đạt bản ổn định. Cú pháp còn thay đổi giữa các phiên bản, hệ sinh thái thư viện còn mỏng, và tài liệu chưa theo kịp. Chưa nên đặt cược một hệ thống quan trọng dài hạn vào nó — đó là rủi ro thật, không phải sự thận trọng thừa.

Nhưng có một thứ dùng được ngay hôm nay kể cả khi bạn không viết một dòng Zig nào: bộ công cụ của nó biên dịch chéo mã C và C++ ra rất nhiều nền tảng khác nhau một cách gọn gàng đáng kinh ngạc, nơi các chuỗi công cụ truyền thống rối rắm và nặng nề. Không ít dự án đã lặng lẽ dùng Zig chỉ để thay thế chuỗi công cụ dựng của mình — hưởng lợi ích mà chưa cần cam kết gì với ngôn ngữ. Đó có lẽ là cách khôn ngoan nhất để làm quen với nó lúc này.

Chia sẻ

Thảo luận