Поколения языков программирования


К первому поколению (англ. first-generation programming language, 1GL) относят машинные языки — языки программирования на уровне команд процессора конкретной машины. Для программирования не использовался транслятор, команды программы вводились непосредственно в машинном коде переключателями на передней панели машины. Такие языки были хороши для детального понимания функционирования конкретной машины, но сложны для изучения и решения прикладных задач.

Языки второго поколения (2GL) создавались для того, чтобы облегчить тяжёлую работу по программированию, перейдя от машинного кода ближе к более удобным мнемоническим обозначениям команд. Под языками второго поколения понимались ассемблеры (автокоды). Они, тем не менее, остались языками низкого уровня, т.е. языками, зависящими напрямую от системы команд и способов адресации ячеек памяти конкретной модели ЭВМ.

Под третьим поколением (3GL) понимают языки высокого уровня (ЯВУ), дающие более высокий уровень абстракции, чем ассемблер. Эти языки появились в 1950-е годы, в частности, такие языки как Фортран и Лисп. Некоторой проблемой, с которыми столкнулись разработчики языков второго поколения, стала задача убедить клиентов в том, что созданный компилятором код достаточно хорош, чтобы оправдать отказ от программирования на ассемблере. Скептицизм по поводу возможности создания эффективных программ с помощью компиляторов ЯВУ был довольно распространён, поэтому разработчикам таких систем должны были продемонстрировать, что они действительно могут генерировать почти такой же эффективный код, как и при ручном кодировании, причём практически для любой исходной задачи.

Одной из важнейших отличительных черт языков третьего поколения стала независимость от аппаратного обеспечения, то есть выражение алгоритма в форме, не зависящей от конкретных особенностей машины, на которой он будет исполняться, что позволило переносить программы с одной ЭВМ на другую. При этом производительность труда программистов значительно возросла, а число ошибок сократилось за счет того, что например, в Фортране (ФОРмул ТРАНслятор) стало возможно писать, подобно алгебраической записи, например, "A = X + B" вместо использования мнемонического обозначения машинной команды, такого как "ADD".Исходный текст программы, написанный на языке третьего поколения, перед исполнением транслируется либо непосредственно в машинные команды, либо в текст на ассемблере, и затем уже ассемблируется. При компиляции, в отличие от предыдущих поколений, уже нет соответствия один-к-одному между инструкциями программы и генерируемым кодом.

Стала широко использоваться интерпретация программ — при этом инструкции программы не преобразуются в машинный код, а исполняются непосредственно одна за другой. Независимость от «железа» достигается за счёт использования интерпретатора - виртуальной машины времени исполнения, скомпилированного под конкретную аппаратную платформу.