Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Классификация языков программирования высокого уровня (Введение в языки программирования высокого уровня)

Содержание:

ВВЕДЕНИЕ

  Прошло более 50 лет, как был создан первый язык программирования высокого уровня. С того времени были разработаны сотни языков программирования и их создание очень напоминает постройку Вавилонской башни, завершить которую строители так и не сумели, поскольку каждый говорил на своем языке. Тем не менее, стремление наряду с дифференциацией языков проводить и интеграцию привело к тому, что большинство языков восприняло единую платформу - которая на данный момент называется объектно-ориентированным программированием. Не вдаваясь пока в детали этого подхода, выделим в нем то, что бросается сразу в глаза неискушенному пользователю. Искусство программирования распалось в две части - разработку графического интерфейса программы и собственно программирование задачи. То, что развивалось в течение более 50 лет, в основном попало во вторую часть. И это как раз то, что отличает один язык от другого. 

Поскольку работа с большинством языков теперь начинается с интегрированной оболочки, то необходимо сначала выбрать тип этой оболочки. В настоящее время можно выбрать между тремя оболочками- Visual Studio 6.0, С++Builder и Visual Studio.Net. Выбор в основном определяется той аппаратной базой, которая имеется у пользователя. Последняя оболочка требует жесткого диска с объемом не менее 2 Гб и соответствующего процессора, методические рекомендации по работе с ней предполагают знакомство пользователей с предыдущими оболочками, поэтому мы с них и начнем. 

Глава 1

Введение в языки программирования высокого уровня

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

Программистам пока еще не удалось создать язык, удовлетворяющий всех, да и неизвестно, возможно ли вообще его создать, и надо ли [5].

Язык программирования — это способ записи программ решения различных задач на ЭВМ в понятной для компьютера форме[1]. В 1950-х гг. появляются первые средства автоматизации программирования — языки Автокоды. Появление языков типа Автокод-Ассемблер облегчило участь программистов. Числовые коды операций заменились на мнемонические (словесные) обозначения, которые легче запомнить. Язык программирования стал понятнее для человека, но при этом удалился от языка машинных команд. Чтобы компьютер мог исполнять программы на Автокоде, потребовался специальный переводчик — транслятор. Транслятор — это системная программа, переводящая текст программы на Автокоде в текст эквивалентной программы на ЯМК. Языки программирования высокого уровня (ЯПВУ) являются машинно-независимыми языками. Одна и та же программа на таком языке может быть выполнена на ЭВМ разных типов, оснащенных соответствующим транслятором. Форма записи программ на ЯПВУ по сравнению с Автокодом еще ближе к традиционной математической форме, к естественному языку. Очень скоро вы увидите, что, например, на языке Паскаль она почти такая же, как на школьном Алгоритмическом языке. ЯПВУ легко изучаются, хорошо поддерживают структурную методику программирования.

Первыми популярными языками высокого уровня, появившимися в 1950-х гг., были Фортран, Кобол (в США) и Алгол (в Европе). Языки Фортран и Алгол были ориентированы на научно-технические расчеты математического характера. Кобол — язык для программирования экономических задач[1].

Большое количество языков программирования появилось в 1960—1970-х гг. А за всю историю ЭВМ их было создано более тысячи. Но распространились, выдержали испытание временем немногие. В 1965 г. в Дартмутском университете был разработан язык Бейсик. По замыслу авторов это простой язык, легко изучаемый, предназначенный для программирования несложных расчетных задач.

В эпоху ЭВМ третьего поколения получил большое распространение язык PL/I (Program Language One), разработанный фирмой IBM. Это был первый язык, претендовавший на универсальность, т. е. на возможность решать любые задачи: вычислительные, обработки текстов, накопления и поиска информации. Однако PL/I оказался слишком сложным языком.

Значительным событием в истории языков программирования стало создание в 1971 г. языка Паскаль. Его автор — швейцарский профессор Н.Вирт — разрабатывал Паскаль как учебный язык структурного программирования[6].

Наибольший успех в распространении этого языка обеспечили персональные компьютеры. Фирма Borland International, Inc (США) разработала систему программирования Турбо Паскаль для ПК

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

Си — это язык структурного программирования, но, в отличие от Паскаля, в нем заложены возможности непосредственного обращения к некоторым машинным командам, к определенным участкам памяти компьютера. Дальнейшее развитие Си привело к созданию языка объектно-ориентированного программирования Си++.

Си++ Международная система единиц, СИ (фр. Le Syst?me International d’Unit?s, SI) — система единиц физических величин, современный вариант метрической системы. СИ является наиболее широко используемой системой единиц в мире, как в повседневной жизни, так и в науке и технике. В настоящее время СИ принята в качестве основной системы единиц большинством стран мира и почти всегда используется в области техники, даже в тех странах, в которых в повседневной жизни используются традиционные единицы. В этих немногих странах (например, в США) определения традиционных единиц были изменены таким образом, чтобы связать их фиксированными коэффициентами с соответствующими единицами СИ.

Полное официальное описание СИ вместе с её толкованием содержится в действующей редакции Брошюры СИ (фр. Brochure SI, англ. The SI Brochure), опубликованной Международным бюро мер и весов (МБМВ) и представленной на сайте МБМВ[1]. Брошюра СИ издаётся с 1970 года, с 1985 года выходит на французском и английском языках, переведена также на ряд других языков.

ЭВМ будущего, пятого поколения называют машинами «искусственного интеллекта». Но прототипы языков для этих машин были созданы существенно раньше их физического появления. Это языки ЛИСП и Пролог[9].

Лисп (LISP, от англ. LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов. Создатель Лиспа Джон Маккарти занимался исследованиями в области искусственного интеллекта (в дальнейшем ИИ) и созданный им язык по сию пору является одним из основных средств моделирования различных аспектов ИИ.

Лисп является вторым в истории (после Фортрана) используемым по сей день высокоуровневым языком программирования, а также первым из сохранившихся в использовании языков, использующих автоматическое управление памятью и сборку мусора[9].

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

Язык Лисп является языком системного программирования для так называемых Лисп-машин, производившихся в 80-е годы, например, фирмой Symbolics[5].

Язык Лисп, наряду с языком Ada, прошел процесс фундаментальной стандартизации для использования в военном деле и промышленности, в результате чего появился стандарт Common Lisp. Его реализации существуют для большинства платформ.

Пролог (фр. Programmation en Logique) — язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка.

Основными понятиями в языке Пролог являются факты, правила логического вывода и запросы, позволяющие описывать базы знаний, процедуры логического вывода и принятия решений[5].

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

Особую роль в интерпретаторе Пролога играют конкретные запросы к базам знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система Пролог выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.

Факты в базах знаний на языке Пролог представляют конкретные сведения (знания). Обобщённые сведения и знания в языке Пролог задаются правилами логического вывода (определениями) и наборами таких правил вывода (определений) над конкретными фактами и обобщёнными сведениями.

Начало истории языка относится к 1970-м годам.[1] Будучи декларативным языком программирования, Пролог воспринимает в качестве программы некоторое описание задачи или баз знаний и сам производит логический вывод, а также поиск решения задач, пользуясь механизмом поиска с возвратом и унификацией.

Вот некоторые наиболее популярные языки программирования:

Ассемблер (от англ. assembler — сборщик) — компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке[2].

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

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

Лого (англ. Logo) — язык программирования высокого уровня, разработанный в 1967 году Сеймуром Пейпертом и Идит Харель в образовательных целях для обучения детей дошкольного и младшего школьного возраста основным концепциям программирования (рекурсии, расширяемости и пр.) Logo также обеспечивает среду, в которой дети могут развивать свои навыки рассуждений и решений задач[4].

Бе?йсик (от BASIC, сокращение от англ. Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих[1]) — семейство высокоуровневых языков программирования.

Был разработан в 1964 году профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени.[2]

Язык создавался как инструмент, с помощью которого студенты-непрограммисты могли самостоятельно создавать компьютерные программы для решения собственных задач. Получил широкое распространение в виде различных диалектов, прежде всего как язык для домашних компьютеров. К настоящему моменту претерпел существенные изменения, значительно отойдя от характерной для первых версий простоты, граничащей с примитивизмом и превратившись в достаточно ординарный язык высокого уровня с типичным набором возможностей. Используется как самостоятельный язык для разработки прикладных программ, главным образом, работающих под управлением ОС Windows различных версий. Также широко распространён в качестве встроенного языка прикладных программных систем различного назначения и в качестве языка для программируемых калькуляторов.

Глава 2

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

Существует два уровня языков программирования: языки низкого уровня и языки высокого уровня.

Язык программирования низкого уровня – это язык программирования, созданный для использования со специальным типом процессора и учитывающий его особенности. В данном случае «низкий уровень» не значит «плохой». Имеется в виду, что язык близок к машинному коду (он позволяет непосредственно реализовать некоторые команды процессора)[5].

Языки низкого уровня мало похожи на нормальный, привычный человеку язык. Большие, громоздкие программы на таких языках пишутся редко. Зато если программа будет написана на таком языке, то она будет работать быстро, занимая маленький объем и допуская минимальное количество ошибок. Чем ниже и ближе к машинному уровень языка, тем меньше и конкретнее задачи, которые ставятся перед каждой командой[1].

Для каждого типа процессоров самым низким уровнем является язык ассемблера, который позволяет представить машинный код не в виде чисел, а в виде условных обозначений, называемых мнемониками. У каждого типа процессора свой язык ассемблера; его можно рассматривать одновременно и как особую форму записи машинных команд, и как язык программирования самого низкого уровня[5].

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

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

Языки высокого уровня в большей степени ориентированы на человека; команды этих языков – понятные человеку английские слова. Чем выше уровень языка, тем больше приходится проделать операций для выполнения необходимой команды[5].

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

Достоинства языков программирования высокого уровня:

· алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста[9];

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

· конструкции операторов задаются в удобном для человека виде;

· поддерживается широкий набор типов данных.

Существуют также как универсальные, так и специализированные языки программирования.

Глава 3

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

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

Высокоуровневые языки программирования были разработаны для платформенной независимости сути алгоритмов. Зависимость от платформы перекладывается на инструментальные программы — трансляторы, компилирующие текст, написанный на языке высокого уровня, в элементарные машинные команды (инструкции). Поэтому, для каждой платформы разрабатывается платформенно-уникальный транслятор для каждого высокоуровневого языка, например, переводящий текст, написанный на Delphi в элементарные команды микропроцессоров семейства x86[4].

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

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

Всякий язык программирования имеет три основные составляющие: алфавит, синтаксис и семантику.

Алфавит — это фиксированный для данного языка набор основных символов, т.е. "букв алфавита", из которых должен состоять любой текст на этом языке — никакие другие символы в тексте не допускаются[9].

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

Основными понятиями в алгоритмических языках обычно являются следующие.

1.Имена —  употребляются  для обозначения объектов программы (переменных, массивов, функций и  др.).

2. Операции. Типы операций:

• арифметические операции + , — , * , / и дp. ;

• логические операции и , или , не ;

• операции отношения < , > , <= , >= , = , <> ;

• операция сцепки (иначе, "присоединения", "конкатенации" ) символьных значений друг с другом с образованием одной длинной строки; изображается знаком "+".

3. Данные — величины, обрабатываемые пpогpаммой. Имеется три основных вида данных: константы, переменные и массивы.

• Константы — это данные, которые зафиксированы в тексте программы и не изменяются в процессе ее выполнения.

• Переменные обозначаются именами и могут изменять свои значения в ходе выполнения пpогpаммы. Переменные бывают целые, вещественные, логические, символьные и литерные[4].

• Массивы — последовательности однотипных элементов, число которых фиксировано и которым присвоено одно имя. Положение элемента в массиве однозначно определяется его индексами (одним, в случае одномерного массива, или несколькими, если массив многомерный). Иногда массивы называют таблицами.

4.Выражения  предназначаются  для выполнения необходимых вычислений, состоят из констант, переменных, указателей функций (напpимеp, exp(x)), объединенных знаками операций.[5]

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

Различают выражения арифметические, логические и строковые.

• Арифметические выражения служат для определения одного числового значения.

• Логические выражения описывают некоторые условия, которые могут удовлетворяться или не удовлетворяться. Таким образом, логическое выражение может принимать только два значения — "истина" или "ложь" (да или нет).

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

5.Операторы(команды).

Оператор — это наиболее крупное и содержательное  понятие языка: каждый оператор  представляет собой законченную фразу языка и определяет некоторый вполне законченный этап обработки данных.[8]

Состав языка. Обычный разговорный язык состоит из четырех основных элементов: символов, слов, словосочетаний и предложений. Язык программирования содержит подобные элементы, только слова называют элементарными конструкциями, словосочетания — выражениями, предложения — операторами. Символы, элементарные конструкции, выражения и операторы составляют иерархическую структуру, поскольку элементарные конструкции образуются из последовательности символов, выражения — это последовательность элементарных конструкций и символов, а оператор — последовательность выражений, элементарных конструкций и символов.

Описание языка есть описание четырех названных элементов. Описание символов заключается в перечислении допустимых символов языка. Под описанием элементарных конструкций понимают правила их образования. Описание выражений — это правила образования любых выражений, имеющих смысл в данном языке. Описание операторов состоит из рассмотрения всех типов операторов, допустимых в языке. Описание каждого элемента языка задастся его синтаксисом и семантикой. Синтаксические определения устанавливают правила построения элементов языка. Семантика определяет смысл и правила использования тех элементов языка, для которых были даны синтаксические определения.[5]

Символы языка — это основные неделимые знаки, в терминах которых пишутся все тексты на языке.

Элементарные конструкции — это минимальные единицы языка, имеющие самостоятельный смысл. Они образуются из основных символов языка.

Выражение в языке программирования состоит из элементарных конструкций и символов, оно задает правило вычисления некоторого значения.[8]

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

Язык Паскаль был разработан Никласом Виртом первоначально для целей обучения программированию. В настоящее время он получил широкое распространение по ряду объективных причин.[4]

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

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

В-третьих, Паскаль содержит большое разнообразие различных структур данных, что обеспечивает простоту алгоритмов, а следовательно снижение трудоемкости при разработке программ.

Основные отличия алгоритмических языков от машинных языков:

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

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

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

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

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

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

Из вышеперечисленного следует, что алгоритмический язык в значительной мере является машинно-независимым.[4]

Для описания синтаксиса алгоритмического языка используется специальный метаязык, позволяющий в компактной форме отразить все особенности конкретных конструкций алгоритмического языка. Мы воспользуемся для этих целей металингвистическими формулами Бэкуса-Наура (язык БНФ).

При описании синтаксиса языка используются некоторые его понятия: определив простейшие из них, с их помощью можно уже достаточно просто определить более сложные понятия и т.д., пока не будет определено наиболее сложное понятие – программа. С точки зрения синтаксиса каждое определяемое понятие (но не основной символ) есть метапеременная языка БНФ, значением которой может быть любая конструкция (т.е. последовательность основных символов) из некоторого фиксированного для этого понятия набора конструкций.[4]

Для каждого понятия языка должна существовать единственная метаформула, в левой части которой указывается определяемое понятие (метапеременная языка БНФ), а правая часть формулы тем или иным способом задает все множество значений этой метапеременной (все допустимые конструкции, которые объединяются в это понятие). Все метапеременные заключаются в специальные угловые скобки < и >, которые не принадлежат алфавиту определяемого языка, т.е. являются метасимволами, например, <выражение>, <число> и т.д. Основные же символы языка указываются непосредственно. Левая и правая части метаформулы разделяются специальным знаком : : =, смысл которого можно интерпретировать как «по определению есть». Обычно в качестве значений метапеременной может приниматься любая из нескольких допустимых конструкций. Все допустимые конструкции указываются в правой части формулы и разделяются метасимволом «|», смысл которого можно передать словом «или» («либо»). Кроме перечисления всех возможных значений метапеременной в правой части метаформулы может быть указано правило построения значений. Турбо Паскаль — это не только язык и транслятор с него, но еще и операционная оболочка, обеспечивающая пользователю удобство работы. Турбо Паскаль вышел за рамки учебного предназначения и стал языком профессионального программирования с универсальными возможностями. С помощью встроенного в систему текстового редактора можно формировать в памяти любые тексты, не только программы на Паскале. В частности, это могут быть исходные данные решаемой задачи в текстовой форме. Текст программы, созданный редактором, можно сохранить на диске в виде файла с именем следующего формата. В Паскале заложены возможности непосредственного обращения к некоторым машинным командам, к определенным участкам памяти компьютера. Программы на Паскале, всегда компилируются. Компиляция является аналогом полного предварительного перевода; интерпретация — аналогом синхронного перевода. Паскаль как учебный язык структурного программирования.идентификатор — это любая последовательность букв и цифр, начинающаяся с буквы. В Турбо Паскале к буквам приравнивается также знак подчеркивания. Строчные и прописные буквы в идентификаторах и служебных словах не различаются. Например: max, MAX, MaX и mAx — одно и то же имя.

Длина идентификатора может быть произвольной, но значащими являются только первые 63 символа.

Комментарии. Следующие конструкции представляют собой комментарии и поэтому игнорируются компилятором:

(любой  текст, не содержащий символ «}» }

(* любой текст, не содержащий символы «*)»*)

Буквы русского алфавита употребляются только в комментариях, в литерных и текстовых константах.

Глава 4

История развития основных языков программирования

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

1. Assembler (Ассемблер)

Может показаться, что это событие не было из ряда вон выходящим: как были машинные коды, так и остались. Однако это не так. Да, программирование в машинных кодах осталось, но она стало символическим кодированием машинных команд. Это был огромный шаг вперед, теперь программисту вовсе не нужно было разбираться в программировании команд на аппаратном уровне. В программировании на Ассемблере стало возможным использование меток, что облегчало в значительной мере отладку программ. Появилась возможность разработки целой серии вычислительных машин с одинаковой или сходной системой команд, что можно назвать первым подобием переносимости кода. Ассемблер нес в себе еще одну революционность для программирования: появилось два представления программ на нем: в машинных кодах и в чистом, откомпилированном виде. Но, по мере развития Ассемблера, его постоянного усложнения, дизассемблирование, т.е. перевод из одного представления программы в другой, становилось все более трудным делом. Надо отметить, что в итоге автоматическое дизассемблирование стало невозможным - для этой цели стали появляться специальные программы-дизассемблеры [11].

2. Lisp (Лисп)

С 50-х годов специалисты по ИИ (ИИ - искусственный интеллект) искали язык, пригодный для манипулирования понятиями, выраженными словами и фразами на естественном языке. Первым результатом этих поисков явилось семейство языков под названием IPL, от (Information Processing Languages — языки обработки информации). Оно было создано пионером ИИ Алленом Ньюэллом и его сотрудниками. Вначале работа велась в «Рэнд корпорейшн», а затем в Технологическом институте Карнеги (позднее Карнеги—Меллона) в Питтсбурге, бастионе исследований по ИИ.

Центральной идеей IPL было понятие списка.

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

Понятие списка интересовало и другого выдающегося члена тесного сообщества исследователей ИИ — Джона Маккарти, блестящего и разностороннего математика. В 1958г., когда при его помощи организовалась лаборатория по ИИ при МТИ, Маккарти начал работу над языком высокого уровня, в котором понятие списка сочеталось с системой обозначений, заимствованной из экзотической области математики — так называемого лямбда-исчисления. Введенное в 1931 г. математиком и логиком Алонзо Черчем, это исчисление оперирует только тремя элементами: символами, представляющими переменные и константы, скобками для группировки символов и обозначениями функций, выражаемыми греческой буквой "Лямбда".  Маккарти назвал свой язык LISP от List Processing — обработка списков .

3. FORTRAN (Фортран)

FORTRAN - это первый язык программирования высокого уровня, который получил признание и стал широко применяться. В своем исходном варианте FORTRAN был разработан фирмой IBM в 1957 г. как язык для работы на компьютерах IBM 704. В это время программисты, привыкшие к использованию языка ассемблера, сомневались в возможности использования языков высокого уровня. Наиболее серьезным аргументом была малая эффективность выполнения кода, получающегося в результате трансляции программ, написанных на этих языках. Первые версии FORTRAN были ориентированы главным образом на обеспечение эффективности выполнения.  Первое стандартное определение языка появилось в 1966 г., а затем в 70-х были внесены существенные изменения, которые привели к появлению FORTRAN 77, и в 90-х - FORTRAN 90.[1]

Страуструп руководствовался тем принципом, что все дополнения, привнесенные им в язык C, не должны понизить его эффективность и стать причиной замедления работы программ. Разработанные им расширения языка C, известные под названием C with Classes (C c классами), содержали основную структуру классов, входящую в современный C++. К 1982г. его язык C с классами имел скромный успех в пределах AT&T Bell Telephone Laboratories, и Страуструпу, уподобившемуся гуру, приходилось решать все вопросы, связанные с поддержкой этого языка. В конце концов, эта обязанность стала для него слишком обременительной, и он пришел к выводу, что у него есть только две возможности:

1. Прекратить поддержку языка C с классами.

2. Используя весь накопленный опыт, разработать на основе C с классами новый (более качественный) язык, который имел бы коммерческий успех.

Он выбрал второй вариант и усовершенствовал язык C с классами, добавив новые возможности, а также устранив некоторые несоответствия, имевшиеся в этом языке.

В 1984г. результат его труда получил новое название. Одни называли С с классами новым С, а другие называли стандартный С старым, или простым С. Некоторое время использовалось название С84, а затем Рик Маскитти из Bell Labs предложил название C++. В этом названии используется обозначение ++ операции увеличения на единицу в языке С, которое в данном случае означает "следующий", "последователь". В основном разработка языка C++ была закончена к 1986г., а в июне 1989г. была выпущена вторая версия. В 1989г. в Американском национальном институте стандартов (ANSI) был создан комитет, который к 1994г. выпустил черновой стандарт языка, а через два года - его полный стандарт .

4. Ada (Ада)

История. Язык Ада был разработан при финансовой поддержке Министерства обороны США. В 1978 году был объявлен конкурс на язык программирования, который бы отвечал следующим требованиям:

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

Это конкурс завершился появлением в июле 1980г. спецификаций языка Ада. Этот язык был разработан международным коллективом программистов фирмы Honeywell и ее французского филиала Cii-Bull, которым руководил Ж. Ишбиа. Язык был назван в честь Августы Ады Лайвейс, считающейся первой программисткой, дочери английского поэта Байрона.

Окончательная версия спецификаций языка Ада появилась в феврале 1983г. Она послужила основой для нового стандарта Министерства обороны США и стандарта Американского национального института стандартов (ANSI).

Конечная версия международного стандарта ISO 8652:1987 была опубликована в 1987 году. Структура Ады очень похожа на Паскаль. Синтаксис большинства операторов и описаний практически идентичен синтаксису Модулы, хотя она появилась практически в одно время с Адой.

Ада продолжает позиционироваться как хорошее средство для разработки больших программных комплексов. МО США, учтя отсутствие объектов, в соответствии с современными требованиями к технологии разработки программ, выработало новый стандарт языка ISO/les 8652:1985 (E). Он описывает версию языка Ada95. Самое интересное, что эта версия является первой в мире объектно-ориентированной системой программирования, на которую был введен международный стандарт. Впоследствии МО решило использовать “Ada”, как свой внутренний сертифицированный знак [2,11].

5. Oberon (Оберон)

Язык Оберон был создан в 1987 году Никлаусом Виртом, профессором Института компьютерных систем Федерального технического университета (ETH, Цюрих, Швейцария), автором языков Паскаль и Модула-2.

Язык носит имя спутника планеты Уран.

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

В 1992 году были приняты расширения языка Оберон, предложенные Ханспетером Мёссенбёком. Расширенный язык получил название Оберон-2. Основное нововведение - связанные с типами процедуры. Сейчас Оберон-2 является фактическим стандартом языка [2].

6. Java (Джава, Ява)

История. Разработка языка Java началась в 1991 г. Группа программистов (Green Team) из компании Sun Microsystems под руководством Джеймса Гослинга занималась разработкой языка для использования в цифровых бытовых устройствах (Oak). Летом 1992 г. была создана рабочая версия, но группа опередила свое время, так как в тот момент промышленность еще не была готова к использованию этого языка.

В 1993 г. появился web-браузер Mosaic, что привело к распространению Интернета, вышедшего из стен академических лабораторий, по всему миру. Программисты из группы Green Team сразу же осознали, какую роль может сыграть созданный ими язык для расширения возможностей web-браузеров. При помощи браузера Mosaic, в котором использовались адреса URL для навигации в сети и код HTML для отображения web-страниц, пользователь мог отыскивать нужные ему страницы и загружать информацию с удаленных сайтов.[5]

В 1994 г. компания Sun разработала браузер Hotjava, чтобы продемонстрировать возможности содержащегося в нем виртуального компьютера Java. И наконец, 23 мая 1995 г. Марк Андерсен (Marc Anderssen), один из основателей компании Netscape Communication, которая в то время контролировала 70 % рынка в области web-браузеров, объявил о включении виртуального компьютера Java в браузер Netscape. С этого момента язык Java приобрел значительную популярность. Он все чаще заменяет С и C++ в качестве первого языка программирования, изучаемого и используемого студентами .

Краткий обзор языка. Можно сказать, что язык Java является достаточно простым языком: он имеет ту же ясную структуру, что и C++, и при этом лишен той неуклюжести, которая свойственна С. Тем не менее эффективность выполнения программ на Java несколько ниже, так как многие из структур языка нуждаются в проверке во время выполнения программы. К тому же, поскольку программы на Java чаще всего интерпретируются как апплеты в виртуальной машине Java, скорость выполнения программ на Java несколько ниже, чем скорость выполнения программ, написанных на компилируемых языках. Но при оценке Java надо помнить об основной области применения этого языка: поскольку он создавался для web-браузеров, потери в скорости выполнения фактически не влияют на результат. Причина этого в том, что скорость передачи информации по сети и скорость обработки и отображения информации на мониторе компьютера все равно ниже скорости работы компьютера пользователя. Поэтому большая часть времени тратится на ожидание очередной порции информации, запрошенной на сервере [12].

7. C # (Си Шарп)

История. Язык C# является наиболее известной новинкой в области создания языков программирования. В отличие от 60-х годов XX века - периода бурного языкотворчества - в нынешнее время языки создаются крайне редко. За последние 15 лет большое влияние на теорию и практику программирования оказали лишь два языка: Eiffel и Java, ставший популярным во многом благодаря технологии его использования в Интернете и появления такого понятия как виртуальная Java-машина. Чтобы новый язык получил признание, он должен действительно обладать принципиально новыми качествами. Языку C# повезло с родителями. Явившись на свет в недрах Microsoft, будучи наследником C++, он с первых своих шагов получил мощную поддержку. Создателем языка является сотрудник Microsoft Андреас Хейлсберг. C# создавался как язык компонентного программирования, и в этом одно из главных достоинств языка, направленное на возможность повторного использования созданных компонентов. Из других объективных факторов отметим следующие:

  • C# создавался параллельно с каркасом Framework .Net и в полной мере учитывает все его возможности - как FCL, так и CLR;
  • C# является полностью объектно-ориентированным языком, где даже типы, встроенные в язык, представлены классами;
  • C# является мощным объектным языком с возможностями наследования и универсализации;
  • C# является наследником языков C/C++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от С++ к C#;
  • сохранив основные черты своего великого родителя, язык стал проще и надежнее. Простота и надежность, главным образом, связаны с тем, что на C# хотя и допускаются, но не поощряются такие опасные свойства С++ как указатели, адресация, разыменование, адресная арифметика;
  • мощная библиотека каркаса поддерживает удобство построения различных типов приложений на C#, позволяя легко строить Web-службы, другие виды компонентов, достаточно просто сохранять и получать информацию из базы данных и других хранилищ данных;
  • реализация, сочетающая построение надежного и эффективного кода, является немаловажным фактором, способствующим успеху C# .

Глава 5

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

Особенности конкретных компьютерных архитектур в них не учитываются, поэтому созданные приложения легко переносятся с компьютера на компьютер. В большинстве случаев достаточно просто перекомпилировать программу под определенную компьютерную архитектурную и операционную систему. Разрабатывать программы на таких языках значительно проще и ошибок допускается меньше. Значительно сокращается время разработки программы, что особенно важно при работе над большими программными проектами. Сейчас в среде разработчиков считается, что языки программирования, которые имеют прямой доступ к памяти и регистров или имеют ассемблерные вставки, нужно считать языками программирования с низким уровнем абстракции. Поэтому большинство языков, считавшихся языками высокого уровня до 2000 года сейчас уже таковыми не считаются.

Достоинства ЯПВУ Алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста. Набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса. Конструкции команд (операторов) отражают содержательные виды обработки данных и задаются в удобном для человека виде. Используется аппарат переменных и действий с ними. Поддерживается широкий набор типов данных.

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

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

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

Заключение

Изобретение языка программирования позволило нам общаться с машиной, понимать её. Но если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Так и хочется назвать это детище компьютеризированного будущего: «языки программирования "высочайшего" уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами.

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

Целью данного обзора была попытка получить представление обо всем многообразии существующих языков программирования. Среди программистов часто бытует мнение о «всеобщей применимости» того или иного языка (C, C++, Pascal и т.п.). Это мнение возникает по нескольким причинам: недостаток информации, привычка, инертность мышления. Мы попытались слегка компенсировать первый фактор. По поводу остальных можем лишь сказать, что настоящий профессионал должен постоянно стремиться повышать свою профессиональную квалификацию. Разумеется, прежде чем приниматься использовать новый язык, нужно внимательно изучить все его особенности, включая наличии эффективной реализации, возможности взаимодействия с существующими модулями и т.п., и только после этого принимать решение. Но, тем не менее, одно другого стоит.

Список использованных источников

  1. Гольденберг В.А. "Введение в программирование" Издательство "Харвест" 2015 г.
  2. Под ред. Курочкина В.М. "Язык компьютера" Издательство "Мир" 2018 г.
  3. Морозов В.П. "Алгоритмические языки" Издательство "Статистика" 2018 г.
  4. Баррон Д. "Введение в языки программирования" Издательство "Мир" 2015 г.
  5. Pl/1 Фролов Г.Д. "Практический курс программирования на языке PL-1" Издательство "Наука" 2015 г.
  6. Кауфман В.Ш. "Языки программирования. Концепции и принципы" Издательство "Радио и связь" 2013 г.
  7. У. Клоксин, К. Меллиш "Программирование на языке Пролог" Издательство "Мир" 2017 г.
  8. Романовского И.В. "Начальный курс программирования на языке Форт" Издательство "Финансы и Статистика" 2014 г.
  9. Фаронов В.В. "Turbo Pascal 7.0" Издательство "Нолидж" 2014 г.
  10. Марченко А.И. "Программирование на языке Obgect Pascal 2.0" Издательство "Юниор" 2018 г.
  11. Под ред. Фьюэра А.Р. "Языки программирования Ада, Си, Паскаль" Издательство "Радио и связь" 2016 г.
  12. Д. Флэнэген "JAVA in a nutsell "Издательство "BHV" 2015 г.
  13. Информатика. Базовый курс. 2-е издание. Под редакцией Симоновича. Издательство “Питер” 2004г.
  14. Ваулин А.С “Языки программирования” 2000 г.