Язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением. В более абстрактном виде ЯП является средством создания программных моделей объектов и явлений внешнего мира.
Со времени создания первых программируемых машин человечество придумало более двух с половиной тысяч языков программирования. Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
Чтобы понимать тенденции развития ЯП, нужно знать движущие силы их эволюции. Для выяснения этого вопроса будем рассматривать ЯП с различных точек зрения.
1) Во-первых, ЯП является инструментом программиста для создания программ. Для создания хороших программ нужны хорошие ЯП. Поэтому одной из движущих сил эволюции ЯП является стремление разработчиков к созданию более совершенных программ.
2) Во-вторых, процесс разработки программы можно сравнивать с промышленным производством, в котором определяющими факторами являются производительность труда коллектива программистов, себестоимость и качество программной продукции. Создаются различные технологии разработки программ (структурное, модульное, объектно-ориентированное программирование и другие), которые должны поддерживаться ЯП. Поэтому второй движущей силой эволюции ЯП является стремление к повышению эффективности процесса производства программной продукции.
3) В-третьих, программы можно рассматривать как аналог радиоэлектронных устройств обработки информации, в которых вместо радиодеталей и микросхем используют конструкции ЯП. Как и электронные устройства, программы могут быть простейшими (уровня детекторного приемника) и сложными (уровня автоматической космической станции), при этом уровень инструмента должен соответствовать сложности изделия. Поэтому третьей движущей силой является увеличение разнообразия и повышение сложности задач, решаемых с помощью ЭВМ.
4) В-четвертых, совершенствование самих ЭВМ приводит к необходимости создания языков, максимально реализующих новые возможности ЭВМ.
5) В-пятых, программы являются интеллектуальным продуктом, который нужно накапливать и приумножать. Но программы, как и технические изделия, обладают свойством морального старения, одной из причин которого является их зависимость от типа ЭВМ и операционной среды. Поэтому ЯП должен обеспечивать продолжительный жизненный цикл программы. Стремление к этому и является движущей силой развития ЯП.
ЯП можно классифицировать по следующим признакам:
1) По степени ориентации на специфические возможности ЭВМ ЯП делятся на:
- машинно-зависимые;
- машинно-независимые.
К машинно-зависимым ЯП относятся машинные языки, ассемблеры и автокоды, использующиеся в системном программировании. Программа на машинно-независимом ЯП после трансляции на машинный язык становится машинно-зависимой.
2) По степени детализации алгоритма получения результата ЯП делятся на:
- языки низкого уровня;
- языки высокого уровня;
- языки сверхвысокого уровня.
3) По степени ориентации на решение определенного класса задач:
- проблемно-ориентированные;
- универсальные.
4) По возможности дополнения новыми типами данных и операциями:
- расширяемые;
- нерасширяемые.
5) По возможности управления реальными объектами и процессами:
- языки систем реального времени;
- языки систем условного времени.
6) По способу получения результата:
- процедурные;
- непроцедурные.
7) По типу решаемых задач:
- языки системного программирования;
- языки прикладного программирования.
8) Непроцедурные языки по типу встроенной процедуры поиска решений:
- реляционные;
- функциональные;
- логические.
Специализированные языки.
Фортран (1954 год создания)
APL (1957)
Lisp (1958)
Cobol (1960)
Algol (1960)
Snobol (1962)
BASIC (1963)
SETL (1969)
Pascal (1970)
C (1972) и С++ (1986)
Ada (1983) и Ada95 (1995)
JavaScript
VBScript
Perl
Python
Simula
Smalltalk (1972)
Eiffel
Оccam (1982)
В 1954 году в недрах корпорации IBM группой разработчиков во главе с Джоном Бэкусом (John Backus) был создан язык программирования Fortran.
Значение этого события трудно переоценить. Это первый язык программирования высокого уровня. Впервые программист мог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, отличающей новый язык от ассемблера, была концепция подпрограмм. Напомним, что это современные компьютеры поддерживают подпрограммы на аппаратном уровне, предоставляя соответствующие команды и структуры данных (стек) прямо на уровне ассемблера, в 1954 же году это было совершенно не так. Поэтому компиляция Fortran’а была процессом отнюдь не тривиальным. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки в первую очередь из-за того, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу возможностей для скрытых ошибок, таких, например:
В Фортране следующая конструкция описывает «цикл for до метки 10 при изменении индекса от 1 до 100»:
DO 10 I=1,100
Если здесь заменить запятую на точку, то получится оператор присваивания:
DO10I = 1.100
Говорят, что такая ошибка заставила ракету взорваться во время старта.
Язык Фортран использовался (и используется по сей день) для научных вычислений. Он страдает от отсутствия многих привычных языковых конструкций и атрибутов, компилятор практически никак не проверяет синтаксически правильную программу с точки зрения семантической корректности (соответствие типов и проч.). В нем нет поддержки современных способов структурирования кода и данных. Это осознавали и сами разработчики. По признанию самого Бэкуса, перед ними стояла задача скорее разработки компилятора, чем языка. Понимание самостоятельного значения языков программирования пришло позже.
6.2. APL
В 1957 году была предпринята попытка создания языка для описания математической обработки данных. Язык был назван APL (Application Programming Language). Его отличительной особенностью было использование математических символов (что затрудняло применение на текстовых терминалах; появление графических интерфейсов сняло эту проблему) и очень мощный синтаксис, который позволял производить множество нетривиальных операций прямо над сложными объектами, не прибегая к разбиению их на компоненты. Широкому применению помешало, как уже отмечалось, использование нестандартных символов как элементов синтаксиса.
6.3. Lisp и ему подобные языки
В 1958 году появился язык Lisp — язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта. Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984). Многие его черты были унаследованы современными языками функционального программирования.
6.4. Cobol
В 1960 году был создан язык программирования Cobol.
Он задумывался как язык для создания коммерческих приложений, и он стал таковым. На Коболе написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках (по структуре и замыслу Кобол во многом напоминает Фортран), появляются новые его диалекты и реализации. Так появилась реализация Кобола, совместимая с Microsoft.NET, что потребовало, вероятно, внесения в язык некоторых черт объектно-ориентированного языка.
Основные понятия алгоритмических языков программирования.
Алгоритмический язык содержит подобные элементы, только слова называют элемен- тарными конструкциями, словосочетания-выражениями, предложения-операторами. Символы, элементарные конструкции, выражения и операторы составляют иерархическую структуру, поскольку элементарные конструк- ции образуются из последовательности символов, выражения-это последо- вательность элементарных конструкций и символов, а оператор-последо- вательность выражений, элементарных конструкций и символов. ОПИСАНИЕ ЯЗЫКА есть описание четырех названных элементов. Описание символов заключается в перечислении допустимых символов языка. Под описанием элементарных конструкций понимают правила их образования. Описание выражений-это правила образования любых выражений, имеющих смысл в данном языке. Описание операторов состоит из рассмотрения всех типов операторов, допустимых в языке. Описание каждого элемента языка задается его СИНТАКСИСОМ и СЕМАНТИКОЙ. Синтаксические определе- ния устанавливают правила построения элементов языка. Семантика опре- деляет смысл и правила использования тех элементов языка, для которых были даны синтаксические определения. СИМВОЛЫязыка-это основные неделимые знаки, в терминах которых пи- шутся все тексты на языке. ЭЛЕМЕНТАРНЫЕ КОНСТРУКЦИИ -это минимальные единицы языка, имеющие самостоятельный смысл. Они образуются из основных символов языка. ВЫРАЖЕНИЕ в алгоритмическом языке состоит из элементарных конс- трукций и символов, оно задает правило вычисления некоторого значе- ния. ОПЕРАТОР задает полное описание некоторого действия, которое необ- ходимо выполнить. Для описания сложного действия может потребоваться группа операторов. В этом случае операторы объединяются в СОСТАВНОЙ ОПЕРАТОР или БЛОК. Действия, заданные операторами, выполняются над ДАННЫМИ. Предложения алгоритмического языка, в которых даются сведения о типах данных, называются ОПИСАНИЯМИ или неисполняемыми операторами. Объединенная единым алгоритмом совокупность описаний и операторов образует ПРОГРАММУ на алгоритмическом языке. В процессе изучения алгоритмического языка необходимо отличать алгоритмический язык от того языка, с помощью которого осуществляется описание изучаемого алгоритмического языка. Обычно изучаемый язык на- зывают просто языком, а язык, в терминах которого дается описание изучаемого языка - МЕТАЯЗЫКОМ.