Thay vì biên dịch mã nguồn cho HĐH tương ứng (mà nó được nhắm mục tiêu), bạn biên dịch một lần và chạy ở mọi nơi.
Vì câu hỏi này, tôi sẽ gọi nó là VM (ví dụ, cả Java và .NET). Vì vậy, việc thực hiện các chương trình này trở thành một cái gì đó như
------------ ---- ----
| Executable | -> | VM | -> | OS |
------------ ---- ----
Nó hoàn toàn có ý nghĩa, trình biên dịch vẫn chung cho VM tương ứng. Tuy nhiên, việc triển khai VM có thể khác nhau tùy thuộc vào máy sẽ được cài đặt tức là (* nix, windows, mac) x (32 bit, 64 bit).
Câu hỏi của tôi là, thay vì viết VM cho các máy tương ứng, tại sao trình biên dịch không được viết cho máy cụ thể đó? Bằng cách này, thay vì tải xuống VM tương ứng, bạn tải xuống trình biên dịch tương ứng và trình biên dịch đó sẽ chăm sóc mã máy + HĐH cho máy cụ thể đó. Kết quả cuối cùng, việc thực thi mã gốc cho bất kỳ máy nào. Chắc chắn, mỗi mã nguồn sẽ cần biên dịch cho máy cụ thể đó, nhưng bây giờ một ngày, các hệ thống tự động, bản dựng scm có thể giúp chúng ta làm điều này.
Liệu lý do của tôi bị nhầm lẫn là đúng hay tôi đang thiếu một số kỹ thuật ở đây?
Biên tập:
KHẢ NĂNG :
Vâng, đó là một lý do nhưng tính di động là một vấn đề lớn trong các hệ thống tự động ngày nay? Bao lâu thì chúng ta phải lo lắng về việc chúng ta không phải biên dịch nó cho các máy khác? Có một mã được biên dịch cho máy gốc sẽ cho hiệu năng tốt hơn nhiều. Lấy ví dụ Java, bạn không thể lập trình cấp thấp trên Windows và bạn phải chọn JNI.
Lấy các hệ thống tự động như TeamCity / Jenkins hoặc các hệ thống khác. Chúng tôi có thể có một thiết lập hệ thống tự động như vậy trong đó mã được gửi qua kiểm soát phiên bản sẽ dẫn đến việc thực thi.