Tôi đang trong quá trình triển khai ứng dụng đa nền tảng (Mac OS X, Windows và Linux) sẽ thực hiện rất nhiều phân tích chuyên sâu về dữ liệu tài chính của CPU. Phần lớn công cụ phân tích sẽ được viết bằng C++ vì lý do tốc độ, với công cụ tạo tập lệnh có thể truy cập được với công cụ kiểm tra C++. Tôi muốn viết một số front-end kịch bản theo thời gian để mô phỏng các phần mềm phổ biến khác với các cơ sở người dùng lớn hiện có. Mặt trước đầu tiên sẽ là một ngôn ngữ kịch bản giống như VisualBasic.Liên kết LLVM JIT Mã với Thư viện LLVM tĩnh?
Tôi nghĩ rằng LLVM sẽ là hoàn hảo cho nhu cầu của tôi. Hiệu suất là rất quan trọng vì số lượng tuyệt đối của dữ liệu; có thể mất hàng giờ hoặc vài ngày để chạy một lần chạy thử nghiệm để nhận được câu trả lời. Tôi tin rằng việc sử dụng LLVM cũng sẽ cho phép tôi sử dụng một giải pháp back-end duy nhất trong khi tôi triển khai các giao diện người dùng khác nhau cho các hương vị khác nhau của ngôn ngữ kịch bản theo thời gian.
Bản thân động cơ thử nghiệm sẽ được tách khỏi giao diện và kiểm tra thậm chí sẽ diễn ra trong một quy trình riêng biệt với tiến độ và kết quả được báo cáo cho giao diện quản lý thử nghiệm. Các thử nghiệm sẽ bao gồm mã kịch bản được tích hợp với mã công cụ thử nghiệm.
Trong lần triển khai trước đó của hệ thống kiểm tra thương mại tương tự tôi đã viết, tôi đã xây dựng một trình thông dịch nhanh dễ dàng giao tiếp với thư viện thử nghiệm vì nó được viết bằng C++ và được liên kết trực tiếp với thư viện công cụ kiểm tra. Gọi lại từ mã kịch bản để kiểm tra các đối tượng thư viện liên quan đến việc dịch giữa các định dạng với chi phí đáng kể.
Tôi tưởng tượng rằng với LLVM, tôi có thể thực hiện cuộc gọi lại thành C++ trực tiếp để tôi có thể làm cho mã script hoạt động gần như thể nó được viết bằng C++. Tương tự như vậy, nếu tất cả các mã được biên dịch sang định dạng mã byte LLVM, có vẻ như các trình tối ưu hóa LLVM có thể tối ưu hóa trên các ranh giới giữa ngôn ngữ kịch bản và mã công cụ thử nghiệm được viết bằng C++.
Tôi không muốn phải biên dịch công cụ kiểm tra mỗi lần. Lý tưởng nhất, tôi muốn JIT chỉ biên dịch mã kịch bản. Đối với các thử nghiệm nhỏ, tôi sẽ bỏ qua một số lần tối ưu hóa, trong khi đối với các thử nghiệm lớn, tôi sẽ thực hiện tối ưu hóa đầy đủ trong liên kết.
Vậy điều này có khả thi không? Tôi có thể biên dịch trước công cụ thử nghiệm thành một tệp đối tượng .o hoặc tệp thư viện .a và sau đó liên kết trong mã kịch bản bằng cách sử dụng JIT không?
Cuối cùng, lý tưởng, tôi muốn có mã kịch bản triển khai các phương thức cụ thể làm lớp con cho một lớp C++ cụ thể. Vì vậy, công cụ kiểm tra C++ sẽ chỉ thấy các đối tượng C++ trong khi mã thiết lập JIT đã biên dịch mã kịch bản đã triển khai một số phương thức cho các đối tượng. Có vẻ như nếu tôi sử dụng thuật toán mangling đúng tên thì sẽ dễ dàng thiết lập thế hệ LLVM cho ngôn ngữ kịch bản để trông giống như một cuộc gọi phương thức C++ mà sau đó có thể được liên kết với công cụ kiểm tra. Do đó, giai đoạn liên kết sẽ đi theo hai hướng, các cuộc gọi từ ngôn ngữ kịch bản vào các đối tượng thử nghiệm để lấy thông tin về giá và kiểm tra thông tin trạng thái và các cuộc gọi từ công cụ kiểm tra các phương pháp của một số đối tượng C++ cụ thể. không phải từ C++ mà từ ngôn ngữ kịch bản.
Nói tóm lại:
1) Tôi có thể liên kết trong biên dịch sẵn (hoặc, .o, hoặc .a) file .bc như một phần của JIT biên soạn, quá trình mã thế hệ?
2) Tôi có thể liên kết trong mã bằng cách sử dụng quy trình trong 1) ở trên theo cách mà tôi có thể tạo mã hoạt động như thể tất cả được viết bằng C++ không?
Cảm ơn sự giúp đỡ của bạn. Tôi sẽ kiểm tra điều đó. – inflector