2013-04-05 49 views
5

Các LLVM Language Reference bang mà nó có thể được sử dụngNgôn ngữ lắp ráp LLVM ổn định như thế nào?

như một đại diện bitcode trên đĩa (thích hợp cho tải nhanh bằng một trình biên dịch Just-In-Time)

Làm thế nào ổn định là đại diện này? Ví dụ, tôi có thể tạo ra nó ngày hôm nay bằng cách sử dụng LLVM 3.1 và vẫn hy vọng nó có thể sử dụng được bằng cách sử dụng một LLVM trong tương lai, nói một LLVM 4.5 giả định trong ba năm?

Giả sử tôi không có phụ thuộc bên ngoài, tôi có thể sử dụng nó để tạo nhị phân cho một kiến ​​trúc khác không?

+0

đoán tốt nhất của tôi là "hoàn toàn tương thích ngược" –

+2

Bạn thực sự có hai câu hỏi ở đây: cho dù đó là ổn định giữa các phiên bản, và cho dù đó là nền tảng độc lập. [Câu hỏi thứ hai đã được yêu cầu (và trả lời) ở đây] (http://stackoverflow.com/questions/14258194/llvm-bitcode-cross-platform). – Oak

+0

@Oak Cảm ơn con trỏ. – Tobias

Trả lời

7

Trả lời câu hỏi đầu tiên của bạn: Không. Không ổn định. Không, bạn không thể mong đợi rằng IR/bitcode được tạo ra bởi 3.1 sẽ có thể đọc được trong 4.5 - dự án LLVM rõ ràng không đảm bảo, hy sinh khả năng tương thích ngược với khả năng di chuyển nhanh hơn, tạo tối ưu hóa tốt hơn và các công cụ, và refactor các phần của khung khi cần thiết. LLVM chủ yếu nhắm vào các trình biên dịch tĩnh, trước thời gian (AOT), vì vậy cách tiếp cận này có ý nghĩa đối với những người chơi lớn.

Câu hỏi thứ hai tôi thực sự không hiểu. LLVM có các mục tiêu (backends) cho nhiều kiến ​​trúc và hoạt động tốt cho hầu hết các kiến ​​trúc phổ biến. Nhưng một lần nữa, đầu vào của họ là IR có thể thay đổi giữa các bản phát hành. Ngoài ra hãy chắc chắn để đọc điều này: http://llvm.org/docs/FAQ.html#can-i-compile-c-or-c-code-to-platform-independent-llvm-bitcode và cũng là phần "Phụ thuộc mục tiêu" tại đây: https://llvm.org/docs/tutorial/LangImpl10.html

Vấn đề là khi hỏi về nền tảng LLVM độc lập mà nhiều người hỏi "LLVM IR được biên dịch từ mã C của tôi có được nhắm mục tiêu độc lập không? ". Câu trả lời cho điều này là Không, bởi vì chính C là mục tiêu phụ thuộc.

+0

Liên kết thứ hai của bạn hiện đã bị hỏng. – Culex

+0

@Culex: cố định, cảm ơn –

3

Trả lời câu hỏi đầu tiên của bạn: đây là trích dẫn từ Chính sách dành cho nhà phát triển LLVM.

Khi định dạng IR phải được thay đổi, hãy nhớ rằng chúng tôi cố gắng duy trì tính tương thích ngược. Các quy tắc được dự định là sự cân bằng giữa sự thuận tiện cho người dùng llvm và không áp đặt gánh nặng lớn cho nhà phát triển llvm:

  • Định dạng văn bản không tương thích ngược. Chúng tôi không thay đổi nó thường xuyên, nhưng không có lời hứa cụ thể.
  • Định dạng bitcode được tạo bởi bản phát hành X.Y sẽ có thể đọc được bởi tất cả các bản phát hành X.Z sau và bản phát hành (X + 1) .0.
  • Phiên bản mới hơn có thể bỏ qua các tính năng từ bản phát hành cũ hơn, nhưng chúng không thể làm sai lệch chúng. Ví dụ, nếu nsw được thay thế bằng một cái gì đó khác, thả nó sẽ là một cách hợp lệ để nâng cấp IR.
  • Siêu dữ liệu gỡ lỗi đặc biệt ở chỗ nó hiện bị bỏ trong khi nâng cấp.
  • Siêu dữ liệu không gỡ lỗi được xác định là an toàn để thả, vì vậy, cách hợp lệ để nâng cấp siêu dữ liệu là thả nó. Đó không phải là rất thân thiện với người dùng và một chút nỗ lực hơn dự kiến, nhưng không có lời hứa được thực hiện.
Các vấn đề liên quan