Языки программирования (а точнее их реализации) условно разделяются на группу компиляторов и группу интерпретаторов. Таким способом подчеркивается характер порождаемых кодов, которые получаются в результате процесса трансляции. Если исходный текст языка сначала проверяется и транслируется целиком, а затем порождаемые коды являются в основном кодами машинного языка, то такой исходный язык является компилятором. Если строка исходного языка исполняется сразу после ввода, то такой язык зов©тся интерпретатором. Оба типа имеют свои преимущества в определ©нных ситуациях. Так компиляторы, обычно, дают более эффективные по времени выполнения программы. Однако, стоимость компилятора и сопутствующих программ высока, а затраты на приготовление сложной программы (компиляция, сборка), которая часто меняется, оказываются неприемлемыми. Интерпретаторы удобны тем, что строки языка исполняются сразу. Tаким образом, сразу видны недочеты или ошибки при написании программы. Кроме того, во многих случаях неважно, будет программа выполнена за 1 секунду или за 0.0001 секунды, например, программа диалога с оператором.
Естественно, что между этими типами имеется масса переходов и промежуточных вариантов. Примерами компиляторов являются C, fortran, другие процедурно ориентированные языки. Примерами интерпретаторов являются APL (на машинах IBM), ИНФ (на машинах типа Днепр), REXX (IBM 370), bash, tcsh, perl, phython, Java.
Со временем языки программирования стали все более склонны к интерпретации. Это заметно упрощает транслятор (что в свою очередь, уменьшает вероятность ошибок), увеличивает возможности переноса языка на машины с другой архитектурой, сокращает весь цикл приготовления программы: от разработки до получения программного продукта.