Vì sao "bỏ qua code, xuất thẳng binary" là một lỗi phân loại

Nghe bài viết:

Elon Musk nói rằng AI sẽ khiến các ngôn ngữ lập trình trở nên lỗi thời vào năm 2026. Nhưng pipeline biên dịch thực ra đã làm đúng điều ông mô tả --- một cách xác định (deterministic) --- chỉ trong vài mili‑giây.

ele-260304195543

Grace Hopper và sự ra đời của compiler

Năm 1952, Grace Hopper ngồi trước một chiếc UNIVAC I và cảm thấy chán ngán việc phải chép địa chỉ của các subroutine bằng tay. Vào thời điểm đó, lập trình viên viết trực tiếp machine code, tra cứu vị trí bộ nhớ từ một thư viện giấy và ghép chúng lại thủ công. Quá trình này chậm, dễ sai và khi sai thì hậu quả rất lớn.

Sau này bà nhớ lại:

"Tôi đã có một compiler chạy được nhưng không ai muốn dùng. Họ nói rất nghiêm túc rằng máy tính chỉ có thể làm phép toán; chúng không thể viết chương trình."

Bà vẫn xây dựng A‑0 compiler. Nó nhận mã toán học dạng ký hiệu và tự động chuyển thành machine instructions. Công việc trước đây cần cả tháng lập trình thủ công giờ chỉ mất năm phút.

Những người hoài nghi nói rằng bà hiểu sai máy tính dùng để làm gì. Bà bỏ ngoài tai. Trong vòng một thập kỷ, bà đã góp phần tạo ra COBOL, và toàn bộ quỹ đạo phát triển của ngành phần mềm đã thay đổi vĩnh viễn.

Tôi nhắc lại điều này vì bảy mươi bốn năm sau, Elon Musk về cơ bản đang đề xuất đảo ngược tất cả.


Lời khẳng định

Trong một cuộc họp toàn công ty của xAI được Reuters đưa tin, Musk dự đoán rằng đến cuối năm 2026:

"Bạn thậm chí không cần viết code nữa. AI sẽ tạo binary trực tiếp."

Ông còn nói thêm:

"AI có thể tạo ra binary hiệu quả hơn bất kỳ compiler nào."

Tầm nhìn của ông rất đơn giản:

prompt → executable

Không source code.
Không biên dịch.
Không intermediate representation.

Chỉ còn "vibes và điện áp".

Ông cũng tán thành một bài đăng nói rằng việc tạo binary trực tiếp bằng AI là cách tính toán tiết kiệm năng lượng nhất. Bước tiếp theo, ông nói, sẽ là "tạo pixel trực tiếp theo thời gian thực từ mạng neural".

Có một thuật ngữ kỹ thuật cho điều đang xảy ra ở đây --- và nó không phải là "đổi mới".
Đó là lỗi phân loại (category error).

Compiler là một bộ biến đổi bảo toàn ngữ nghĩa: nó hoạt động trên một ngôn ngữ chính thức có đặc tả và đầu ra của nó có thể kiểm tra được theo đặc tả đó.

Trong khi đó, LLM là một hệ thống suy luận xác suất tạo ra chuỗi token có vẻ hợp lý nhưng không có đảm bảo đúng đắn.

Musk đang đề xuất thay thế cái thứ nhất bằng cái thứ hai.


Điều gì xảy ra khi bạn bấm Compile

Nhiều lập trình viên có một mô hình khá mơ hồ về việc biên dịch. Bạn viết code, chạy một lệnh và một file executable xuất hiện. Phép màu.

Nhưng thực tế, giữa gcc -O2 main.c và file binary đầu ra là một trong những chuỗi biến đổi hình thức phức tạp nhất trong khoa học máy tính.

1. Phân tích từ vựng (Lexical analysis)

Compiler đọc source code từng ký tự và chia nó thành các token:

  • keyword
  • identifier
  • operator
  • literal

2. Phân tích cú pháp (Parsing)

Các token được tổ chức thành AST (Abstract Syntax Tree) biểu diễn cấu trúc ngữ pháp của chương trình.

Nếu syntax sai, compiler phát hiện ở đây.

3. Phân tích ngữ nghĩa (Semantic analysis)

Compiler kiểm tra chương trình có hợp lý không:

  • kiểu dữ liệu có tương thích không
  • biến có tồn tại không
  • chữ ký hàm có đúng không

Bước này phát hiện nhiều lỗi trước khi chương trình chạy.


Intermediate Representation

Sau đó code được chuyển sang IR (Intermediate Representation).

Trong LLVM, IR là định dạng có kiểu và độc lập với:

  • ngôn ngữ nguồn
  • phần cứng

Các ngôn ngữ như:

  • Rust
  • Swift
  • C
  • C++
  • Julia
  • Zig

đều compile xuống cùng IR.

1-260304195203


Các tối ưu hóa trong compiler

Các bước tối ưu hóa là nơi chứa hàng chục năm nghiên cứu khoa học máy tính.

Constant folding

Nếu compiler có thể tính toán trước, nó làm ngay lúc compile.

int x = 30;
int y = x * 2;

Compiler chỉ load 60.

Dead code elimination

Code không bao giờ được gọi sẽ bị xóa.

Loop unrolling

Loop nhỏ được mở rộng để giảm chi phí branch.

Vectorization

Scalar operation được chuyển thành SIMD instruction để xử lý nhiều dữ liệu trong một chu kỳ CPU.

Register allocation

Compiler quyết định giá trị nào nằm trong thanh ghi CPU nào.


Compiler Explorer

Matt Godbolt tạo ra công cụ Compiler Explorer.

Bạn viết C++ ở bên trái, assembly xuất hiện bên phải.

-O0 bạn thấy bản dịch trực tiếp.
-O3 compiler thực hiện tối ưu hóa phức tạp.

Công cụ này xử lý:

  • ~92 triệu lần compile mỗi năm
  • hơn 3000 compiler
  • hơn 80 ngôn ngữ

Compiler là phần mềm cực kỳ phức tạp

LLVM được phát triển từ năm 2000.
GCC từ năm 1987.

Một compiler production đại diện cho hàng chục năm công sức của nhiều kỹ sư.

Và tất cả các biến đổi của nó đều:

  • deterministic
  • được kiểm thử kỹ
  • chạy trong production trên toàn thế giới

Tất cả diễn ra trong mili‑giây.

Đó là thứ Musk muốn thay thế bằng một language model có thể hallucinate.


Kinh tế của việc "biên dịch bằng AI"

Compile bằng gcc thường chỉ mất vài trăm mili‑giây CPU.

Ngay cả việc compile Linux kernel từ đầu cũng chỉ mất vài phút và chi phí rất nhỏ.

Trong khi đó, nếu LLM tạo binary trực tiếp, nó có thể cần hàng triệu token output.

Độ chính xác phải 100%.

Một byte sai trong binary có thể gây:

  • segfault
  • lỗ hổng bảo mật
  • undefined behavior

2-260304195315

Điều gì xảy ra khi bỏ source code

Source code không chỉ là input cho compiler.
Nó là artifact trung tâm của kỹ thuật phần mềm.

Nếu bỏ nó:

Version control không còn ý nghĩa

Git hoạt động bằng cách so sánh thay đổi từng dòng.

Binary không thể diff theo cách hữu ích.

Code review trở nên bất khả thi

Không ai review binary.

Debugging cực kỳ khó

Source crash → stack trace.
Binary crash → địa chỉ bộ nhớ.

Khả năng đa nền tảng biến mất

Binary x86 không chạy ARM.
Source code có thể compile cho mọi kiến trúc.

Security audit trở thành hộp đen

Không thể kiểm tra logic khi không đọc được code.


LLM thực sự giỏi ở đâu

LLM đang thay đổi cách phát triển phần mềm.

Chúng rất giỏi:

  • viết boilerplate
  • khám phá API
  • tạo prototype nhanh
  • dịch giữa các ngôn ngữ
  • giải thích code
  • viết test

Nhưng chúng vẫn tạo ra source code.

3-260304195358


Vai trò đúng của AI

LLM:

  • tạo code

Compiler:

  • biến đổi deterministic

Hai thứ này bổ trợ nhau.


Tương lai thực sự của lập trình

Tương lai của lập trình không phải:

prompt → binary

Mà là:

  • abstraction cao hơn
  • công cụ tốt hơn
  • AI trở thành cộng tác viên

Source code tồn tại vì con người cần:

  • hiểu hệ thống
  • kiểm chứng logic
  • bảo trì phần mềm

Nhu cầu đó không biến mất khi máy tính trở nên thông minh hơn.

Thực tế, nó còn quan trọng hơn.