Определение и особенности языков программирования

Существующие в настоящее время языка программирования подразделяют на три больших класса: машинно-ориентированные, процедурно-ориентированные и проблемно-ориентированные. В машинно-ориентированных языков программирования относятся языки, в которых, с одной стороны, явно выраженный связь с конкретной ЭВМ (структура команд, памяти, внешних устройств и т.п.), а с другой - в язык введены элементы, упрощающие и автоматизируют процесс программирования (символьное обозначение команд и ячеек памяти, широкое использование привычных для человека обозначений и т.п.). Машинно-ориентированные языки программирования позволяют писать программы, не уступающие по эффективности программам, написанным непосредственно в кодах машины, но в значительной степени облегчают работу по их отладки. Как правило, машинно-ориентированные языки программирования предназначены для системных программистов, работающих на обслуживании ЭВМ и построении математического обеспечения для них. В зависимости от степени связи человека с ЭВМ, машинно-ориентированные языки программирования делятся на:

 

- Машинные языки программирования,

 

- Автокод (языки символьного кодирования, или ассемблерного языка)

 

- Машинно-независимые языки программирования.

 

Отличительной особенностью машинных языков является цифровое кодирование команд (в некоторой системе счисления) и, следовательно, отсутствие расхождения между внутренним представлением операторов (команд), с помощью которых в этих языках описываются программы и форме представления данных. Последнее является залогом возможности реализации на ЭВМ таких программ, в результате работы формируют другие программы (трансляторы, генераторы программ и т.д.) или превращают в процессе выполнения самих себя. Языки программирования более высоких уровней этой особенностью машинных языков не имеют и только в новейших языках появляются некоторые ограниченные возможности влияния на программы в процессе их реализации (например, в языке АЛГОЛ-68).

 

Уже реализация простейших алгоритмов на первых ЭВМ (циклических и процессов, разветвляются, и подпрограмм) приводила к необходимости преобразования команд в процессе их выполнения (до так называемых команд модификации). Анализ программ позволил предъявить к структур ЭВМ определенные требования с целью упрощения выполнения программ за счет совершенствования внутренних языков ЭВМ. Так, наличие в системе команд ЭВМ операций по адресам 2-го ранга (косвенной адресации) позволяет реализовать любую программу без модификации ее записи при выполнении (следовательно, дает возможность размещать программы в одностороннем памяти), сделать так, чтобы запись любой какой-либо программы не зависел от ее размещения в памяти ЭВМ, от размеров обрабатываемых массивов, места размещения данных и т.д..

 

Поэтому уже с конца 60-х гг во внутренние языка включаются те или иные эквиваленты косвенной адресации (индекс-регистры и указатели, адреса высших рангов). Названные особенности машинных языков вошли в языки программирования более высоких уровней. Вместе с тем уже машинным языкам присущи наиболее характерные черты всех языков программирования фразовой структуры: команды языка состоят из символов, обозначающих ссылки на должную для выполнения операции и на данные, над которыми она должна быть выполнена, или на команду, которая должна быть выполнена после данной, или устройство, должен быть подключен для работы.

 

Описание процессов автоматической обработки данных внутренними языками ЭВМ спряжений со значительными трудностями, вызванными малой наглядностью этих языков и наличием специфических особенностей, налагаемых конкретной технической реализацией. Исключение составляют внутренние языки машин с высоким уровнем интерпретации, то есть машин, внутренние языки которых являются языками процедурно-ориентированными (например, языка машин "МИР-1", "МИР-2"), Однако машинные языки находят применение (как правило, с помощью символьного кодирования) при подготовке системного программного обеспечения ЭВМ. Задача формального описания машинных языков связана с проблемой точного описания возможностей реальных машин, находящихся в развитии, (устройств ввода - вывода данных, систем прерывания ЭВМ, работы в реальном масштабе времени и т.д.) до сих пор не может считаться решенной.

 

Автокод (или языки друг к другу 1:1) предназначены для замены двоичных кодов операций и адрес команд их символьными обозначениями, а в более развитых языках (макроязык или Автокод 1: n)-для расширения набора элементарных операций ЭВМ некоторыми макрокомандами, реализующих выполнения определенных подпрограмм. Использование последних стало первым реальным шагом на пути автоматизации программирования и послужило основой для создания языков программирования, расширяются. В языках этого уровня запись арифметических и других выражений или расщепляется на цепочку более элементарных записей, или подается в специальных языках, более близких к естественной (различные варианты записи бездужкових выражений и т.п.).

 

Языка символьного кодирования нашли применение еще в машинах 1-го поколения, что позволило упростить процесс программирования за счет автоматизации распределения памяти, учета ее ступеней и т.д. Применение универсальных средств описания процессов обработки данных, предоставленных языками программирования более высоких уровней, может приводить к менее эффективному использования оборудования и к потере скорости выполнения программ. Языка символьного кодирования являются базовыми в операционных системах и используются как языка сборки, поэтому их также называют ассемблерных языков, или языков сборки. Поскольку эти языки, как правило, охватывают все возможности машинных языков, они находят применение в машинах следующих поколений при создании системного программного обеспечения - программ, от которых требуется наиболее высокая эффективность.