По определению, язык сценариев означает, что не существует отдельной стадии компиляции. Для языка сценариев всегда требуется копия своего интерпретатора для запуска, пока компилируемый язык не нуждается в компиляторе для выполнения полученного двоичного файла. Например, в C мы сначала скомпилируем собственный исполняемый файл , затем запустим этот исполняемый файл. На языке сценариев мы загружаем сценарий в виде текстового файла, и он немедленно выполняется.
Как это делается, это еще один вопрос. Большинство языков сценариев начинают жизнь с чисто интерпретируемой реализации. Неизбежно полезные все приобретают реализацию, которая использует скорость компиляции Just In Time (JIT). Разница в том, что этот JIT выполняется во время запуска скрипта и никогда не создает отдельный вывод. Скрипты по-прежнему являются человекочитаемыми текстовыми файлами, для которых требуется запуск определенного интерпретатора.
Есть несколько интересных примеров языков «на границе». Haskell обычно скомпилирован в свободно стоящий двоичный файл, но может быть запущен как сценарий (по крайней мере, реализация GHC может это сделать.) Java компилируется в двоичный, но не автономный исполняемый файл. Для запуска файлов Java должна присутствовать среда выполнения Java.