2013-01-22 30 views
13

Sử dụng C, trong thời gian chạy, tôi có thể:Có thể tạo và thực thi mã Rust khi chạy không?

  1. Tạo mã nguồn của một hàm,
  2. Gọi ra gcc để biên dịch nó vào một .so (Linux) (hoặc sử dụng llvm, vv) ,
  3. Tải .so và
  4. Gọi hàm.

Điều tương tự cũng có thể xảy ra trong Rust?

Đặc biệt tôi muốn sử dụng các loại dữ liệu đại số, do đó, sử dụng một tập con C của các tính năng của Rust là không đủ.

Trả lời

14

Chưa, chính thức, mặc dù ít nhất cũng có thể không có quá nhiều hack. Trở ngại lớn nhất là các thư viện không có khả năng tải động nào. Đây là một chiến lược tiềm năng để làm cho nó hoạt động (trên nhánh của Rust).

  • Liên kết với thùng rác để điều khiển trình biên dịch theo chương trình. Lưu ý rằng trình biên dịch không phải là luồng an toàn nên chỉ chạy một bản dựng trong quá trình tại một thời điểm.
  • Đánh dấu chức năng bạn muốn gọi với #[no_mangle]. Điều này nên (tôi đã không thử nó) sản xuất một tên biểu tượng unmangled vì vậy nó dễ dàng để tìm thấy.
  • Tạo các ràng buộc tối thiểu để dlopen/dlsym
  • Tìm con trỏ hàm và chuyển đổi không đúng cách thành loại đóng Rust (hiện được xác định trong sys::Closure).
  • Gọi đóng.

Rust cũng có JIT được kiểm tra tối thiểu có thể được sử dụng cho loại điều này nhưng có một số lỗi chính.

+4

Câu trả lời này khá cũ. Tình hình đã thay đổi bao nhiêu trong thời gian đó? – xophos

Các vấn đề liên quan