[Xem lịch sử chỉnh sửa cho một câu trả lời hoàn toàn khác về cơ bản đã lỗi thời.]
Có, có một vài trình biên dịch JIT cho C và / hoặc C ++.
CLing (như bạn có thể đoán từ trò chơi) dựa trên Clang / LLVM. Nó hoạt động như một thông dịch viên. Đó là, bạn cung cấp cho nó một số mã nguồn, ra lệnh cho nó chạy và nó chạy. Sự nhấn mạnh ở đây chủ yếu là sự tiện lợi và biên dịch nhanh, không tối ưu hóa tối đa. Như vậy, mặc dù về mặt kỹ thuật là một câu trả lời cho chính câu hỏi, điều này thực sự không phù hợp với ý định của OP.
Một khả năng khác là NativeJIT . Điều này phù hợp với câu hỏi hơi khác nhau. Cụ thể, nó không chấp nhận mã nguồn C hoặc C ++, và biên dịch nó và thực thi nó. Thay vào đó, nó là một trình biên dịch nhỏ mà bạn có thể biên dịch vào chương trình C ++ của mình. Nó chấp nhận một biểu thức về cơ bản được biểu thị dưới dạng EDSL bên trong chương trình C ++ của bạn và tạo mã máy thực tế từ đó, sau đó bạn có thể thực thi. Điều này phù hợp hơn nhiều với một khung công tác nơi bạn có thể biên dịch hầu hết chương trình của mình với một trình biên dịch bình thường, nhưng có một vài biểu thức mà bạn sẽ không biết cho đến thời gian chạy, mà bạn muốn thực hiện với một cái gì đó đạt tốc độ thực thi tối ưu.
Đối với mục đích rõ ràng của câu hỏi ban đầu, tôi nghĩ rằng điểm cơ bản của câu trả lời ban đầu của tôi vẫn tồn tại: trong khi trình biên dịch JIT có thể thích ứng với những thứ như dữ liệu thay đổi từ lần thực hiện này sang lần thực hiện tiếp theo hoặc thậm chí thay đổi linh hoạt trong một lần thực hiện, thực tế là điều này tạo ra sự khác biệt tương đối ít nhất là một quy tắc chung. Trong hầu hết các trường hợp, chạy trình biên dịch trong thời gian chạy có nghĩa là bạn cần phải từ bỏ khá nhiều tối ưu hóa, vì vậy, điều tốt nhất bạn thường hy vọng là nó sẽ nhanh như trình biên dịch thông thường sẽ tạo ra.
Mặc dù có thể đưa ra các tình huống trong đó thông tin có sẵn cho trình biên dịch JIT có thể cho phép nó tạo mã tốt hơn đáng kể so với trình biên dịch thông thường, nhưng các trường hợp này xảy ra trong thực tế dường như khá bất thường (và trong hầu hết các trường hợp tôi đã có thể xác minh Nó xảy ra, nó thực sự là do một vấn đề trong mã nguồn, không phải với mô hình biên dịch tĩnh).