LLVM
| Tác giả gốc | |
|---|---|
| Nhà phát triển | Nhóm phát triển LLVM |
| Phát hành lần đầu | 2003 |
| Phiên bản ổn định | 22.1.8[1] |
| Kho mã nguồn | |
| Viết bằng | C++ |
| Hệ điều hành | Đa nền tảng |
| Thể loại | Trình biên dịch |
| Giấy phép | Giấy phép Apache 2.0 với Ngoại lệ LLVM (v9.0.0 trở về sau)[2] Giấy phép kế thừa:[3] UIUC (dạng BSD) |
| Website | www |
LLVM là một bộ các công nghệ trình biên dịch và chuỗi công cụ (toolchain)[4] có thể được sử dụng để phát triển front-end cho bất kỳ ngôn ngữ lập trình nào và backend cho bất kỳ kiến trúc tập lệnh nào. LLVM được thiết kế xoay quanh một dạng biểu diễn trung gian (IR) độc lập với ngôn ngữ, đóng vai trò như một hợp ngữ cấp cao, khả chuyển, có thể được tối ưu hóa thông qua nhiều phép biến đổi qua nhiều lượt (pass).[5] Tên gọi LLVM ban đầu là viết tắt của Low Level Virtual Machine (Máy ảo cấp thấp). Tuy nhiên, dự án sau đó đã mở rộng và tên gọi này không còn là một từ viết tắt mà trở thành một tên riêng.
LLVM được viết bằng C++ và được thiết kế cho việc tối ưu hóa tại thời điểm biên dịch (compile-time), thời điểm liên kết (link-time), và thời điểm thực thi (runtime). Ban đầu được cài đặt cho C và C++, thiết kế độc lập với ngôn ngữ của LLVM kể từ đó đã tạo ra rất nhiều front-end khác nhau: các ngôn ngữ có trình biên dịch sử dụng LLVM (hoặc không trực tiếp sử dụng LLVM nhưng có thể tạo ra chương trình đã biên dịch dưới dạng LLVM IR) bao gồm ActionScript, Ada, C# cho .NET,[6][7][8] Common Lisp,[9] Crystal, CUDA, D,[10] Delphi,[11] Dylan, Forth,[12] Fortran,[13] FreeBASIC, Free Pascal, Halide, Haskell, Idris,[14] Jai (chỉ dành cho bản phát hành tối ưu hóa), bytecode Java, Julia, Kotlin, ngôn ngữ G của LabVIEW,[15][16] Objective-C, OpenCL,[17] Odin,[18] PicoLisp, SQL và PL/pgSQL của PostgreSQL,[19] Ruby,[20] Rust,[21] Scala,[22][23] Standard ML,[24] Swift, Wolfram Language,[25] Xojo, và Zig.
Lịch sử
Dự án LLVM được bắt đầu vào năm 2000 tại Đại học Illinois Urbana-Champaign, dưới sự chỉ đạo của Vikram Adve và Chris Lattner. LLVM ban đầu được phát triển như một hạ tầng nghiên cứu nhằm điều tra các kỹ thuật biên dịch động cho các ngôn ngữ lập trình tĩnh và động. LLVM được phát hành theo Giấy phép Nguồn mở Đại học Illinois/NCSA,[2] một giấy phép phần mềm tự do thông thoáng. Vào năm 2005, Apple Inc. đã tuyển dụng Lattner và thành lập một đội ngũ để làm việc với hệ thống LLVM cho nhiều mục đích sử dụng khác nhau trong các hệ thống phát triển của Apple.[26] LLVM là một phần không thể thiếu trong các công cụ phát triển Xcode của Apple dành cho macOS và iOS kể từ phiên bản Xcode 4 vào năm 2011.[27]
Vào năm 2006, Lattner bắt đầu làm việc trên một dự án mới mang tên Clang. Sự kết hợp giữa front-end Clang và backend LLVM được gọi là Clang/LLVM hoặc đơn giản là Clang.
Tên gọi LLVM ban đầu là một chữ viết tắt của Low Level Virtual Machine (Máy ảo cấp thấp). Tuy nhiên, dự án LLVM đã phát triển thành một dự án ô (umbrella project) và không còn mấy liên quan đến những gì mà hầu hết các nhà phát triển hiện nay nghĩ về một máy ảo. Điều này làm cho từ viết tắt trở nên "gây hiểu lầm" và "không phù hợp", và kể từ năm 2011, LLVM "chính thức không còn là một từ viết tắt",[28] mà là một thương hiệu áp dụng cho dự án ô LLVM.[29] Dự án bao gồm dạng biểu diễn trung gian (IR) của LLVM, trình gỡ lỗi LLVM, bản cài đặt Thư viện tiêu chuẩn C++ của LLVM (với sự hỗ trợ đầy đủ cho C++11 và C++14[30]), v.v. LLVM được quản lý bởi LLVM Foundation. Kỹ sư trình biên dịch Tanya Lattner đã trở thành chủ tịch tổ chức này vào năm 2014[31] và vẫn giữ chức chủ tịch kiêm Giám đốc Điều hành tính đến năm tháng 7 năm 2026[cập nhật].[32]
"Vì đã thiết kế và triển khai LLVM", Hiệp hội Máy tính (ACM) đã trao Giải thưởng Hệ thống Phần mềm ACM năm 2012 cho Vikram Adve, Chris Lattner và Evan Cheng.[33]
Dự án ban đầu được phát hành dưới giấy phép UIUC. Sau khi phiên bản v9.0.0 ra mắt vào năm 2019,[34] LLVM đã được cấp lại giấy phép sang Apache License 2.0 với các Ngoại lệ LLVM.[2] Tính đến năm tháng 11 năm 2022[cập nhật], khoảng 400 đóng góp vẫn chưa được chuyển đổi giấy phép mới.[35][36]
Tính năng
LLVM có thể cung cấp các tầng giữa của một hệ thống trình biên dịch hoàn chỉnh, tiếp nhận mã dạng biểu diễn trung gian (IR) từ một trình biên dịch và xuất ra một IR đã được tối ưu hóa. IR mới này sau đó có thể được chuyển đổi và liên kết thành mã hợp ngữ phụ thuộc vào phần cứng dành cho nền tảng mục tiêu. LLVM có thể chấp nhận IR từ chuỗi công cụ (toolchain) GNU Compiler Collection (GCC), cho phép nó được sử dụng với nhiều front-end trình biên dịch hiện có vốn được viết cho dự án đó. LLVM cũng có thể được biên dịch bằng gcc kể từ phiên bản 7.5.[37]
LLVM cũng có thể tạo mã máy có thể tái định vị (relocatable machine code) tại thời điểm biên dịch hoặc thời điểm liên kết, hay thậm chí tạo mã máy nhị phân ngay lúc thực thi (runtime).
LLVM hỗ trợ một tập lệnh và hệ thống kiểu dữ liệu độc lập với ngôn ngữ.[5] Mỗi lệnh đều ở dạng gán đơn tĩnh (SSA), nghĩa là mỗi biến (được gọi là thanh ghi có kiểu - typed register) chỉ được gán một lần duy nhất và sau đó bị cố định. Điều này giúp đơn giản hóa việc phân tích sự phụ thuộc giữa các biến. LLVM cho phép biên dịch mã theo phương thức tĩnh như hệ thống GCC truyền thống, hoặc để lại cho việc biên dịch trễ từ IR sang mã máy thông qua phương pháp biên dịch JIT (just-in-time compilation), tương tự như Java. Hệ thống kiểu bao gồm các kiểu cơ bản như số nguyên hoặc số thực dấu phẩy động và năm kiểu dẫn xuất: con trỏ, mảng, vector, cấu trúc (structure), và hàm. Một cấu trúc kiểu trong một ngôn ngữ cụ thể có thể được biểu diễn bằng cách kết hợp các kiểu cơ bản này trong LLVM. Ví dụ, một lớp (class) trong C++ có thể được biểu diễn bằng sự kết hợp của các cấu trúc, các hàm và mảng các con trỏ hàm.
Trình biên dịch JIT của LLVM có thể tối ưu hóa bằng cách loại bỏ các nhánh tĩnh không cần thiết khỏi chương trình lúc thực thi, và do đó rất hữu ích cho việc đánh giá một phần (partial evaluation) trong các trường hợp chương trình có nhiều tùy chọn mà hầu hết trong số đó có thể dễ dàng xác định là không cần thiết trong một môi trường cụ thể. Tính năng này được sử dụng trong đường ống (pipeline) OpenGL của Mac OS X Leopard (v10.5) để cung cấp khả năng hỗ trợ cho các tính năng phần cứng còn thiếu.[38]
Mã đồ họa bên trong đường ống OpenGL có thể được giữ ở dạng biểu diễn trung gian và sau đó biên dịch khi chạy trên máy mục tiêu. Trên các hệ thống có đơn vị xử lý đồ họa (GPU) cao cấp, mã kết quả thu được rất gọn nhẹ, truyền thẳng các lệnh đến GPU với những thay đổi tối thiểu. Trên các hệ thống có GPU phân khúc thấp, LLVM sẽ biên dịch các thủ tục tùy chọn chạy trên bộ xử lý trung tâm (CPU) cục bộ để mô phỏng các lệnh mà GPU không thể xử lý nội bộ. LLVM đã cải thiện hiệu năng trên các máy phân khúc thấp sử dụng chipset Intel GMA. Một hệ thống tương tự đã được phát triển dưới dạng LLVMpipe của Gallium3D và được tích hợp vào shell GNOME để cho phép nó chạy mà không cần tải trình điều khiển phần cứng 3D thích hợp.[39]
Năm 2011, các chương trình do GCC biên dịch đạt hiệu năng cao hơn trung bình 10% so với các chương trình từ LLVM.[40][41] Năm 2013, trang web Phoronix báo cáo rằng LLVM đã bắt kịp GCC, biên dịch ra các tệp nhị phân có hiệu năng tương đương.[42]
Các thành phần
LLVM đã trở thành một dự án ô (umbrella project) bao gồm nhiều thành phần khác nhau.
Front-end
LLVM ban đầu được viết nhằm thay thế cho trình tạo mã hiện có trong bộ công cụ GCC,[43] và nhiều front-end của GCC đã được chỉnh sửa để hoạt động với nó, tạo ra bộ công cụ LLVM-GCC (hiện đã ngừng hoạt động). Các chỉnh sửa nhìn chung bao gồm một bước chuyển đổi từ GIMPLE sang LLVM IR để các bộ tối ưu hóa và bộ tạo mã (codegen) của LLVM có thể được sử dụng thay cho hệ thống GIMPLE của GCC. Apple từng là một bên sử dụng lớn của LLVM-GCC thông qua Xcode 4.x (2013).[44]
Việc sử dụng front-end của GCC này được coi là một biện pháp tạm thời; nó hầu như trở nên lạc hậu khi Apple phát triển Clang — một front-end trình biên dịch mới hơn với cơ sở mã hiện đại, mô-đun hóa hơn và tốc độ biên dịch nhanh hơn, hỗ trợ các ngôn ngữ C, C++, và Objective-C. Khả năng hỗ trợ LLVM-GCC đã bị loại bỏ trong Xcode 5.[45] Được hỗ trợ chính bởi Apple, Clang hướng tới việc thay thế trình biên dịch C/Objective-C trong hệ thống GCC bằng một hệ thống dễ tích hợp hơn với các môi trường phát triển tích hợp (IDE) và hỗ trợ tốt hơn cho đa luồng. Hỗ trợ cho các chỉ thị OpenMP đã được đưa vào Clang từ phiên bản 3.8.[46]
Sự quan tâm rộng rãi dành cho LLVM đã dẫn đến nhiều nỗ lực phát triển các front-end mới cho nhiều ngôn ngữ khác, bao gồm Ada, D, Delphi, Fortran, Haskell, Julia, Rust, Swift, và các ngôn ngữ khác.
Trình biên dịch Utrecht Haskell của Đại học Utrecht có thể tạo mã cho LLVM. Dù trình tạo mã này từng ở trong giai đoạn đầu phát triển, trong nhiều trường hợp nó đã đạt hiệu quả cao hơn trình tạo mã C.[47] Backend của Glasgow Haskell Compiler (GHC) sử dụng LLVM và giúp mã biên dịch tăng tốc 30% so với biên dịch mã bản địa thông qua GHC hoặc tạo mã C rồi biên dịch, chỉ thiếu duy nhất một trong số nhiều kỹ thuật tối ưu hóa do GHC thực hiện.[48]
Nhiều thành phần khác đang ở các giai đoạn phát triển khác nhau, bao gồm nhưng không giới hạn ở: một front-end cho bytecode Java, một front-end cho Common Intermediate Language (CIL), bản cài đặt MacRuby của Ruby 1.9, nhiều front-end khác nhau cho Standard ML, và một bộ cấp phát thanh ghi bằng tô màu đồ thị mới.[cần dẫn nguồn]
Dạng biểu diễn trung gian

Cốt lõi của LLVM là dạng biểu diễn trung gian (IR), một ngôn ngữ lập trình cấp thấp tương tự như hợp ngữ. IR là một tập lệnh RISC kiểu định kiểu mạnh (strongly typed), trừu tượng hóa hầu hết các chi tiết của kiến trúc mục tiêu. Ví dụ, quy ước gọi được trừu tượng hóa thông qua các lệnh call và ret với các đối số rõ ràng. Ngoài ra, thay vì sử dụng một tập hợp thanh ghi cố định, IR sử dụng một tập hợp vô hạn các biến tạm thời có dạng %0, %1, v.v. LLVM hỗ trợ ba dạng IR tương đương nhau: định dạng hợp ngữ mà con người có thể đọc được,[49] định dạng trong bộ nhớ phù hợp cho các front-end, và định dạng bitcode nén để tuần tự hóa (serialize). Một chương trình "Hello, world!" đơn giản ở định dạng IR mà con người có thể đọc được:
@.str = internal constant [14 x i8] c"Hello, world\0A\00"
declare i32 @printf(ptr, ...)
define i32 @main(i32 %argc, ptr %argv) nounwind {
entry:
%tmp1 = getelementptr [14 x i8], ptr @.str, i32 0, i32 0
%tmp2 = call i32 (ptr, ...) @printf( ptr %tmp1 ) nounwind
ret i32 0
}
Nhiều quy ước khác nhau được sử dụng và các tính năng được cung cấp bởi các kiến trúc mục tiêu khác nhau đồng nghĩa với việc LLVM không thể thực sự tạo ra một IR hoàn toàn độc lập với mục tiêu và chuyển đổi mục tiêu (retarget) mà không vi phạm một số quy tắc đã thiết lập. Các ví dụ về sự phụ thuộc vào mục tiêu ngoài những gì được đề cập rõ ràng trong tài liệu có thể tìm thấy trong đề xuất năm 2011 cho "wordcode" — một biến thể hoàn toàn độc lập với mục tiêu của LLVM IR nhằm mục đích phân phối trực tuyến.[50] Một ví dụ thực tế hơn là PNaCl.[51]
Dự án LLVM cũng giới thiệu một loại biểu diễn trung gian khác mang tên MLIR[52] giúp xây dựng hạ tầng trình biên dịch có thể tái sử dụng và mở rộng bằng cách áp dụng kiến trúc plugin có tên là Dialect.[53] Nó cho phép sử dụng thông tin cấp cao hơn về cấu trúc chương trình trong quá trình tối ưu hóa, bao gồm cả biên dịch đa diện (polyhedral compilation).
Backend
Ở phiên bản 16, LLVM hỗ trợ nhiều tập lệnh, bao gồm IA-32, x86-64, ARM, Qualcomm Hexagon, LoongArch, M68K, MIPS, Parallel Thread Execution của NVIDIA (PTX, còn được gọi là NVPTX trong tài liệu của LLVM), PowerPC, AMD TeraScale,[54] hầu hết các GPU gần đây của AMD (còn được gọi là AMDGPU trong tài liệu LLVM),[55] SPARC, z/Architecture (còn được gọi là SystemZ trong tài liệu LLVM), và XCore.
Một số tính năng không khả dụng trên một số nền tảng. Hầu hết các tính năng đều có mặt trên IA-32, x86-64, z/Architecture, ARM, và PowerPC.[56] RISC-V được hỗ trợ kể từ phiên bản 7.
Trong quá khứ, LLVM cũng từng hỗ trợ các backend khác (toàn bộ hoặc một phần), bao gồm backend C, Cell SPU, mblaze (MicroBlaze),[57] AMD R600, DEC/Compaq Alpha (Alpha AXP)[58] và Nios2,[59] nhưng hầu hết các phần cứng đó đã lỗi thời và các nhà phát triển LLVM quyết định rằng chi phí hỗ trợ và bảo trì không còn hợp lý nữa.[cần dẫn nguồn]
LLVM cũng hỗ trợ WebAssembly làm mục tiêu, cho phép các chương trình đã biên dịch thực thi trong các môi trường hỗ trợ WebAssembly như Google Chrome / Chromium, Firefox, Microsoft Edge, Apple Safari hoặc WAVM. Các trình biên dịch WebAssembly tuân thủ LLVM thường hỗ trợ mã nguồn hầu như không cần sửa đổi được viết bằng C, C++, D, Rust, Nim, Kotlin và một số ngôn ngữ khác.
Dự án con mã máy LLVM (LLVM MC) là khung làm việc của LLVM nhằm chuyển dịch các lệnh máy giữa dạng văn bản và mã máy. Trước đây, LLVM dựa vào trình dịch hợp ngữ của hệ thống, hoặc trình dịch do một chuỗi công cụ cung cấp, để dịch hợp ngữ sang mã máy. Trình dịch hợp ngữ tích hợp của LLVM MC hỗ trợ hầu hết các mục tiêu của LLVM, bao gồm IA-32, x86-64, ARM và ARM64. Đối với một số mục tiêu, bao gồm các tập lệnh MIPS khác nhau, hỗ trợ dịch hợp ngữ tích hợp có thể sử dụng được nhưng vẫn đang trong giai đoạn thử nghiệm (beta).[cần dẫn nguồn]
Trình liên kết
Dự án con lld là một nỗ lực nhằm phát triển một trình liên kết tích hợp sẵn, độc lập với nền tảng cho LLVM.[60] lld hướng tới việc loại bỏ sự phụ thuộc vào trình liên kết của bên thứ ba. tính đến năm tháng 5 năm 2017[cập nhật], lld hỗ trợ ELF, PE/COFF, Mach-O, và WebAssembly[61] theo thứ tự độ hoàn thiện giảm dần. lld nhanh hơn cả hai phiên bản của GNU ld.[cần dẫn nguồn]
Không giống như các trình liên kết GNU, lld hỗ trợ tích hợp sẵn cho tối ưu hóa thời gian liên kết (LTO). Điều này cho phép tạo mã nhanh hơn vì nó bỏ qua việc sử dụng plugin trình liên kết, nhưng mặt khác lại ngăn cản khả năng tương tác với các biến thể LTO khác.[62]
Thư viện tiêu chuẩn C++
Dự án LLVM bao gồm một bản cài đặt của Thư viện tiêu chuẩn C++ mang tên libc++, được cấp hai giấy phép dưới Giấy phép MIT và giấy phép UIUC.[63]
Kể từ phiên bản v9.0.0, nó đã được cấp lại giấy phép sang Giấy phép Apache 2.0 với các ngoại lệ LLVM.[2]
Polly
Thành phần này cài đặt một bộ giải pháp tối ưu hóa tính cục bộ bộ nhớ đệm (cache locality) cũng như tự động song song hóa và véc-tơ hóa bằng cách sử dụng mô hình đa diện.[64]
Trình gỡ lỗi
Thư viện tiêu chuẩn C
llvm-libc là một thư viện tiêu chuẩn C độc lập với ABI, chưa hoàn thiện và sắp ra mắt, được thiết kế bởi và dành cho dự án LLVM.[65]
Các bản phái sinh
Do sở hữu giấy phép thông thoáng (permissive license), nhiều nhà cung cấp đã phát hành các bản rẽ nhánh (fork) được tinh chỉnh riêng từ LLVM. Điều này được công nhận chính thức trong tài liệu của LLVM, trong đó khuyến cáo không nên sử dụng số phiên bản để kiểm tra tính năng vì lý do này.[66] Một số nhà cung cấp bao gồm:
- Trình biên dịch AMD Optimizing C/C++ Compiler của AMD được xây dựng dựa trên LLVM, Clang và Flang.
- Apple duy trì một bản rẽ nhánh nguồn mở dành cho Xcode.[67]
- Arm cung cấp một số chuỗi công cụ (toolchain) dựa trên LLVM, bao gồm Arm Compiler for Embedded hướng tới phát triển trên phần cứng thuần (bare-metal) và Arm Compiler for Linux hướng tới thị trường tính toán hiệu năng cao (HPC).
- Flang, dự án Fortran đang trong quá trình phát triển tính đến năm 2022[cập nhật].
- IBM đang áp dụng LLVM vào các trình biên dịch C/C++ và Fortran của mình.[68]
- Intel đã áp dụng LLVM cho trình biên dịch Intel C++ thế hệ tiếp theo của họ.[69]
- Phòng thí nghiệm Quốc gia Los Alamos có một bản rẽ nhánh hỗ trợ tính toán song song từ LLVM 8 mang tên "Kitsune".[70]
- Nvidia sử dụng LLVM trong việc cài đặt trình biên dịch NVVM CUDA của họ.[71] Trình biên dịch NVVM này khác với backend "NVPTX" được đề cập ở mục Backend, mặc dù cả hai đều tạo mã PTX cho các GPU của Nvidia.
- Từ năm 2013, Sony đã sử dụng trình biên dịch Clang (front-end chính của LLVM) trong bộ phát triển phần mềm (SDK) cho máy chơi game PlayStation 4 của họ.[72]
Xem thêm
- HHVM
- C--
- Bộ công cụ biên dịch Amsterdam (ACK)
- GNU lightning
- Pure
- ROCm
- Emscripten
- Định dạng phân phối TenDRA
- Định dạng phân phối trung lập về kiến trúc (ANDF)
- So sánh các phần mềm ảo hóa ứng dụng
- SPIR-V
Tham khảo
- ^ "LLVM 22.1.8". ngày 16 tháng 6 năm 2026. Truy cập ngày 16 tháng 6 năm 2026.
- ^ a b c d "LICENSE.TXT". llvm.org. Truy cập ngày 24 tháng 9 năm 2019.
- ^ "Chính sách dành cho nhà phát triển LLVM — Tài liệu LLVM 20.0.0git". llvm.org. Truy cập ngày 9 tháng 11 năm 2024.
- ^ "Dự án cơ sở hạ tầng trình biên dịch LLVM". Truy cập ngày 11 tháng 3 năm 2016.
- ^ a b "Sổ tay tham khảo ngôn ngữ LLVM". Truy cập ngày 9 tháng 6 năm 2019.
- ^ "Giới thiệu LLILC - Trình biên dịch mới dựa trên LLVM dành cho .NET". dotnetfoundation.org. Bản gốc lưu trữ ngày 12 tháng 12 năm 2021. Truy cập ngày 12 tháng 9 năm 2020.
- ^ "Mono LLVM". Truy cập ngày 10 tháng 3 năm 2013.
- ^ Lattner, Chris (2011). "LLVM". Trong Brown, Amy; Wilson, Greg (biên tập). Kiến trúc của các ứng dụng mã nguồn mở.
- ^ "Khóa cài". Clasp Developers. Truy cập ngày 2 tháng 12 năm 2024.
- ^ "LDC". D Wiki. Truy cập ngày 2 tháng 12 năm 2024.
- ^ "Trình biên dịch Delphi dựa trên LLVM". Embarcadero. Truy cập ngày 26 tháng 11 năm 2024.
- ^ "Tiến lên". GitHub. ngày 28 tháng 11 năm 2021.
- ^ "Trình biên dịch Flang". LLVM Project. Truy cập ngày 2 tháng 12 năm 2024.
- ^ "Nhanh". Rapid (bằng tiếng Anh). Truy cập ngày 22 tháng 11 năm 2024.
- ^ Wong, William (ngày 23 tháng 5 năm 2017). "Sự khác biệt giữa LabVIEW 2017 và LabVIEW NXG là gì?". Electronic Design.
- ^ "Trình biên dịch NI LabVIEW: Bên trong".
- ^ Larabel, Michael (ngày 11 tháng 4 năm 2018). "Khronos chính thức công bố trình dịch LLVM/SPIR-V của mình". Phoronix.com.
- ^ "Câu hỏi thường gặp". odin-lang.org. Truy cập ngày 26 tháng 1 năm 2026.
- ^ "32.1. Biên dịch JIT là gì?". PostgreSQL Documentation (bằng tiếng Anh). ngày 12 tháng 11 năm 2020. Truy cập ngày 25 tháng 1 năm 2021.
- ^ "Features". RubyMotion. Công ty TNHH Phát triển Scratchwork. Truy cập ngày 17 tháng 6 năm 2017.
RubyMotion chuyển đổi mã nguồn Ruby của dự án của bạn thành mã máy bằng cách sử dụng trình biên dịch trước (AOT), dựa trên LLVM.
- ^ "Tạo mã nguồn - Hướng dẫn phát triển Rust". rust-lang.org. Truy cập ngày 4 tháng 1 năm 2023.
- ^ Reedy, Geoff (ngày 24 tháng 9 năm 2012). "Biên dịch Scala sang LLVM". St. Louis, Missouri, United States. Truy cập ngày 19 tháng 2 năm 2013.
- ^ "Scala Native". Truy cập ngày 26 tháng 11 năm 2023.
- ^ "LLVMCodegen". MLton. Truy cập ngày 26 tháng 11 năm 2024.
- ^ Tài liệu hướng dẫn ngôn ngữ Wolfram
- ^ Adam Treat (ngày 19 tháng 2 năm 2005), Các thông số kỹ thuật và bản vá cho quá trình biên dịch Qt4 bằng LLVM, Bản gốc lưu trữ ngày 4 tháng 10 năm 2011, truy cập ngày 27 tháng 1 năm 2012
- ^ "Tổng quan về các công cụ dành cho nhà phát triển". Apple Developer. Apple. Bản gốc lưu trữ ngày 23 tháng 4 năm 2011.
- ^ Lattner, Chris (ngày 21 tháng 12 năm 2011). "Tên của LLVM". llvm-dev (Danh sách thư). Truy cập ngày 2 tháng 3 năm 2016.
'LLVM' chính thức không còn là từ viết tắt nữa. Từ viết tắt mà nó từng sử dụng để mở rộng cũng gây nhầm lẫn và không phù hợp ngay từ những ngày đầu. :) Khi LLVM phát triển để bao gồm các dự án con khác, nó càng trở nên ít hữu ích và vô nghĩa hơn.
- ^ Lattner, Chris (ngày 1 tháng 6 năm 2011). "LLVM". Trong Brown, Amy; Wilson, Greg (biên tập). Kiến trúc của các ứng dụng mã nguồn mở. Lulu.com. ISBN 978-1257638017.
Cái tên 'LLVM' từng là một từ viết tắt, nhưng giờ đây chỉ là thương hiệu cho toàn bộ dự án.
- ^ "Thư viện chuẩn C++ "libc++"".
- ^ Lattner, Chris (ngày 3 tháng 4 năm 2014). "Quỹ LLVM". LLVM Project Blog.
- ^ "Board of Directors". LLVM Foundation. Truy cập ngày 4 tháng 7 năm 2026.
- ^ "Giải thưởng Hệ thống Phần mềm ACM". ACM.
- ^ Wennborg, Hans (ngày 19 tháng 9 năm 2019). "[llvm-announce] Phát hành LLVM 9.0.0".
- ^ "Tái cấp phép Long Tail". foundation.llvm.org. ngày 11 tháng 11 năm 2022. Bản gốc lưu trữ ngày 13 tháng 5 năm 2024. Truy cập ngày 1 tháng 4 năm 2022.
- ^ "Cấp phép lại LLVM - sau thời gian dài". Google Docs. LLVM Project. Bản gốc lưu trữ ngày 13 tháng 5 năm 2024. Truy cập ngày 27 tháng 11 năm 2022.
- ^ "⚙ D156286 [docs] Nâng phiên bản GCC tối thiểu lên 7.5". reviews.llvm.org. Truy cập ngày 28 tháng 7 năm 2023.
- ^ Lattner, Chris (ngày 15 tháng 8 năm 2006). "Một ví dụ thú vị về việc sử dụng LLVM tại Apple: ngăn xếp OpenGL". llvm-dev (Danh sách thư). Truy cập ngày 1 tháng 3 năm 2016.
- ^ Michael Larabel, "GNOME Shell hoạt động mà không cần hỗ trợ trình điều khiển GPU", bài viết trên tạp chí "phoronix", ngày 6 tháng 11 năm 2011.
- ^ Makarov, V. "SPEC2000: So sánh LLVM-2.9 và GCC4.6.1 trên kiến trúc x86". Truy cập ngày 3 tháng 10 năm 2011.
- ^ Makarov, V. "SPEC2000: So sánh LLVM-2.9 và GCC4.6.1 trên kiến trúc x86_64". Truy cập ngày 3 tháng 10 năm 2011.
- ^ Larabel, Michael (ngày 27 tháng 12 năm 2012). "Trình biên dịch LLVM/Clang 3.2 cạnh tranh với GCC". Truy cập ngày 31 tháng 3 năm 2013.
- ^ Lattner, Chris; Adve, Vikram (tháng 5 năm 2003). Kiến trúc cho một GCC thế hệ tiếp theo. Hội nghị thượng đỉnh các nhà phát triển GCC thường niên lần thứ nhất. Truy cập ngày 6 tháng 9 năm 2009.
- ^ "Tổng quan về trình biên dịch LLVM". developer.apple.com.
- ^ "Ghi chú phát hành Xcode 5". Apple Inc.
- ^ "Ghi chú phát hành Clang 3.8". Truy cập ngày 24 tháng 8 năm 2016.
- ^ "Biên dịch Haskell sang LLVM". Truy cập ngày 22 tháng 2 năm 2009.
- ^ "Blog dự án LLVM: Trình biên dịch Glasgow Haskell và LLVM". ngày 17 tháng 5 năm 2010. Truy cập ngày 13 tháng 8 năm 2010.
- ^ "Sổ tay tham khảo ngôn ngữ LLVM". LLVM.org. ngày 10 tháng 1 năm 2023.
- ^ Kang, Jin-Gu. "Wordcode: mã bit LLVM độc lập hơn với mục tiêu" (PDF). Truy cập ngày 1 tháng 12 năm 2019.
- ^ "PNaCl: Các tệp thực thi ứng dụng khách gốc có thể di động" (PDF). Bản gốc (PDF) lưu trữ 2 tháng 5 2012. Truy cập 25 tháng 4 2012.
- ^ "MLIR". mlir.llvm.org. Truy cập ngày 7 tháng 6 năm 2022.
- ^ "Phương ngữ - MLIR". mlir.llvm.org. Truy cập ngày 7 tháng 6 năm 2022.
- ^ Stellard, Tom (ngày 26 tháng 3 năm 2012). "[LLVMdev] RFC: R600, một hệ thống phụ trợ mới cho GPU AMD". llvm-dev (Danh sách thư).
- ^ "Hướng dẫn sử dụng cho Backend AMDGPU — Tài liệu LLVM 15.0.0git".
- ^ Ghi chú triển khai dành riêng cho mục tiêu: Ma trận tính năng mục tiêu // Trình tạo mã độc lập mục tiêu LLVM, trang web LLVM.
- ^ "Gỡ bỏ phần phụ trợ mblaze khỏi LLVM". GitHub. ngày 25 tháng 7 năm 2013. Truy cập ngày 26 tháng 1 năm 2020.
- ^ "Gỡ bỏ phần phụ trợ Alpha". GitHub. ngày 27 tháng 10 năm 2011. Truy cập ngày 26 tháng 1 năm 2020.
- ^ "'Nios2' Gỡ bỏ phần phụ trợ Nios2". GitHub. ngày 15 tháng 1 năm 2019. Truy cập ngày 26 tháng 1 năm 2020.
- ^ "lld - Trình liên kết LLVM". The LLVM Project. Truy cập ngày 10 tháng 5 năm 2017.
- ^ "Cổng WebAssembly lld".
- ^ "42446 – lld không thể xử lý các tệp LTO của gcc". bugs.llvm.org.
- ^ "Thư viện chuẩn C++ "libc++"".
- ^ "Polly - Tối ưu hóa đa diện cho LLVM".
- ^ "llvm-libc: Thư viện chuẩn tuân thủ tiêu chuẩn ISO C — Tài liệu libc 15.0.0git". libc.llvm.org. Truy cập ngày 18 tháng 7 năm 2022.
- ^ "Phần mở rộng ngôn ngữ Clang". Clang 12 documentation.
Lưu ý rằng không nên sử dụng số phiên bản tiếp thị để kiểm tra các tính năng ngôn ngữ, vì các nhà cung cấp khác nhau sử dụng các hệ thống đánh số khác nhau. Thay vào đó, hãy sử dụng Macro Kiểm Tra Tính Năng.
- ^ "apple/llvm-project". Apple. ngày 5 tháng 9 năm 2020.
- ^ "Các trình biên dịch C/C++ và Fortran của IBM sẽ áp dụng cơ sở hạ tầng mã nguồn mở LLVM". ngày 29 tháng 7 năm 2022.
- ^ "Các trình biên dịch C/C++ của Intel đã hoàn tất việc áp dụng LLVM". Intel (bằng tiếng Anh). Truy cập ngày 17 tháng 8 năm 2021.
- ^ "lanl/kitsune". Los Alamos National Laboratory. ngày 27 tháng 2 năm 2020.
- ^ "Thông số kỹ thuật NVVM IR 1.5".
The current NVVM IR is based on LLVM 5.0
- ^ Bộ công cụ phát triển cho PS4 (PDF), truy cập ngày 24 tháng 2 năm 2015
Đọc thêm
- Chris Lattner - Kiến trúc của các ứng dụng mã nguồn mở - Chương 11 LLVM , ISBN 978-1257638017, phát hành năm 2012 theo giấy phép CC BY 3.0 (Truy cập mở).[1]
- LLVM: Một khung biên dịch cho phân tích và chuyển đổi chương trình trọn đời , bài báo khoa học được công bố bởi Chris Lattner và Vikram Adve
Liên kết ngoài
- ^ Lattner, Chris (ngày 15 tháng 3 năm 2012). "Chương 11". Kiến trúc của các ứng dụng mã nguồn mở. Amy Brown, Greg Wilson. ISBN 978-1257638017.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.