Файл: Обзор языков программирования высокого уровня (Теоретические основы и история появления первых языков программирования высокого уровня).pdf
Добавлен: 22.04.2023
Просмотров: 398
Скачиваний: 4
В тоже время в нем присутствовала масса недостатков, как технических так и языковых. С 1960-1968 год, язык много дорабатывался.
Очень интересно описан опыт работы в СССР с этим языком, Тереховым Андреем Николаевичем – доктором физико-математических наук.
В СССР первую информацию о работах по Алголу 68 привез член РГ 2.1, будущий академик, а тогда еще член-корреспондент АН СССР – Андрей Петрович Ершов из Академгородка (Новосибирск). Через него эта информация распространилась по стране, в том числе её получил мой научный руководитель доктор физ - мат наук Григорий Самуилович Цейтин, который в то время руководил лабораторией математической лингвистики НИИММ ЛГУ. Он принял активное участие в обсуждение языка, писал весьма дельные замечания авторам и удостоился благодарности в предисловии к публикации по Алголу 68. Понятно, что язык с новыми выразительными возможностями, с новым способом описания синтаксиса и семантики вызвал большой интерес среди программирующей общественности, стали формироваться группы, готовящиеся к его реализации. В первые годы, правда собственно до реализации дело не доходило. Например, группа математиков из Академгородка всерьез занялась переводом сообщения об Алголе 68 на русский язык. Понятно, что русское описание языка в стране, где много миллионов людей говорят по-русски, вещь важная. Я за этой работой только наблюдал и, первое время, не принимал участия. Честно скажу, мне казалось, что они слишком много времени тратят на выбор терминов, даже на обсуждение того, каким шрифтом какие термины должны быть опубликованы, а типографские возможности того времени были совсем не такими богатыми, как сейчас. Всё это вызывало массу трудностей, но это было как-то не интересно для меня. Из обсуждений того времени запомнился тот факт, что в русскоязычной литературе не было укоренившегося слова, обозначающего файл. Предлагались различные варианты переводы этого важного понятия: «тека» (от слова библиотека), «фонд» и так далее. Я помню, как шутил на эту тему Андрей Берс из Академогородка, что в русском языке есть только два слова, заканчивающихся на «-айл» - кайло и хайло, потом он всегда немножко молчал и с улыбкой добавлял: «ну, конечно, есть еще и Задыхайло». Задыхайло был очень известным советским программистом, не знаю, обижался ли он на эту шутку или нет, но я запомнил, что «-айл» это не очень русское окончание. Тем не менее, после долгих обсуждений был принят термин файл, которым мы пользуемся до сих пор. Кстати говоря, таких терминов в то время было принято довольно много, именно в связи с Алголом 68. Например, «сборка мусора». Первоначально казалось, что это совершенно не технический, не научный термин. Но, с другой стороны, это прямой перевод англоязычного термина garbage collection, довольно точно отражающего суть дела (в процессе динамического распределения памяти возникают участки памяти, на которые уже никто не ссылается, т.е. реальный мусор). Поэтому механизм, который уплотняет память, оставляет в памяти только те участки, на которые есть реальные ссылки это, действительно, сборка мусора. В основном перевод был работой Александра Федоровича Рара. Когда оригинальное сообщение об Алголе 68 было опубликовано (в 1969 г., так как официальное принятие осуществилось только в декабре 1968 г.), важно отметить, что уже в том же 1969 году в журнале «Кибернетика» вышел перевод сообщения об Алголе 68, т.е. все признавали, насколько важно иметь описание такого нового языка на русском языке[[13]].
Пример кода программы на языке Алгол[[14]]
BEGIN
FILE F (KIND=REMOTE);
EBCDIC ARRAY E [0:11];
REPLACE E BY "HELLO, WORLD!";
WHILE TRUE DO
BEGIN
WRITE (F, *, E);
END;
END.
1.5 Кобол
Кобол[[15]] был разработан в 1959 году и предназначался прежде всего для работы с большими данными в виде таблиц.
Спецификация языка была создана в 1959 году. Язык создавался машинонезависимым и максимально приближенным к естественному английскому языку. Программы на COBOL считаются понятными даже простым людям, потому что код на этом языке не нуждаются в каких-либо специальных комментариях.
COBOL — язык очень старый и в свое время использовался крайне активно, поэтому существует множество реализаций и диалектов. Для языка был утвержден ряд стандартов: в 1968, 1974, 1985 и 2002 годах. Последний стандарт добавил в язык поддержку объектно-ориентированной парадигмы.
Язык позволяет эффективно работать с большим количеством данных, он насыщен разнообразными возможностями поиска, сортировки и распределения. К числу других плюсов COBOL обычно относят его структурированность. Перечисляя минусы, нельзя не вспомнить о том, что на Коболе можно запрограммировать лишь простейшие алгебраические вычисления. Для сложных инженерных расчетов этот язык не годится.
Пример кода программы на языке Cobol[[16]]
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 fact pic 9(15) comp.
77 n pic 99.
77 i pic 99.
77 ist pic XX.
77 factst pic X(18).
PROCEDURE DIVISION.
move 16 to n
move 0 to i
move 1 to fact
perform until i greater than n
move i to ist
move fact to factst
display ist "! = " factst
add 1 to i
multiply i by fact
on size error display "value too big"
end – multiply
end - perform.
stop run.
1.6 Бейсик и Паскаль – языки для обучения
В 1964 году, преподаватели Дартмундского колледжа Джон Кемени и Томас Курц придумали и спроектировали простой и понятный язык под названием Бейсик[[17]]. Главной идеей было то, чтобы начинающие изучение, не испытывали большой трудности в использовании. Основой языка были частично Фортран и Алгол. Язык имел четкие и понятные сообщения об ошибках, высокую скорость работы в небольших программах, также отсутствовала необходимость понимать работу аппаратного обеспечения.
Пример кода на языке Basic
PRINT "HELLO WORLD"
В 1971 в федеральном техническом университете Никлаусом Виртом был создан Паскаль[[18]], обеспечивающий строгую типизацию и интуитивно-понятный синтаксис. Он был назван в честь французского математика и физика Блеза Паскаля. Целью создания языка, послужило желание Вирта, написать язык для обучения студентов структурному программированию. Большое количество сторонников данного языка считают его, одним из лучших для начального обучения программированию.
Пример кода на языке Паскаль
Program hello;
begin
writeln ('Hello, world!')
end.
1.7 Smalltalk
В конце 1970 годов началось смещение центра внимания от процедурно-ориентированных методологий разработки программ к информационно-ориентированным. Абстракция данных все больше привлекала внимание сообщество программистов. Первым языком поддерживающим ограниченную абстракцию данных стал Simula. Но общество было не готово принять новые методы работы, да и сам язык был недостаточно оптимизирован. В результате язык не нашел одобрения в научной среде, и все лавры достались языку Smalltalk[[19]]. История создания берет свое начало в лаборатории Xerox. Там, Алан Кэй с исследовательской группой на основе изысканий Кэя, разработали так называемую программную парадигму. Над языком Smalltalk было проведено огромное количество исследований и переработок, в результате чего возникло несколько новых языков, в том числе переработанный Smalltalk-80.
Общая структура языка состояла из объектов, которые являлись программными модулями языка. Также в нем была реализована система сообщений. То есть, объекты - это структуры, инкапсулирующие локальные данные и набор операций (методы), доступные другим объектам. Метод определяет реакцию объекта на определенное сообщение, соответствующее данному методу. Все вычисления выполняются одним способом: объекту отправляется сообщение, вызывающее один из его методов. Ответом на сообщение является объект, возвращающий требуемую информацию или просто информирующий о завершении запрошенной обработки. Главное различие между сообщением и подпрограммой в том, что сообщение посылается объекту данных, который потом обрабатывается с помощью программного кода. В тоже время вызов подпрограммы посылает данные в саму подпрограмму. То есть, модули языка хранят, обрабатывают данные и обмениваются ими друг с другом.
В языке Smalltalk абстракциями объектов являются классы, которые очень похожи на классы языка Simula. Объекты имеют собственные локальные данные и представляют собой отдельный экземпляр своего класса. Также в языке Smalltalk присутствует возможность создания иерархии классов. Тем самым, этот язык взял некоторые объектно-ориентированные идеи от Simula. Но если в предыдущем, они были не так четко продуманы, то в языке Smalltalk, они были развиты и полностью сформулированы. Благодаря этому, идеи объектно–ориентированного программирования нашли своих сторонников, и стали активно развиваться.
Пример кода программы на языке Smalltalk
| a |
a:= Array new S.
1 to: 5 do : [ : i| a at: I put:
( Prompter promt: ‘ Введите элемент массива ‘)
As Number ].
a: = a asSortedCollection.
a do: [: i | Transcript put All : i printStrind]
1.8 Си
С 1969 – 1973 год в лаборатории компании Bell Labs, Денисом Ричи и Кеном Томпсоном велась работа над языком, который мог реализовать операционную систему Unix. Язык Си[[20]] стал первым языком, переписавшим операционную систему с Ассемблера на свой диалект. В результате, он быстро приобрел огромную популярность, благодаря возможности быстро писать код на низком уровне абстракции, почти как на ассемблере. Компиляторы Си легко разрабатываются вследствие простоты языка и малого размера стандартных библиотек. В 1989 году увидел свет американский стандарт языка Си, который был принят в качестве международного стандарта в 1990 году. Си является языком функций, типов данных, операторов присваивания и управления последовательностью вычислений. При программировании на этом языке осуществляется обращение к функциям, где большинство возвращает некоторые значения, которое может использоваться в операторе присваивания, при этом изменяя значение другой переменной. Последовательность вычислений управляется операторами wile, for, switch, do. В языке имеется небольшой набор типов данных: целые числа, числа с плавающей запятой, битовые поля. В языке Си можно описать переменную типа указатель, который связывается с объектом , принадлежащим к любому типу данных. Адресная арифметика языка Си является чувствительной к типу данных того объекта, с которым связан используемый указатель. Разрешены также указатели к функциям. Имеется возможность расширить список типов данных путем создания структур с иерархической зависимостью входящих в него типов данных. Каждый тип данных может принадлежать либо к основному типу, либо к ранее описанному структурному типу. Объединения напоминают структуры, но определяют различные виды иерархических зависимостей, в которых данные разных типов располагаются в памяти.
Допустимо описание массивов данных различных типов, включая структуры и объединения. Массивы могут быть многомерными. Функции Си являются рекурсивными по умолчанию. Вы можете, правда, создать функцию, которая не будет рекурсивной, но сам язык по своей природе стремится поддерживать рекурсивность и требует минимальных усилий при программировании рекурсий.
Программа функции на языке Си разбивается на блоки, в каждом из которых могут быть определены свои собственные локальные переменные. Блоки могут выбираться для исполнения по результату выполнения оператора управления последовательностью вычислений. Блоки могут быть вложенными друг в друга. Переменные и функции могут быть глобальными для программы, глобальными для исходного модуля или локальными для блока, в котором они описаны. Локальные переменные могут быть описаны таким образом, что они будут сохранять свои значения при всех обращениях внутри данного блока (статические переменные) или же будут восприниматься как новые объекты при каждом обращении (автоматические переменные). Си позволяет создавать программу в виде нескольких исходных модулей, которые будут транслироваться независимо. Перемещаемые объектные модули, соответствующие исходным модулям, компонуются в единый загрузочный модуль. Эта особенность позволяет компилятору поддерживать объектные библиотеки многократно используемых функций и создавать большие программы из множества небольших исходных модулей.
В языке Си нет операторов ввода/вывода, весь ввод/вывод выполняется с помощью функций. Вследствие этой особенности языка Си разработана стандартная библиотека функций. Существование этого стандарта и составляет главную привлекательность языка Си, ибо делает программы переносимыми.
Пример кода программы на языке Си[[21]]
#include <stdio.h>
int main()
{
printf ("Здравствуй, мир !\n");
return 0;
}
1.9 С++
В 1980 году в той же компании Bell Labs Бьерн Страуструп усовершенствовал язык Си под свои нужды[[22]]. Изменения заключались во введении проверки и преобразовании типов параметров функций и классов. В язык были включены производные классы, управление открытым и закрытым доступом к унаследованным компонентам, конструктор с деструктором, а также дружественные классы. Были добавлены параметры по умолчанию и перегрузка операторов присваивания. Язык был назван как Си с классами. В течении нескольких лет С++ эволюционировал, в язык были добавлены поддержка множественных наследований (классы, имеющие несколько родительских классов) и абстрактных классов. Язык С++ предоставлял пользователю набор встроенных классов, а также возможность самостоятельно определять классы. Классы языка С++, то есть типы данных могут создаваться в любых количествах. В описании класса указываются объекты данных и функции. Классы могут называть один или несколько родительских классов, обеспечивая наследование и множественное наследование. Операторы могут перегружаться[[23]], что означает возможность приписывать существующим операторам новый смысл. В С++ добавляется такая особенность, как полиморфизм. Полиморфизм - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий.