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

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

Содержание:

Введение

Информатика (ср. нем. Informatik, фр. Informatique, англ. computer science — компьютерная наука— в США, англ. computing science — вычислительная наука — в Великобритании) — наука о способах получения, накопления, хранения, преобразования, передачи и использования информации. Она включает дисциплины, относящиеся к обработке информации в вычислительных машинах и вычислительных сетях: как абстрактные, вроде анализа алгоритмов, так и довольно конкретные, например, разработка языков программирования.

В настоящее время, во всем мире, наряду с языками высокого программирования, такими как: Фортран, Алгол, Си, С++, Java и др. особое место занимает Паскаль. Популярности среди программистов он обязан, прежде всего, своей простоте, универсальности и удобству работы в нем. Язык программирования Паскаль используется уже более тридцати лет. На сегодняшний день создано семь версий.

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

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

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


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

Имена (идентификаторы) - последовательность символов для обозначения объектов программы (переменных, массивов, функций и дp.).
 Операции. Существуют следующие типы операций:

- арифметические операции: сложение, обозначается символом “+”; вычитание, обозначается символом “-”; умножение, обозначается символом “*”; деление, обозначается символом “/” и дp. ;
- логические операции: операции “логическое и”, “логическое или”, “логическое не” и др.;
- операции отношения: меньше, обозначается символом “”; меньше или равно, обозначается символами “=”; равно, обозначается символом “=”; не равно, обозначается символами “”.
- операция конкатенации символьных значений друг с другом, изображается знаком "+".

 Ключевые слова – это слова языка, имеющие строго определенное назначение, которые не могут использоваться в качестве идентификаторов.

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

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

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

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

Значения строковых выражений - тексты. В них могут входить строковые константы, строковые переменные и строковые функции, разделенные знаком операции конкатенации.
 Оператор – это элемент языка, который задает полное описание некоторого действия, которое необходимо выполнить. Оператор - это наиболее крупное и содержательное понятие языка: каждый оператор представляет собой законченную фразу языка программирования и определяет некоторый вполне законченный этап обработки данных. В состав операторов входят ключевые слова; данные; выражения и т.д.
 Стандартная функция – подпрограмма, заранее встроенная в транслятор языка для вычисления часто употребляемых функций. В качестве аргументов функций можно использовать константы, переменные и выражения.
 Программа - это последовательность инструкций, предназначенных для выполнения компьютером. В настоящее время программы оформляются в виде текста, который записывается в файлы.
 Программирование – это теоретическая и практическая деятельность решения задачи средствами конкретного языка программирования и оформления полученных результатов в виде программы.
На стадии программирования возникает этап отладки программы – процесс обнаружения и устранения ошибок в программе, производимой по результатам ее тестирования на компьютере.
После окончательной отладки программа документируется, т.е. к ней прилагается описание назначения программы и инструкция по эксплуатации. Только после этого программа становится законченным программным продуктом, подготовленным к реализации как любой иной вид промышленной продукции.
  Языки высокого уровня работают через трансляционные программы -трансляторы, которые преобразуют исходный код в последовательность команд машинного языка. Существует два основных вида трансляторов: интерпретаторы, которые сканируют и проверяют исходный код в один шаг, и компиляторы, которые сканируют исходный код для создания текста программы на машинном языке, которая затем выполняется отдельно.
  В общем случае программа может иметь модульную структуру, т.е. состоять из нескольких программных единиц, связанных между собой командами передачи управления. Такой принцип построения программ называется модульным. Программная единица, с первой команды которой начинается выполнение программы, называется головной программой. Остальные программные единицы, входящие в единую программу, называются подпрограммами.
 Подпрограмма - это последовательность операторов, которые определены и записаны только в одном месте программы, однако их можно вызвать для выполнения из одной или нескольких точек программы.
 Функция - это программная единица, которая может быть употреблена в выражении. Функция прямо возвращает величину, которая используется при вычислении этого выражения, и, кроме того, может возвращать величины через параметры.
 Процесс разработки многомодульных программ эффективнее, особенно если разрабатывается программа большого размера, когда над реализацией проекта может работать несколько программистов, каждый из которых имеет возможность модифицировать фрагменты программы, не мешая работе остальных.
 Подпрограммы и функции позволяют создавать большие структурированные программы, которые можно делить на части. Это дает преимущества в следующих ситуациях:
1. Если программа большая, разделение ее на части облегчает создание, тестирование и ее сборку.
2. Если программа большая и повторная компиляция всего исходного текста занимает много времени, разделение ее на части экономит время компиляции.
3. Если процедуру надо использовать в разных случаях разным образом, можно записать ее в отдельный файл и скомпилировать отдельно.

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

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

Для того, чтобы облегчить общение человека с ЭВМ были созданы языки программирования типа Ассемблер. Переменные величины стали изображаться символическими именами. Числовые коды операций заменились на мнемонические обозначения, которые легче запомнить.

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

Один из первых языков программирования – Фортран (Formula Translation) был создан в середине 50-х годов. Благодаря своей простоте и тому, что на этом языке накоплены большие библиотеки программ Фортран и в наши дни остается одним из самых распространенных. Он используется для инженерных и научных расчетов, для решения задач физики и других наук с развитым математическим аппаратом.

Для решения экономических задач был создан язык программирования - Кобол.

Расширение областей применения ЭВМ влечет за собой создание языков, ориентированных на новые сферы применения: Снобол – алгоритмический язык для обработки текстовой информации, Лисп - алгоритмический язык для обработки символов. Лисп находит широкое применение в исследованиях по созданию искусственного интеллекта.

В 1968 г. был объявлен конкурс на лучший язык программирования для обучения студентов. Для этого конкурса Никлаус Вирт создал язык Паскаль, достаточно простой, удобный, с наличием мощных средств структурирования данных. Хотя Паскаль был разработан как язык для обучения программированию, он впоследствии получил широкое развитие и в настоящее время считается одним из самых используемых языков.

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

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


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

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

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

Следующую, существенно более многочисленную группу составляют языки программирования высокого уровня - это Фортран, Алгол, Кобол, Паскаль, Бейсик, Си, Пролог и т.д. Эти языки машинно-независимы, т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.

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

Процедурное программирование возникло на заре вычислительной техники и получило широкое распространение. В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий.
Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.

Непроцедурное (декларативное) программирование появилось в начале 70-х годов 20 века, но стремительное его развитие началось в 80-е годы, когда был разработан японский проект создания ЭВМ пятого поколения, целью которого явилась подготовка почвы для создания интеллектуальных машин. К непроцедурному программированию относятся функциональные и логические языки.
В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те в свою очередь разлагаются на еще более простые и т.д. Один из основных элементов в функциональных языках - рекурсия, то есть вычисление значения функции через значение этой же функции от других элементов. Присваивания и циклов в классических функциональных языках нет. Можно выделить еще один класс языков программирования - объектно-ориентированные языки высокого уровня. На таких языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Объектно-ориентированные языки, благодаря богатому пользовательскому интерфейсу, предлагают человеку решить задачу в удобной для него форме. Примером такого языка может служить язык программирования визуального общения Object Pascal. Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен JavaScript.

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

 C, C++, Pascal, Delphi, Visual Basic, Java, Python, PHP, Ruby, Perl

И эти языки делятся на интерпретируемые и компилируемые:

  • Компилируемые: C, C++, Паскаль, Delphi
  • Интерпретируемые: Visual Basic, Java, Python, PHP, Ruby, Perl

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

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

Фортран

Фортран (Fortran) — первый реализованный язык программирования высокого уровня (после Планкалкюля), правда, с одной небольшой оговоркой — для машин, построенных по классической схеме фон Неймана. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса (John Backus) в корпорации IBM. Через пару лет начались его коммерческие поставки. До этого программирование велось либо непосредственно в машинных кодах, либо на символических ассемблерах. Название Fortran является аббревиатурой от FORmula TRANslator, то есть, переводчик формул.

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

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

Современный Фортран (Fortran 95 и Fortran 2003) приобрёл черты, необходимые для эффективного программирования для новых вычислительных архитектур; позволяет применять современные технологии программирования, в частности, ООП.

Элементы синтаксиса у фортрана.

Комментарий до конца строки

! или * в первом символе строки

Регистрозависимость

Нет

Регулярное выражение идентификатора переменной

[a-zA-Z][_a-zA-Z0-9]{0-n}

Присваивание значения переменной

=

Объявление переменной

type :: variable

Объявление переменной с присваиванием значения

type :: variable = value

Группировка выражений

()

Блок

do ... end do

Равенство

= или .EQ.

Неравенство

/= или .NE.

Сравнение

== < > <= >= <> или .LT. .GT. .LE. .GE.

Вызов функции

CALL f(a,b...)

Вызов функции без параметров

CALL f

Последовательность

конец строки

Если - то

if condition then ... end if

Если - то - иначе

if condition then ... else ... endif

Цикл с постусловием

DO ... WHILE (condition)

Цикл for - next для диапазона целых чисел с инкрементом на 1

do label i = 1, 10

Цикл for - next для диапазона целых чисел с декрементом на 1

do label i = 10, 1, -1

Бейсик

Синтаксис языка напоминает Фортран и многие элементы — явные заимствования из него. Язык задумывался для обучения, поэтому его конструкции максимально просты. Как и в других языках программирования, ключевые слова взяты из английского языка. Основных типов данных два: строки и числа. С появлением версии Visual Basic, а также различных его модификаций (таких как VBA), в языке появились многие другие типы данных и дополнения, типичные для современных языков программирования (например, такие, как объектная модель). Объявление переменных не требует специальной секции (в отличие от Паскаля). Объявление переменной — это первое её использование.Одним из наиболее распространённых вариантов языка Бейсик стала реализация интерпретатора QBasic корпорации Microsoft. Долгие годы она включалась как бесплатное приложение, входящее в операционные системы MS-DOS и ранних Windows. В нём имелись довольно мощные графические и звуковые возможности, позволяющие создавать на этом языке даже игры.Бейсик поздних версий (начиная с Turbo Basic и Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю, чем к исходному Бейсику. Основные изменения версий 1990-х годов состоят в следующем:

  • Отказались от представления программы как неструктурированного набора пронумерованных строк. Номера строк превратились в обычные метки, которые стали необязательными и перестали влиять на порядок исполнения программы. Если ранее строка с номером 15 всегда шла в программе раньше строки с номером 20, то теперь порядок исполнения стал определяться порядком расположения строк в исходном коде. Метки перестали быть только числовыми.
  • В языке появились именованные подпрограммы с параметрами, механизм вызова подпрограмм стал обычным: подпрограмма вызывается по имени, с указанием списка фактических параметров.
  • Появилась рекурсия.
  • Были введены структурные управляющие конструкции, в результате для организации обычных ветвлений и циклов перестало быть необходимым использование оператора GOTO и меток строк.
  • Существенно расширилась номенклатура типов данных, появилась возможность явно описывать типы обычных переменных.
  • Стали необязательными типизирующие суффиксы в именах переменных, хотя их использование не запрещалось.
  • В более поздних версиях появилась обработка исключений и поддержка элементов ООП.
  • Были введены механизмы поддержки модульности — появилась возможность без «фокусов» (типа динамической загрузки модулей с помощью явных системных вызовов) разделять программу на несколько файлов исходного кода.
  • Появились средства для работы с цветной графикой и звуковой картой.
  • Visual Basic, ориентированный на разработку Windows-приложений с графическим интерфейсом пользователя, был выполнен интегрированным с графическим дизайнером интерфейса, что позволило быстро писать простые программы под Windows.
  • Появились кроссплатформенные реализации, например, FreeBASIC и PureBasic.

Практически все недостатки, присущие ранним версиям языка, были исправлены, и программирование на современных диалектах Бейсика мало отличается от использования других языков и сред (например, таких, как Delphi). Оборотной стороной процесса модификации Basic является то, что язык стал гораздо объёмнее и сложнее, его освоение требует больше времени и усилий.

Фрагмент типичной программы на FreeBASIC:

# Lang "fb"

Dim as String n, s, t, n2, t2

Cls: Print "Добро пожаловать!" 'Заголовок в первой строке

Do

'Цикл, выводящий линию под заголовком, на всю ширину экрана

For i as Integer=1 to LoWord (Width)

Print "=";

Next i

'Ввод символьных данных от пользователя

Input «Имя:» n

Input «Фамилия:», s

Input «Отчество:», t

'Вырезаем копию первых символов из имени и отчества

n2=Left (n, 1)

t2=Left (t, 1)

'Выводим результат

Print "Ваше имя кратко: "; s ; " "; n2; ". "; t2; "."

Print "Повторить программу? (y/n) "

Loop While LCase(Input(1))="y"

End 0

Несмотря на популярность, в 2001 году Microsoft отказалась от дальнейшей поддержки Visual Basic в пользу принципиально нового языка Visual Basic .NET — в этой реализации язык был снова кардинально пересмотрен, и в текущем состоянии он практически совпадает по набору возможностей c языком C#, отличаются только детали синтаксиса и ключевые слова. Таким образом, Basic перерос из средства для создания программ любителям-непрофессионалам до полноценного средства создания программ.

Помимо написания полноценных программ, Бейсик широко применяется как основа для различных скриптовых языков (например, макросы в пакете Microsoft Office пишутся на диалекте VBA).

C++

C++ — компилируемый, статически типизированный язык программирования общего назначения.

Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

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

Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.

Синтаксис

Громоздкость

Определение синтаксиса является одним из самых громоздких и продолжает расширяться. Стандарт 2003 г. содержал уже более 200 строк РБНФ, усложнённых наличием среди них массы неоднозначностей (англ. disambiguations). Даже семантически более мощные языки имеют существенно более простой синтаксис (например, РБНФ языка Scheme по стандарту R6RS составляет всего 12 основных строк плюс 11 строк т. н. «синтаксического сахара», то есть необязательных). Громоздкость синтаксиса С++ порождает массу проблем.

  • становится невозможным редактирование синтаксиса языка программистом для адаптации к требованиям предметной области (как это возможно, например, в OCaml посредством управления модулем camlpX компилятора, или в метаязыках посредством синтаксических макросов).
  • практически гарантированы (предсказуемы с очень высокой вероятностью в силу человеческого фактора) отклонения от стандарта в различных компиляторах, что обеспечивает низкую портируемость программ на C++ между компиляторами (см. раздел Особенности). Большинство промышленных языков (даже не стандартизированных) защищено от этого формальной семантикой .

Принуждение к избыточности

  • Многие языки предлагают избыточность — несколько перегружающих друг друга способов получить один и тот же результат, так что использующие их программисты оказываются свободны в выборе; при этом в иных ситуациях эти языковые элементы оказываются полезны каждый по своему. С++ вынуждает использовать необоснованно перегружающие друг друга элементы, что приводит к неделимому перемешиванию «что» и «как» в программировании (функциональности и её реализации). Доступ к данным («что»-операция) в С++ осуществляется двумя «как»-операциями: «.» и «->» в зависимости от того, как именно в данном контексте реализовано представление данных. Полиморфизм так же имеет две реализации: простую и виртуальную. Наряду с наследованным из Си управлением памятью через malloc/free добавляется управление памятью через new/delete и new[]/delete[], и не осуществляется никакого контроля за парность. Можно выделить блок с помощью new[], а затем высвободить с помощью delete или даже free — это приводит к скрытым ошибкам и нестабильной работе программ (так как new и new[] реализованы через malloc, но выполняют больше инициализаций, подчистка которых в этом случае не производится). То же касается приведения типов — наряду с наследованным из Си простым приведением типов, в С++ добавлены специальные операции — dynamic_cast, static_cast, const_cast, reinterpret_cast.

Тяжелое наследие

  • С++ унаследовал от Си множество низкоуровневых свойств, из-за которых использование высокоуровневых конструкций затрудняется даже в задачах, где низкоуровневые возможности сами по себе не используются. В книге Страуструпа «Дизайн и эволюция C++» это оправдывается попыткой сохранить обратную совместимость с Си, где эти свойства изначально оправданы и не являются недостатками. Однако, при рассмотрении С++ как самостоятельного языка прикладного программирования, эти свойства превращаются в недостатки, так как приводят к неоправданному существенному затруднению процесса прикладной разработки и невозможности включить в процесс не владеющих программированием специалистов предметной области задачи, как это описано.

Сложное поведение между точками следования

  • Операции присваивания (=), инкремента (++), декремента (--) и др. являются в Си выражениями, возвращающими значение, а не формируют самостоятельную императивную команду, как в других императивных языках — и С++ унаследовал это свойство. Однако, в отличие от простых выражений, данные операции осуществляют изменение состояния. В нечистых ФЯ (Lisp, ML) изменение состояния обычно делается самостоятельной императивной командой, не возвращающей значения, что делает их как минимум хорошо заметными при чтении кода. В С++ же это позволяет создавать трудночитаемые выражения, размещая сложное поведение между точками следования, что влечёт труднообнаружимые ошибки и снижает портируемость. В Си такая семантика, несмотря на её опасность, была предназначена для обеспечения возможности ручной оптимизации кода (немедленное использование значения выражения позволяет избавиться от ненужных ассемблерных команд пересылки данных). Однако, в настоящее время оптимизирующие компиляторы обычно генерируют оптимальный код и на традиционных выражениях (устраняя ненужные ассемблерные команды автоматически)[24], так что выгода от этой возможности С++ более не компенсирует порождаемые ею проблемы в прикладном программировании.

Разрушающее присваивание вместо ветвления

  • Операции разрушающего присваивания (=) и логического сравнения (==) синтаксически схожи. Поскольку присваивание является в С++ операцией, возвращающей значение, то замена сравнения на присваивание в любом контексте является синтаксически и семантически корректным, но в корне изменяет поведение программы, что влечёт труднообнаружимые ошибки. Типичный пример подобной ошибки:
  • if (x=0) { операторы }
  • Здесь в условном операторе записан один символ равенства вместо двух, то есть операция присваивания вместо операции сравнения. В результате, вместо того, чтобы сравнить текущее значение x с нулём, программа присвоит x нулевое значение, затем возьмёт результат этого выражения (ноль), выполнит неявное приведение типа к булеву значению «ложь» (поскольку так того требует семантика оператора if), и блок операторов в условной конструкции не выполнится никогда. В развитых компиляторах С++ предлагается диагностика некоторых подобных синтаксических случаев с выдачей предупреждений, но реализация подобной диагностики для С++ весьма трудоёмка.

Приведение типов

  • Некоторые преобразования типов не интуитивны, хотя могут производиться неявно. В частности, операция над беззнаковым и знаковым числами порождает беззнаковый результат; однако, в аксиоматике теории множеств множество натуральных чисел (N) является подмножеством множества целых (Z), а совместное использование элементов разных множеств допустимо лишь на уровне общего надмножества — то есть интуитивным было бы получение в результате целого (знакового) числа, но в С++ происходит наоборот, и возникает риск труднообнаружимой ошибки.

Операторы управления

  • C++, как и Си, позволяет пропускать break в ветви оператора switch с целью последовательного выполнения нескольких ветвей, что влечёт труднообнаружимые ошибки. Во многих языках семантика оператора выбора более строгая. В C# необходимо всегда писать либо break, либо использовать goto case N для явного указания порядка выполнения. В потомках ML при сопоставлении с образцом не только синтаксически строго обозначаются границы блоков ветвлений, но и контролируется совпадение количества вариантов с определением разбираемого вариантного типа. По аналогии с ML, допущенный в Си недостаток его создатели (Керниган и Ритчи) исправили в языке Limbo.

Паскаль

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

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

Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций, написанных на других языках, отсутствие средств раздельной компиляции и т. п. Подробный разбор недостатков языка Паскаль того времени был выполнен Брайаном Керниганом в статье «Почему Паскаль не является моим любимым языком программирования» (эта статья вышла в начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля, избавленный от большинства его пороков, а также более развитые диалекты Паскаля). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров.

Однако многие недостатки языка не проявляются или даже становятся достоинствами при обучении программированию. Кроме того, по сравнению с основным языком программирования в академической среде 1970-х (которым был Фортран, обладавший гораздо более существенными недостатками), Паскаль представлял собой значительный шаг вперёд. К 1980-м годам Паскаль стал основой для многочисленных учебных программ, в отдельных случаях на его основе были созданы специализированные обучающие языки программирования, так, в начале 1980-х годов в СССР для обучения школьников основам информатики и вычислительной техники Андрей Ершов разработал алголо-паскалеподобный «учебный алгоритмический язык».

Наиболее известной реализацией Паскаля, обеспечившей широкое распространение и развитие языка, является Turbo Pascal фирмы Borland, выросшая затем в объектный Паскаль для DOS (начиная с версии 5.5) и Windows и далее в Delphi, в которой были внедрены значительные расширения языка.

Диалекты Паскаля, применяемые в Turbo Pascal для DOS и Delphi для Windows, стали популярны из-за отсутствия других успешных коммерческих реализаций.

Паскаль, в его первоначальном виде, представляет собою чисто процедурный язык и включает в себя множество алголоподобных структур и конструкций с зарезервированными словами наподобие if, then, else, while, for, и т. д. Тем не менее, Паскаль также содержит большое количество возможностей для структурирования информации и абстракций, которые отсутствуют в изначальном Алголе-60, такие как определение типов, записи,указатели, перечисления, и множества. Эти конструкции были частично унаследованы или инспирированы от языков Симула-67,Алгол-68, созданного Никлаусом Виртом AlgolW (англ.)русск. и предложены Хоаром.

В современных диалектах (Free Pascal) доступны такие операции, как перегрузка операторов и функций.

Программы на Паскале начинаются с ключевого слова Program и следующего за ним имени программы с точкой с запятой (в некоторых диалектах является необязательным), за именем может в скобках следовать список внешних файловых дескрипторов («окружение») в качестве параметров; за ним следует тело программы, состоящее из секций описания констант (Const), типов (Type), переменных (Var), объявлений процедур (Procedure) ифункций (Function) и следующего за ними блока операторов, являющегося точкой входа в программу. В языке Паскаль блок ограничивается ключевыми словами begin и end. Операторы разделяются точками с запятой, после тела помещается точка, служащая признаком конца программы.

Регистр символов в Паскале не имеет значения.

Таким образом, простейшая («пустая») программа на Паскале будет выглядеть следующим образом:

program p;

begin

end.

Приведённая выше программа не выполняет никаких действий и содержит пустой блок операторов.

Пример программы, выводящей строку «Hello, world!»:

begin

write('Hello, World!'); { оператор вывода строки }

end.

Заключение

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

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

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

Список литературы

Роберт У. Себеста. Основные концепции языков программирования Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: 2001.

Вольфенгаген В. Э. Конструкции языков программирования. Приёмы описания. — М.: Центр ЮрИнфоР, 2001.

Паронджанов В. Д. Как улучшить работу ума. Алгоритмы без программистов — это очень просто!. — М.: Дело, 2001.

Давидов М. И., Антонов В. Г. LEX - генератор программ лексического анализа / М. – 1985;

Justin J. Crom / "BASIC Face-off", PC Tech Journal, September 1987.