Có và không. Có, kịch bản cổ điển là nhà phát triển sử dụng trình biên dịch để tạo mã máy từ mã nguồn và mã máy sau đó được phân phối cho người dùng.
Có được một vài ngoại lệ đối với mặc dù điều này. Đầu tiên, nhiều dự án nguồn mở được phân phối chủ yếu (hoặc thậm chí độc quyền) ở dạng mã nguồn và mong muốn người dùng cuối sẽ cài đặt chúng bằng cách nhập một vài lệnh như make
sau đómake intall
. Điều này sẽ gọi trình biên dịch, trình liên kết, v.v., để tạo mã máy từ mã nguồn cho máy tính của người dùng đó. Tuy nhiên, trong những trường hợp này, quá trình xây dựng và cài đặt (ít nhất là dự định) sẽ tự động đến mức người dùng hiếm khi cần nhiều kiến thức về nó ngoài thực tế là nếu họ chưa bao giờ cài đặt gói chỉ mã nguồn trước đây , người quản lý gói của họ thường liệt kê một số gói "phát triển" là điều kiện tiên quyết để cài đặt ứng dụng mà họ thực sự quan tâm (mặc dù một số người vẫn xem đây là không thân thiện với người dùng cuối).
Một ngoại lệ khác (đã được ám chỉ, nhưng không được giải thích rõ ràng trong các câu trả lời khác mà tôi đã thấy) là các trình biên dịch (JIT) đúng lúc. Một vài ví dụ rõ ràng về trình biên dịch JIT là Microsoft Common Language Runtime (CLR) và Máy ảo Java (JVM). Trong những trường hợp này, thông thường có hai trình biên dịch hoàn toàn riêng biệt liên quan đến việc dịch mã nguồn thành mã máy. Một được sử dụng bởi các nhà phát triển. Tuy nhiên, thay vì tạo mã máy trực tiếp, nó tạo mã byte độc lập với máy. CLR / JVM sau đó bao gồm một trình biên dịch thứ hai , tách biệt hoàn toàn với trình biên dịch thứ nhất, chuyển đổi các mã byte đó thành mã máy cho máy tính đích.
Tôi nên thêm rằng trình biên dịch thứ hai không thực sự cần thiết. Các phiên bản ban đầu của JVM (ví dụ) chỉ giải thích mã byte thay vì biên dịch chúng. Điều này thường mang một hình phạt hiệu năng khá nghiêm trọng, do đó, hầu hết các JVM gần đây dành cho sử dụng sản xuất bao gồm một trình biên dịch JIT.