Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык программирования

.pdf
Скачиваний:
32
Добавлен:
12.03.2015
Размер:
623.69 Кб
Скачать

Язык программирования

— формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет наборлексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.

Со времени создания первых программируемых машин человечество придумало более двух с половиной тысяч языков программирования (включая абстрактные и нестандартные языки). Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.

Создатели языков по-разному толкуют понятие язык программирования. К наиболее распространённым утверждениям, признаваемым большинством разработчиков, относятся следующие:

Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.

Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека к компьютеру, в то время как естественные языки используются для общения людей между собой. Можно обобщить определение «языков программирования» — это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.

Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.

С де ж е

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

o

1.1 Классификация языков программирования по типам задач

2. Историческая справка

o

2.1

Ранние этапы развития

o

2.2

Совершенствование

o

2.3

Объединение и развитие

2. Стандартизация языков программирования

o

3.1 Типы данных

o

3.2

Структуры данных

o

3.3

Семантика языков программирования

o

3.4

Парадигма программирования

o

3.5

Способы реализации языков

o

3.6

Языки программирования низкого уровня

o

3.7

Языки программирования высокого уровня

o

3.8

Используемые символы

4. Классы языков программирования

5. Литература

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

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

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

 

Поколения

 

Языки программирования

 

Характеристика

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ориентированы на использование в

 

 

Первое

 

Языки машинных команд (ЯМК)

 

конкретной ЭВМ, сложны в освоении,

 

 

 

 

требуют хорошего знания архитектуры

 

 

 

 

 

 

 

 

 

 

 

 

ЭВМ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Второе

 

Ассемблеры, Макроассемблеры

 

Более удобны для использования, но по-

 

 

 

 

прежнему машинно-зависимы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Третье

 

Языки высокого уровня

 

Мобильные, человеко-ориентированные,

 

 

 

 

 

 

 

 

проще в освоении

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Непроцедурные, объектно-

 

Ориентированы на непрофессионального

 

 

Четвертое

 

ориентированные, языки запросов,

 

пользователя и на ЭВМ с параллельной

 

 

 

 

параллельные

 

архитектурой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Языки искусственного

 

Ориентированы на повышение

 

 

Пятое

 

интеллекта, экспертных систем и

 

интеллектуального уровня ЭВМ и

 

 

 

 

баз знаний, естественные языки

 

интерфейса с языками

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЯП первого поколения представляли собой набор машинных команд в двоичном (бинарном) или восьмеричном формате, который определялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были

пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.

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

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

Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня - Fortran, разработанного под руководством Дж. Бэкуса в фирме IBM. За короткое время Fortran становится основным ЯП при решении инженернотехнических и научных задач. Первоначально Fortran обладал весьма ограниченными средствами обеспечения работы с символьной информацией и с

системой ввода-вывода. Однако постоянное развитие языка сделало его одним из самых распространенных ЯВУ на ЭВМ всех классов - от микродо супер-ЭВМ, а его версии используются и для вычислительных средств нетрадиционной параллельной архитектуры.

Вскоре после языка Fortran появились такие ныне широко известные языки, как

Algol, Cobol, Basic, PL/1, Pascal, APL, ADA, C, Forth, Lisp, Modula и др. В настоящее время насчитывается свыше 2000 различных языков высокого уровня.

Языки четвертого поколения носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают только что, а не как надо сделать. В программах формируются скорее соотношения, а не последовательности шагов выполнения алгоритмов. Типичными примерами

непроцедурных языков являются языки, используемые для задач искусственного интеллекта (например, Prolog, Langin). Так как непроцедурные языки имеют минимальное число синтаксических правил, они значительно более пригодны для применения непрофессионалами в области программирования.

Второй тенденцией развития ЯП четвертого поколения являются объектноориентированные языки, базирующиеся на понятии программного объекта, впервые использованного в языке Simula-67 и составившего впоследствии основу известного языка SmallTalk. Программный объект состоит из структур данных и алгоритмов, при этом каждый объект знает,как выполнять операции со своими собственными данными. На самом деле, различные объекты могут пользоваться совершенно разными алгоритмами при выполнении действий, определенных одним и тем же ключевым словом (так называемое свойство полиморфизма). Например, объект с комплексными числами и массивами в качестве данных будет использовать различные алгоритмы для выполнения операции умножения. Такими свойствами обладают объектно-ориентированные Pascal, Basic, C++, SmallTalk, Simula, Actor и ряд других языков программирования.

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

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

SQL (Structured Query Language).

Четвертым направлением развития являются языки параллельного программирования (модификация ЯВУ Fortran, языки Occam, SISAL, FP и др.),

которые ориентированы на создание программного обеспечения для вычислительных средств параллельной архитектуры (многомашинные,

мультипроцессорные среды и др.), в отличие от языков третьего поколения, ориентированных на традиционную однопроцессорную архитектуру.

К интенсивно развивающемуся в настоящее время пятому поколению относятся языки искусственного интеллекта, экспертных систем, баз знаний (InterLisp, ExpertList, IQLisp, SAIL и др.), а также естественные языки, не требующие освоения какого-либо специального синтаксиса (в настоящее время успешно используются естественные ЯП с ограниченными возможностями - Clout, Q&A,

HAL и др.).

 

1.1 Кл сс ф ц

 

т

д ч

 

 

 

 

 

 

 

 

 

 

 

Задача

 

Примеры языков

 

 

 

 

 

 

Задачи искусственного интеллекта

 

Lisp, Prolog, Multilisp, Commonlisp, Рефал,

 

 

 

 

Planner, QA4, FRL, KRL, QLisp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fun, Apl, Alfl, PARAlfl, ML, SML, PPL/1, Hope,

 

 

 

Miranda, Occam, PFOR, Glypnir, Actus,

 

 

 

 

Параллельные вычисления

 

параллельный Cobol, ОВС-ЛЯПИС, ОВС-

 

 

 

Мнемокод, ОВС-Алгол, ОВС-Фортран, PA(1),

 

 

 

 

 

 

 

 

PA(G)

 

 

 

 

 

 

Задачи вычислительной математики и

 

Occam, PFOR, Glypnir, Actus,параллельный

 

 

 

 

Cobol, ОВС-ЛЯПИС, ОВС-Мнемокод, ОВС-

 

физики

 

 

 

Алгол, ОВС-Фортран, PA(1), PA(G)

 

 

 

 

 

 

 

 

 

 

 

 

Разработка интерфейса

 

Forth, c, C++, Ассемблер, Макроассемблер,

 

 

 

 

Simula-67, OAK, Smalltalk, Java, РПГ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Разработка программ-оболочек,

 

Forth, c, C++, Ассемблер, Макроассемблер,

 

разработка систем

 

Simula-67, OAK, Smalltalk, Java, РПГ

 

 

 

 

 

 

Задачи вычислительного характера

 

Algol, Fortran, Cobol, Ada, PL/1,

 

 

 

 

 

 

Фокал, Basic, Pascal

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оформление документов, обработка

 

 

 

 

больших текстовых файлов, организация

 

Perl, Tcl/Tk, VRML, SQL, PL/SCL, Informix 4GL,

 

виртуальных трехмерных интерфейсов в

 

Natural, DDL, DSDL, SEQUEL, QBE, ISBL

 

Интернете, разработка баз данных

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Историческая справка

2.1 Р

е эт

т

Можно сказать, что первые языки программирования возникали еще до появления современных электронных вычислительных машин: уже в XIX веке были изобретены устройства, которые можно с долей условности назвать программируемыми — к примеру, механические пианино и ткацкие станки. Для управления ими использовались наборы инструкций, которые в рамках современной классификации можно назвать предметно-ориентированными языками программирования. К началу XX века для кодирования данных и управления разнообразными механическими операциями начали применяться перфокарты. Позднее, в 1930—1940 годах, А. Чёрч и А. Тьюрингразработали математические абстракции — лямбдаисчисление и машину Тьюринга соответственно — для

формализации алгоритмов; первая из упомянутых абстракций сохраняет свое влияние на построение языков программирования и по сей день.

В это же время, в 1940-е годы, появились электрические цифровые компьютеры и был разработан язык, который можно считать первым высокоуровневым языком программирования для ЭВМ — «Plankalkül», созданный немецким инженером К. Цузе в период с 1943 по 1945 годы. Строилось программное обеспечение и для американского компьютера «Марк-1»; одна из активных участниц этого процесса, программист Грейс Хоппер, впоследствии разработала первый компилятор для языков программирования.

Программисты ЭВМ начала 1950-х годов, в особенности таких, как UNIVAC и IBM 701, при создании программ пользовались непосредственно машинным языком — то есть писали на языке первого поколения. Вскоре на смену такому методу программирования пришло применение языков второго поколения, также ограниченных спецификациями конкретных машин, но более простых для запоминания. Они традиционно известны под наименованием языков ассемблера. Позднее, к концу десятилетия, языки второго поколения были усовершенствованы: в них появилась поддержка макрокоманд. Одновременно с этим начали появляться уже и языки третьего поколения — такие, как Фортран, Лисп и Кобол. Языки программирования этого типа более абстрактны и универсальны, не имея жесткой зависимости от

конкретной аппаратной платформы и используемых на ней машинных команд. Обновленные версии перечисленных языков до сих пор имеют хождение в разработке программного обеспечения, и каждый из них оказал определенное

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

2.2 С е ше ст

е

В период 1960-х — 1970-х годов были разработаны основные парадигмы языков программирования, используемые в настоящее время, хотя во многих аспектах этот процесс представлял собой лишь улучшение идей и концепций, заложенных еще в первых языках третьего поколения.

Язык APL оказал влияние на функциональное программирование и стал первым языком, поддерживавшим обработку массивов.

Язык ПЛ/1 (NPL) был разработан в 1960-х годах как объединение лучших черт Фортрана и Кобола.

Язык Симула, появившийся примерно в это же время, впервые включал поддержку объектно-ориентированного программирования. В середине 1970-х группа специалистов представила язык Smalltalk, который был уже всецело объектно-ориентированным.

В период с 1969 по 1973 годы велась разработка языка Си, популярного и по сей день.

В 1972 году был создан Пролог — первый язык логического программирования.

В 1978 году в языке ML была реализована расширенная

система полиморфной типизации, положившая начало типизированным языкам функционального программирования.

Каждый из этих языков породил по семейству потомков, и большинство современных языков программирования в конечном счете основано на одном из них.

Кроме того, в 1960 — 1970х годах активно велись споры о необходимости поддержки структурного программирования в тех или иных языках. В частности, голландский специалист Э. Дейкстра выступал в печати с предложениями о полном отказе от использования инструкций GOTO во всех высокоуровневых языках. Развивались также приемы, направленные на сокращение объема программ и повышение продуктивности работы программиста и пользователя; в итоге наборы инструкций на языках четвертого поколения уже требовали

существенно меньшего количества перфокарт для их записи, нежели аналогичные программы на языках третьего поколения.

2.3 Объед е е

т е

В 1980-е годы наступил период, который можно условно назвать временем консолидации. Язык С++ объединил в себе черты объектно-ориентированного и системного программирования, правительство США стандартизировало язык Ада, производный от Паскаля и предназначенный для использования в бортовых системах управления военными объектами, в Японии и других странах мира осуществлялись значительные инвестиции в изучение перспектив так называемых языков пятого поколения, которые включали бы в себя конструкции логического программирования. Сообщество функциональных языков приняло в качестве стандарта ML и Лисп. В целом этот период характеризовался скорее опорой на заложенный в предыдущем десятилетии фундамент, нежели разработкой новых парадигм.

Важной тенденцией, которая наблюдалась в разработке языков программирования для крупномасштабных систем, было сосредоточение на применении модулей — объемных единиц организации кода. Хотя некоторые языки, такие, как ПЛ/1, уже поддерживали соответствующую функциональность, модульная система нашла свое отражение и применение также и в

языках Модула-2, Оберон,Ада и ML. Часто модульные системы объединялись с конструкциями обобщенного программирования.

В1990-х годах в связи с активным развитием Интернета распространение получили языки, позволяющие создавать сценарии для веб-страниц — главным образом Perl, развившийся из скриптового инструмента для Unix-систем, и Java. Возрастала также и популярность технологий виртуализации. Эти изменения, однако, также не представляли собой фундаментальных новаций, являясь скорее совершенствованием уже существовавших парадигм и языков (в последнем случае — главным образом семейства Си).

Внастоящее время развитие языков программирования идет в направлении повышения безопасности и надежности, создания новых форм модульной организации кода и интеграции с базами данных.