Когда я узнал о программировании, где-то во второй половине прошлого века я понял, что все должно быть преобразовано в машинный код. Языки сценариев просто решают, какой код вызывать, основываясь на сценарии кода. Скомпилированный код сначала должен быть скомпилирован в p-код, который обозначает предварительно скомпилированный код, который необходимо связать с другим предварительно скомпилированным кодом для создания полного приложения. Тогда мне нравился Turbo Pascal, просто потому, что Turbo Pascal компилировался непосредственно в код machione, и он не использовал промежуточный p-код между ними. То есть до Turbo Pascal 4.0, который создавал * .tpu скомпилированные модули. Вместо этого большинство других компиляторов будут компилироваться в формат .obj.
Когда была создана Java, что-то относительно новое начало становиться популярным. По сути, компилятор Java просто компилирует код в некоторый двоичный файл сценария. Этот сценарий затем можно было бы интерпретировать, хотя вскоре этот механизм тоже изменился.
В настоящее время переводчики почти вымерли. Большинство скриптовых языков сначала компилируются в машинный код, машинный код затем сохраняется в некотором кеше, и, таким образом, он может выполняться очень быстро, без необходимости повторной интерпретации системой каких-либо повторяющихся инструкций. Это хорошо работает для текстовых и бинарных скриптов. PHP будет примером текстового скрипта. Java и .NET являются двоичными сценариями, так как вы обычно компилируете код в этот двоичный формат сценариев. (Они назовут это по-другому, но я думаю, что бинарные скрипты звучат лучше.)
В общем, хитрость заключается в том, чтобы преобразовать код в машинный код, используя любые возможные средства. Было много способов сделать это, и немного сложно объяснить все это.
Я также помню время, когда я мог написать приложение на C ++, где операторы SQL находились бы внутри самого кода. Это также было очень практично, но для этого требовался препроцессор, который сначала анализировал бы операторы SQL из кода, чтобы преобразовать его в другие операторы C ++ и заменяя операторы SQL этими более сложными командами C ++. Тогда все это будет скомпилировано в p-код. Затем вам нужно будет связать его с дополнительными библиотеками SQL, и, наконец, у вас будет исполняемый файл.