LLVM mức thấp là gì?


12

Bằng cách nào (s) là LLVM (Low Cấp Virtual Machine) Low Cấp bậc? (Tại thời điểm viết bài, tôi không tìm thấy bản mở rộng "LLVM" này trên trang web của mình, nhưng trên Wikipedia .)

Nó được gọi là "Mức thấp" trong những gì nó được thiết kế cho (cơ sở hạ tầng trình biên dịch) hoặc bởi vì nó hoạt động ở "mức thấp hơn" so với các công cụ khác?

Như một (loại) "minh họa" về điều này, là LLVM cấp thấp hơn JVMCLR , hay nó chỉ được thiết kế cho việc sử dụng "cấp thấp hơn"?

Câu trả lời:


16

LLVM ở mức thấp hơn các VM thông thường như JVM và CLR. Ví dụ, trong khi nó có các móc cho trình thu gom rác, nó không tự cung cấp trình thu gom rác.

Tương tự, JVM có trình biên dịch JIT tích hợp (ngoại trừ trong các phiên bản thực sự cổ xưa). LLVM có một số trình biên dịch JIT cho LLVM IR, nhưng vẫn tùy thuộc vào nhà phát triển để kết nối mọi thứ lại với nhau và thực sự JIT mã.

Khi JVM gặp một bên ngoài chưa được giải quyết, nó đi ra ngoài và tìm đúng lớp để thỏa mãn nó và biết cách tìm kiếm các tệp. Class trực tiếp trong hệ thống tệp và trong các tệp .jar 1 . Trình biên dịch JIT của LLVM có các móc nối nơi bạn có thể quyết định cách xử lý những thứ như thế. Như bạn mong đợi, một số người đã viết một số phiên bản mặc định, do đó, nó có thể thực hiện mọi thứ theo cùng một thứ tự như JVM có thể - nhưng bạn cũng có thể bỏ qua những phiên bản đó và làm những điều khác biệt nếu bạn chọn.

Nói một cách đơn giản, nếu bạn đang phát triển một trình biên dịch (hoặc một cái gì đó theo thứ tự đó), nó có rất nhiều công cụ để làm cho cuộc sống của bạn dễ dàng. Thay vì lo lắng nhiều về tối ưu hóa, bạn có thể thực hiện bản dịch đơn giản nhất mà bạn có thể quản lý từ mã nguồn của mình sang LLVM IR, sau đó sử dụng các thư viện LLVM để quản lý tối ưu hóa, JITing, liên kết, v.v. Tuy nhiên, chúng là các thư viện - nó cung cấp một số chức năng thực sự hữu ích để bạn không phải xử lý tất cả các chi tiết, nhưng chúng vẫn là các chức năng và bạn vẫn đang viết mã để gọi chúng. Đây không phải là sản phẩm hoàn chỉnh, chỉ là công cụ hữu ích để xây dựng sản phẩm tương đối nhanh chóng và dễ dàng.


1 Về mặt kỹ thuật, không phải tất cả những điều này được xây dựng vào JVM thích hợp. Nó chỉ định cái thường được gọi là trình nạp lớp nguyên thủy như là một phần của JVM thích hợp, và sau đó có các trình nạp lớp người dùng được chỉ định trong java.util.ClassLoader xử lý các thứ khác. Một số trình nạp lớp được bao gồm theo mặc định và nếu bạn muốn đủ tệ, bạn có thể bổ sung chúng bằng cách định nghĩa riêng của bạn.


12

Nó là ở mức thấp vì nó được thiết kế để các máy ảo hiện tại hoặc tương lai (JVM) có thể sử dụng nó làm cốt lõi cho việc triển khai của chúng.

Xem nó theo cách này: Các máy ảo của Java và Python rất dễ mang theo vì chúng được viết bằng C tiêu chuẩn và phụ thuộc rất nhiều vào các thư viện của riêng chúng. Mục đích của LLVM là cung cấp một cơ sở hạ tầng để dễ dàng chuyển bất kỳ máy ảo nào sang một nền tảng đã hỗ trợ LLVM.

LLVM đang cung cấp hỗ trợ cho việc biên dịch tĩnh và JIT và được thiết kế theo cách mà nó có thể chạy trong không gian hệ điều hành đáng tin cậy. Điều đó có nghĩa là, về mặt lý thuyết, chạy một máy ảo trên LLVM có nghĩa là ít công việc hơn và tạo ra thứ gì đó nhanh và hiệu quả hơn nhiều. Về lý thuyết.

Sau đó, LLVM, ở mức thấp hơn, sẽ dễ dàng chuyển sang các kiến ​​trúc hệ điều hành và phần cứng khác nhau.

Có những khoản tiết kiệm lớn cần có nếu những người thực hiện ngôn ngữ có thể viết lên một nền tảng cấp thấp đơn giản, dễ cổng. Các máy ảo được biết đến nhiều nhất nằm giữa ngôn ngữ mà chúng phục vụ và hệ điều hành và chúng phải thực hiện các biểu diễn trung gian của riêng mình và JITC.


5

Phần "mức thấp" của tên LLVM đề cập đến mức của tập lệnh ảo được sử dụng. Ngôn ngữ trung gian (IR) mà LLVM sử dụng gần với mức mã máy mặc dù nó là kiến ​​trúc bất khả tri và nói chung.

Mặt khác, mã byte của JVM và CLR ở mức khá cao ở chỗ nó có các hướng dẫn nằm trên một lớp trừu tượng cao hơn. Chúng đều là các ngôn ngữ lắp ráp dựa trên ngăn xếp hướng đối tượng. Ví dụ, JVM có lệnh invokevirtual, đây là một lệnh phải biết về mô hình đối tượng cụ thể của ngôn ngữ Java.


3

Nó chắc chắn là mức thấp hơn bất kỳ máy ảo cụ thể ngôn ngữ và máy ảo hợp nhất nào như JVM và CLR. Thiết kế của nó gần với đại diện trung gian cấp thấp trong GCC (GIMPLE) và các trình biên dịch tương tự. Không có GC mặc định, không có hệ thống loại mức cao cụ thể nào được thi hành, không có sự liên kết nào được giả định (nó phải được chỉ định rõ ràng), các kiểu dữ liệu số nguyên và dấu phẩy động rõ ràng (và phụ thuộc vào nền tảng) và mức thấp nhất trong tất cả - a mỹ phẩm con trỏ tốt có sẵn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.