Да и нет. Да, классический сценарий - это разработчик, использующий компилятор для генерации машинного кода из исходного кода, и машинный код затем распространяется среди пользователей.
Там являются несколько исключений из этого , хотя. Во-первых, многие проекты с открытым исходным кодом распространяются в основном (или даже исключительно) в форме исходного кода, и ожидают, что конечный пользователь установит их, введя пару команд, таких как make
и затемmake intall
, Это вызовет компилятор, компоновщик и т. Д., Чтобы сгенерировать машинный код из исходного кода для этого компьютера пользователя. В этих случаях, однако, процесс сборки и установки (по крайней мере, предполагается) автоматизирован до такой степени, что пользователю редко требуется много знаний об этом, за исключением того факта, что, если они никогда ранее не устанавливали пакет только с исходным кодом, ранее их менеджер пакетов, как правило, перечисляет некоторый пакет «разработки» в качестве предварительного условия для установки приложения, которое им действительно нужно (хотя некоторые все еще считают это недружественным для конечных пользователей).
Другое исключение (на которое ссылались, но которое не очень хорошо объяснено в других ответах, которые я видел) - это JIT-компиляторы. Несколько очевидных примеров JIT-компиляторов - Microsoft Common Language Runtime (CLR) и виртуальная машина Java (JVM). В этих случаях обычно есть два совершенно отдельных компилятора, вовлеченных в перевод исходного кода в машинный код. Один используется разработчиком. Однако вместо того, чтобы генерировать машинный код напрямую, он генерирует машинно-независимый байт-код. Затем CLR / JVM включает второй компилятор, совершенно отдельный от первого, который преобразует эти байтовые коды в машинный код для целевого компьютера.
Я должен добавить, что второй компилятор не является строго необходимым. Ранние версии JVM (для одного примера) просто интерпретировали байтовые коды, а не компилировали их. Это часто несет в себе довольно серьезное снижение производительности, поэтому наиболее разумно недавние JVM, предназначенные для производственного использования, включают JIT-компилятор.