Hầu hết các trình biên dịch đều có giao diện người dùng, một số mã/cấu trúc trung bình của một số loại và phần phụ trợ. Khi bạn dùng chương trình C của bạn và sử dụng clang và biên dịch sao cho bạn kết thúc với một chương trình không phải JIT x86 mà bạn có thể chạy, bạn vẫn đi từ giao diện đầu vào giữa đến phần cuối. Cùng đi với gcc, gcc đi từ giao diện người dùng đến phần giữa và phần phụ trợ. Điều Gccs ở giữa không mở rộng và có thể sử dụng giống như của LLVM.
Bây giờ một điều thú vị/thú vị về llvm, bạn không thể làm với những người khác, hoặc ít nhất là gcc, là bạn có thể lấy tất cả các mô-đun mã nguồn của bạn, biên dịch chúng thành bytecode llvms, kết hợp chúng thành một tập tin bytecode, sau đó tối ưu hóa toàn bộ điều, thay vì mỗi tập tin hoặc tối ưu hóa chức năng bạn nhận được với các trình biên dịch khác, với llvm bạn có thể nhận được bất kỳ mức độ nào để tối ưu hóa chương trình compilete bạn thích. sau đó bạn có thể lấy bytecode đó và sử dụng llc để xuất nó sang bộ thu mục tiêu. Tôi thường làm nhúng vì vậy tôi có mã khởi động riêng của tôi mà tôi quấn quanh đó nhưng về lý thuyết bạn sẽ có thể lấy tập tin đó và lắp ráp với biên dịch gcc và liên kết nó và chạy nó. gcc myfile.s -o myfile.Tôi tưởng tượng có một cách để có được các công cụ llvm để làm điều này và không phải sử dụng binutils hoặc gcc, nhưng tôi đã không dành thời gian.
Tôi thích llvm vì nó luôn luôn là một trình biên dịch chéo, không giống như gcc bạn không phải biên dịch một cái mới cho mỗi mục tiêu và đối phó với sắc thái cho mỗi mục tiêu. Tôi không biết rằng tôi có bất kỳ sử dụng cho điều JIT là những gì tôi đang nói tôi sử dụng nó như là một trình biên dịch chéo và như là một trình biên dịch bản địa.
Vì vậy, trường hợp đầu tiên của bạn là mặt trước, giữa, cuối và quá trình được ẩn khỏi bạn, bạn bắt đầu với nguồn và nhận được một nhị phân, thực hiện. Trường hợp thứ hai là nếu tôi hiểu ngay phía trước và giữa và dừng lại với một số tập tin đại diện cho giữa. Sau đó, giữa để kết thúc (bộ xử lý mục tiêu cụ thể) có thể xảy ra chỉ trong thời gian chạy. Sự khác biệt có phần phụ trợ, việc thực hiện thời gian thực của ngôn ngữ trung gian của trường hợp hai, có khả năng khác với phần phụ trợ của trường hợp một.
Nguồn
2010-08-20 00:44:00
Vì vậy, để sử dụng LLVM làm JIT bạn phải liên kết nó vào ứng dụng của bạn, phải không? Có ứng dụng nào làm điều đó không? – zaharpopov