Tin tức

UnifiedIR của Julia: Cuộc đại tu IR trình biên dịch sau một thập kỷ

PR của Keno đề xuất UnifiedIR, một IR nhận biết phương ngữ, dựa trên vùng, để thay thế các cấu trúc dữ liệu trình biên dịch cũ kỹ của Julia, nhằm mục tiêu mở rộng và thống nhất hệ sinh thái.

July 19, 2026· 3 min read· Nguồn: GitHub
UnifiedIR của Julia: Cuộc đại tu IR trình biên dịch sau một thập kỷ

Keno Fischer đã mở một pull request quan trọng chống lại trình biên dịch Julia — PR #62334 — đề xuất thay thế toàn bộ cấu trúc dữ liệu IR nội bộ của ngôn ngữ. IR hiện tại, đã khoảng mười năm tuổi, đã trở thành nút thắt cổ chai cho cả phát triển trình biên dịch và công cụ hệ sinh thái.

Những gì bị hỏng

IR hiện tại mắc phải ba vấn đề lớn: khó sử dụng do thiết kế API kém và ngữ nghĩa sở hữu; không thể mở rộng, buộc các dự án hạ nguồn phải hack xung quanh các giới hạn hoặc xây dựng IR riêng từ đầu; và chưa bao giờ được thiết kế như một hệ thống hướng ra bên ngoài. Kết quả là sự phân mảnh và nợ kỹ thuật trên toàn bộ trình biên dịch Julia và hệ sinh thái của nó.

UnifiedIR: Sự thay thế

UnifiedIR là một gói cấp cao mới nằm cùng với Compiler, JuliaSyntax và JuliaLowering. Nó cung cấp một bộ cấu trúc dữ liệu và thao tác IR khép kín, có thể mở rộng. Thiết kế nhận biết phương ngữ và dựa trên vùng, tương tự MLIR, nhưng vẫn giữ lại các yếu tố của IR Julia gốc hoạt động tốt.

PR nhằm thay thế các cấu trúc dữ liệu hiện có sau:

  • SyntaxTree (từ JuliaSyntax)
  • SyntaxGraph (từ JuliaSyntax/Lowering)
  • CodeInfo (cho suy luận; codegen và interpreter là mục tiêu tương lai)
  • IRCode
  • Các IR hệ sinh thái khác nhau

Kiến trúc cốt lõi

Cấu trúc dữ liệu cốt lõi cung cấp một biểu diễn IR hiệu quả với các tiện ích cốt lõi. Người dùng có thể mở rộng nó với các cột bổ sung (một cột cho mỗi câu lệnh) và các chế độ xem phân lớp cho các ứng dụng cụ thể. Các chế độ xem hiện được định nghĩa bao gồm:

  • Một phần mở rộng giống IncrementalCompact cho các pass thay thế một lần nhanh
  • Một chế độ xem giống LLVM sử dụng danh sách liên kết để biến đổi CFG dễ dàng hơn, với thuật toán duy trì thứ tự mới được phát triển cùng với Claude để tránh hành vi bậc hai
  • Một nhúng đồ thị cho các trình biên dịch mảng và lowering (không phụ thuộc luồng điều khiển)
  • Một mã hóa cây cho lowering (mỗi câu lệnh có chính xác một người dùng, ngoại trừ gốc)

Các tính năng chính

UnifiedIR giới thiệu hỗ trợ hạng nhất cho các vùng, cho phép các tính năng như PR #58532 và tích hợp MLIR tốt hơn. Nó cũng hỗ trợ các phần mở rộng phương ngữ một cách tự nhiên. PR chuyển suy luận, trình tối ưu hóa và JuliaLowering sang các cấu trúc mới, mặc dù bootstrap chưa được kích hoạt. Khoảng một nửa bộ kiểm thử vượt qua với phiên bản trình biên dịch mới.

Kết luận

Đây là một thay đổi nền tảng cho cơ sở hạ tầng trình biên dịch của Julia. Nếu được hợp nhất, nó sẽ đơn giản hóa việc phát triển trình biên dịch, giảm phân mảnh hệ sinh thái và mở ra cánh cửa cho tích hợp tốt hơn với các công cụ dựa trên MLIR. PR vẫn đang trong quá trình phát triển và là cơ sở để thảo luận, nhưng nó đại diện cho một nỗ lực nghiêm túc để hiện đại hóa nội bộ trình biên dịch của Julia sau một thập kỷ phát triển gia tăng.