поддержка
проекта:
разместите на своей странице нашу кнопку!И мы
разместим на нашей странице Вашу кнопку или ссылку. Заявку прислать на
e-mail
код нашей кнопки:
Языки программирования
В самом общем случае языком программирования можно назвать
фиксированную систему обозначений для описания алгоритмов и структур
данных. Такой язык имеет два "лица". Одно из них обращено к человеку,
использующему язык для записи своих программ, а другое адресовано ЭВМ,
которая должна понимать эти программы.
Язык большинства современных ЭВМ достаточно беден и состоит из
команд-приказов типа "выделить память определенного размера"; "выбрать
из определенного места в памяти информацию"; "запомнить информацию в
определенном месте памяти"; "сложить два числа"; "перейти к выполнению
очередной команды, выбрав ее из определенного места в памяти" и т. п.
Как правило,
команд - несколько сотен. Все они настолько просты, что могут быть
эффективно реализованы аппаратурой. Набор команд функционально полон, и,
в принципе, используя команды из этого набора (в программировании
говорят, пользуясь заданной системой команд), можно описать любой
алгоритм. Правда, такая запись для сложных задач будет настолько
громоздкой, что у человека очень мало шансов сделать ее безошибочной.
Существует лишь два выхода из этого положения. Первый из них связан с
созданием более сложных ЭВМ и, вследствие этого, с аппаратурой поддержки
более мощных языков. Об этом направлении говорится в статье "Машинный
интеллект".
Второй путь - программное моделирование более мощного входного языка.
Такой прием в программировании называют созданием виртуальной
вычислительной машины, состоящей частично из аппаратуры, а частично из
программного обеспечения. На практике обычно создается иерархия
виртуальных ЭВМ, где каждый следующий уровень позволяет программисту
использовать все более и более мощный входной язык. При этом, конечно,
требуются специальные программы-переводчики (трансляторы), функция
которых - преобразование программ на входном языке виртуальной машины в
эквивалентные программы, понимаемые аппаратурой ЭВМ. Такая трансляция
может быть одношаговой или многошаговой, в зависимости от числа уровней
в иерархии виртуальных ЭВМ.
Уже разработаны тысячи языков программирования, но лишь сотни из них
реализованы хотя бы для одной ЭВМ. Однако даже среди этих сотен языков
активно используются лишь несколько десятков.
Существуют различные классификации языков программирования. Одна из них
тесно связана с иерархией виртуальных ЭВМ. Согласно этой классификации,
все языки программирования делятся на языки низкого, высокого и
сверхвысокого уровней.
Группу языков программирования низкого уровня обычно "открывает" язык
микрокоманд. По существу этот язык уровнем ниже, чем машинный язык.
Каждая команда последнего описывается последовательностью микрокоманд.
Отдельные микрокоманды обычно задают простые передачи данных между
оперативной памятью и быстрыми регистрами, между самими регистрами и из
регистров через обрабатывающие элементы (например, сумматоры) в другие
регистры.
На основе этого простейшего набора микрокоманд пишутся специальные
микропрограммы, определяющие, с одной стороны, элементарные операции
ЭВМ, а с другой - управление выполнением программ из элементарных
операций. Совокупность таких микропрограмм иногда называют эмулятором.
Машинный язык, как и язык микрокоманд, удобен для интерпретации
аппаратурой ЭВМ, но плохо приспособлен для непосредственного
использования человеком-программистом. Мало того, что функциональный
уровень команд этого языка - низкий, синтаксически эти команды не более,
чем последовательность нулей и единиц. Вот почему следующим в иерархии
языков низкого уровня стоит обычно язык символического кодирования
(автокод, или ассемблер). Операторы этого языка - те же команды, но они
имеют мнемонические названия, а в качестве операндов используются не
конкретные адреса в оперативной памяти, а их символические имена.
Очевидно, что уровень языка ассемблера тот же, что и у машинного языка,
а переход от одного из них к другому не более, чем транслитерация. И тем
не менее это важный шаг на пути от языка ЭВМ к языку специалистов,
которым эта машина нужна.
Следующим естественным усложнением стала замена часто встречающихся
последовательностей команд более крупными единицами - макрокомандами.
Такие языки называются языками макрокоманд или просто макроязыками. Для
перевода макропрограмм на язык машины простой трансляции уже
недостаточно и требуется специальная компонента - макропроцессор,
генерирующий последовательности машинных команд, соответствующие тому
или иному макросу (макрокоманде).
Все языки низкого уровня ориентированы на определенный тип аппаратуры и
в этом смысле специализированы. В настоящее время наиболее популярны
языки ассемблеров для систем команд IBM-PC и VAX.
Следующую, существенно более многочисленную группу составляют языки
программирования высокого уровня. Для всех языков высокого уровня общее
то, что ориентированы они не на систему команд той или иной ЭВМ, а на
систему операторов, характерных для записи определенного класса
алгоритмов. Типичными примерами операторов таких языков могут служить
операторы присваивания (по сути дела это формулы, значения которых
запоминаются в заданных переменных); перехода (изменяют естественный
порядок выполнения операторов); цикла (обеспечивают многократное
повторение группы операторов); условные операторы (поддерживают
управление изменением порядка выполнения операторов); операторы вво-
да-вывода (необходимы для организации "общения" программы с внешним
миром), а также более или менее мощные операторы описания данных,
используемых в программе.
Одним из первых языков высокого уровня был язык программирования
ФОРТРАН. Уже само название его - ФОРмульный ТРАНслятор - говорит о том,
что основное внимание здесь уделено удобному представлению формул.
Основу языка составляют арифметические операторы, соответствующие по
своему синтаксису традиционной записи математических выражений. В
дополнение к этому в языке имеются средства представления условий,
близкие по синтаксису к представлению логических выражений в базисе И,
ИЛИ, НЕ (правда, вместо традиционных знаков логических операций в
ФОРТРАНе используются специальные ключевые слова "AND", "OR" и "NOT") (о
логических базисах см. статью Алгебра логики), и средства представления
циклов. Имеются в языке ФОРТРАН и достаточно развитые средства
форматного ввода-вывода числовых данных. Наконец, здесь существуют и
средства разбиения сложных алгоритмов на более простые за счет явного
определения подпрограмм (SUBROUTINE) и функций (FUNCTION). Описания
данных в ФОРТРАНе ориентированы на представление главным образом
числовой информации. Поэтому и типы данных просты: это целые и
действительные числа, а также массивы из таких чисел (одномерные и
многомерные). Отдельные подпрограммы могут обмениваться между собой
данными за счет передачи параметров или за счет обращения к памяти,
общей для разных модулей.
Уровень языка ФОРТРАН с позиций сегодняшнего дня не слишком высок, но он
очень распространен. Этот язык используется для инженерных и научных
расчетов, и его популярность в значительной степени поддерживается
физиками, усилиями которых созданы громадные библиотеки
ФОРТ-РАН-программ. Как и многие другие языки программирования, ФОРТРАН
развивается. И если несколько лет назад был широко известен ФОРТ-PAH-IY,
то сейчас популярность приобретает ФОР-TPAH-Y, одно из новых свойств
которого - работа с комплексными числами.
В процессе создания, реализации и использования языка ФОРТРАН были
отработаны многие важные идеи "языкотворчества" в программировании, и
можно даже сказать, что этот язык дал уверенность в правильности самой
концепции языков высокого уровня. Но честь научного обоснования всего
направления безусловно принадлежит разработчикам языка АЛГОЛ (Algorithmic
Language), первая версия которого появилась в 1958 г. Можно отметить
несколько важных результатов, полученных в рамках разработки и
реализации этого языка. Во-первых, это создание специальной нотации для
определения синтаксиса алгоритмических языков (нотация Бэкуса - Наура),
строгое описание языка АЛГОЛ-60 с помощью этой нотации и теоретическое
исследование АЛГОЛа как формального языка. Во-вторых, доведение до
логического завершения самой концепции операторных алгоритмических
языков с заранее фиксированными типами данных и блочной структурой. И
в-третьих, создание методов трансляции с алгоритмических языков высокого
уровня.
По> составу исполняемых операторов язык АЛГОЛ (чаще всего при этом
имеется в виду АЛ-ГОЛ-бО) близок к ФОРТРАНу. Здесь почти те же средства
записи арифметических выражений. Практически сохранен, хотя и приближен
к математической нотации, синтаксис логических выражений. Но существенно
интереснее средства управления выполнением отдельных фрагментов
программного текста, способы передачи параметров между процедурами и
функциями, а также средства описания и программных структур. Именно в
АЛГОЛе появились понятия блока и рекурсивного вызова процедуры.
Программа на АЛГОЛе записывается в свободном формате (оператор может
быть прерван в любом месте текущей строки и продолжен без каких бы то ни
было специальных указаний в любом месте следующей строки). Отличает
АЛГОЛ и то, что практически с самого начала это был алгоритмический
язык, синтаксис и семантика (хотя и меньшей степени) которого были
закреплены международным стандартом.
В целом АЛГОЛ - это, безусловно, эпоха в области языков
программирования. Но в практической распространенности в настоящее время
он уступает ФОРТРАНу, с одной стороны, и современным языкам высокого
уровня, с другой.