Thursday, October 29, 2015

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

Определение. Язык программирования высокого уровня  (ЯПВУ) [high-level language] – 1. Язык программирования, понятия и структура которого удобны для восприятия человеком (согласно ГОСТ 19781-90).  2. Аппаратно-независимый язык программирования.
Все ЯПВУ в той или иной мере являются проблемно-ориентированными, то есть более подходящими для создания программ для определённой предметной области. Те из языков, которые не имеют явной привязки к предметной области, принято называть универсальными.

Disclaimer
Понятно, что информации по конкретным ЯПВУ в Интернете много :) Поэтому этот пост предназначен для некоторой систематизации знаний, которые обязательны практически для любого студента в области ИТ. Но не в академическом стиле и без списка источников.

Первый ЯПВУ
В настоящее время приоритет в создании первого ЯПВУ обычно отдают немецкому учёному Конраду Цузе [Konrad Zuse], который ещё в 1943-45 гг. создал несколько моделей компьютеров на основе электромеханических реле, а в 1945 г. описал язык Plankalkül, намного опередивший все остальные разработки. К сожалению, работы Цузе были опубликованы только в 1972 г. Из-за этого полноценное развитие ЯПВУ начилось в 1950-х годах бывшими противниками Германии в WW2.

«Поколения ЯПВУ»
Сейчас всё реже можно услышать о «поколениях» ЯПВУ. Но ещё 10 лет назад это была обязательная тема при рассмотрении истории развития языков программирования. Наиболее популярно следующее деление.


Период
Название
Примеры языков
1
1954-1958 гг.
Первое поколение
FORTRAN I, ALGOL-58, IPL-V
2
1959-1961 гг.
Второе поколение
FORTRAN II, ALGOL-60, COBOL, LISP
3
1962-1970 гг.
Третье поколение
FORTRAN IV, PL/1, ALGOL-68, Simula, Snobol, BASIC
4
1971-1984 гг.
Четвёртое поколение
FORTRAN-77, Pascal, MODULA-2, C, Sheme, ML, Smalltalk, Ada-83, ICON, Prolog
5
1985-1995 гг.
Пятое поколение
FORTRAN 90, Object Pascal, Oberon, C++, Eiffel, Ada-95, Visual BASIC, Java, OCaml, Haskell
6
1996-Настоящее время
Шестое поколение
FORTRAN 2003, Delphi (язык), D, C#, F#, Python, PHP, Ruby
«Поколения» языков программирования достаточно условны. Намного интересней прослеживать наследуемые черты и выделять семейства. В настоящее время некоторые ЯПВУ настолько далеко зашли по пути специализации, а некоторые в результате «перекрёстного опыления» стали настоль эклектичными, что поколения полностью потеряли смысл.
Éric Lévénez поддерживает генеалогическое дерево наиболее популярных языков программирования (www.levenez.com/lang).

Современное состояние языков программирования
На начало 2010 год по данным сайта http://hopl.murdoch.edu.au (к сожалению, теперь недоступен) создано более 8,5 тысяч компьютерных языков. Из них языками программирования является почти 2000. Алфавитный каталог можно посмотреть на сайте http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm.
Хорошее сравнение популярных ЯПВУ сделано в Википедии (https://ru.wikipedia.org/wiki/Сравнение_языков_программирования).

Популярность языка программирования определяется множеством причин. Качества самого языка и его потенциальные возможности среди этих причин не на первом месте. Куда важнее наличие устоявшегося сообщества разработчиков, реализаций под основные платформы, библиотек и учебных пособий, преемственность синтаксиса и т.п.
По данным TIOBE Programming Community Index (www.tiobe.com/index.php/content/paperinfo/tpci), по состоянию на 2014 год всего 10 языков (Java, C, C++, Visual Basic, PHP, Python, Perl, C#, Delphi, Ruby) привлекают около 90 процентов внимания мирового сообщества программистов. Остальным 140 языкам, участвующим в составлении рейтинга, приходится довольствоваться примерно 10 процентами.

Основные ЯПВУ и их вклад
Попробуем «галопом по Европам» рассмотреть классическую историография ЯПВУ.

  1. FORTRAN
Первым широко используемым языком высокого уровня стал язык FORTRAN, официально родившийся в 1957 году. Проект по созданию языка FORTRAN был не первым начатым, но стал первым успешно реализованным (процесс развития этого языка продолжается до сих пор). Рабочая группа компании IBM под руководством Джона Бэкуса занималась созданием компилятора для FORTRAN  с 1954 года.  Первая версия компилятора была создана для лампового компьютера IBM-704. Название языка – сокращение от английского словосочетания FORmula TRANslator («транслятор формул»). Название чётко отражает цель создания языка: упрощение математических расчётов. Основу языка составили арифметические операторы, соответствующие по своему синтаксису традиционной записи математических выражений. В дополнение к этому, в языке имелись средства абстракции вычислительных процессов (подпрограммы), которые делились на процедуры (SUBROUTINE) и функции (FUNCTION). Типы данных FORTRAN’а ориентированы на представление параметров математических моделей. Изначально они включали целые и действительные числа, а также массивы. Естественно, все данные были статическими. Управляющие конструкции были примитивны и использовали номера строк для передачи управления. Основной конструкцией стал параметрический цикл FOR с произвольным шагом, используемый для обработки массивов. Простота представления данных и семантики управляющих конструкций позволила достичь высокой эффективности компиляторов. Хорошо развитый математический аппарат, огромное число удобных и полезных библиотек подпрограмм и качественные компиляторы – причины того, что FORTRAN  до сих пор используется для математического программирования.
Позднее появились более проработанные версии. FORTRAN II повысил эффективность и позволил осуществлять компоновку программы с подпрограммами на ассемблере. FORTRAN  IV, появившийся в 1962 году и надолго ставший эталоном, позволил полноценно работать с комплексными числами и строками. Но все первые версии языка были в разной степени машинно-зависимыми. Это потребовало усилий по стандартизации, которые в 1966 году позволили принять первый единый стандарт. Следующая стандартизация была проведена в 1979 (ANSI X3.9), на основе версии FORTRAN 77, которая стала особенно популярна и коммерчески успешна. Начиная с версии Fortran 90 (Modern Fortran) язык окончательно стал структурным и модульным, а многие одиозные унаследованные конструкции стали недопустимыми в стандарте Fortran 95. Fortran 2003 стал полноценным объектно-ориентированным языком, сохранившим ясную семантику и эффективность. Он также стандартизирован (в серии стандартов ISO 1539).
На текущий момент актуальная версия стандарта - Fortran 2008. Особенно интересной особенностью стали "подмодули" [submodule]. Также отметим сближение с языком C, см. TR 29113 WORKING DRAFT  (ftp://ftp.nag.co.uk/sc22wg5/N1851-N1900/N1866.pdf)
Fortran приносил и приносит радость и утешение учёным и инженерам, решающим свои специфические научные и инженерные задачи, хотя часто встречается мнение, что этот язык давно не используется.
Ежегодно известная компания Intel выпускает новые версии главных языков, входящих сейчас в состав 
Intel Parallel Studio XE <Год>. Другой компанией, обожающей язык Fortran, является Cray.

  1. COBOL
Быстрое развитие средств вычислительной техники и их удешевление предполагало, что с их помощью можно и нужно решать самые разнообразные проблемы обработки информации в любых областях. В конце 1959 года в США группа разработчиков из той же IBM представила совершенно новый язык программирования COBOL (аббревиатура от Common Business-Oriented Language, то есть универсальный язык, ориентированный на задачи бизнеса). COBOL, в отличие от большинства ЯПВУ первых поколений, заставляет описывать все данные в отдельной секции, совершенно отличной от секции операторов. Это позволяет использовать одни и те же описания данных в различных программах. Синтаксис описаний был приближен к синтаксису английского языка. Написанные на COBOL’е программы эффективно производят простые арифметические операции над большими массивами структурированных данных, что довольно часто приходится делать в экономических и бухгалтерских расчетах. COBOL изначально был аппаратно независим и хорошо документирован, а в совокупности с тем, что он был первым «деловым» языком, становится неудивительна его потрясающая популярность в 60-х и 70-х годах после выхода в 1962 году его второй версии. В Советском Союзе язык также использовался достаточно широко, причем он был переведен на русский язык. В 80-х годах стали понятны недостатки COBOL’а и появились альтернативы, но до сих пор программы на этом языке используются на практике.

  1. ALGOL
Тем не менее, языков программирования было все еще мало, да и те, что были, не всегда устраивали привередливых разработчиков. Поэтому ряд ведущих программистов-теоретиков в 1958 году представил в Цюрихе свое новое детище – язык ALGOL (сокращение от ALGOrithmic Language, то есть алгоритмический язык программирования). Первая версия языка так и называлась – Алгол 58, а позднее, в 60 году на конференции в Париже был принят стандарт Алгол 60, который и стал основным на долгие годы. Специалисты приняли новый язык весьма неоднозначно. По словам Грейс Хоппер (одного из крупнейших специалистов по ЯПВУ) «Алгол похож на большую поэму: простой и ясный с точки зрения математики, но совершенно не практичный». Следующий стандарт языка был принят только в 1968 году как попытка повысить его универсальность и практичность.
В США Алгол никогда не был широко распространён. А европейцы, в пику американцам, приняли Алгол, ведь он дал возможность европейской компьютерной индустрии обрести независимость от американской технологии. В итоге он распространился от Великобритании до Советского Союза и в начале 80-х годов множество советских программистов использовали Алгол-60.
С появлением первых полноценных «потомков» сам Алгол практически мгновенно перестал использоваться. Помимо непрактичности, язык убила сложность создания эффективного компилятора. Здесь проявляется дуализм источников идей, заложенных в языки программирования. Идём строго от исполнителя – получаем эффективный, но не самый стройный и красивый язык. Идём строго от математической модели – получаем красивый, но непрактичный и неэффективный. Так, практически все компиляторы языка Алгол не поддерживали все возможности языка и все требования стандарта.
Основная заслуга этого языка в другом – он заложил мощный фундамент для дальнейшего развития ЯПВУ. Многие языки программирования, разработанные впоследствии и получившие широкое распространение на практике (как среди профессионалов, так и среди любителей), опираются на идеи, заложенные в  Алгол. В первую очередь, это создание специальной нотации для определения синтаксиса алгоритмических языков (нотация Бэкуса-Наура). Во-вторых, доведение до логического завершения самой концепции операторных алгоритмических языков императивного программирования со строгой типизацией данных и блочной структурой. Из дополнительных возможностей можно указать разработку отдельных модулей проекта независимо друг от друга, реализацию разнообразных методов вызова фрагментов кода программы и способов передачи параметров между процедурами и функциями, рекурсивного вызова подпрограмм.

  1. PL/1
Очень интересный пример языка, сошедшего с пути исторического развития, о котором сегодня помнят разве что специалисты, – PL/1 (Пи-Эль-один). Все началось с того, что фирма IBM в 1961 году решила начать разработку нового компьютера. Это должна была быть совершенно новая машина, одинаково хорошо обрабатывающая большие массивы данных и обсчитывающая сложные математические задачи; проект получил название «System-360». Вместе с новой машиной разрабатывался и новый универсальный язык: он совмещал особенности трех лидеров языкостроения – Фортрана, Кобола и Алгола. Рабочая группа под руководством Джоржа Рэдина менее чем за год создала первую версию компилятора. Свое название язык получил как аббревиатуру от «Programming Language One».
Возникает резонный вопрос: почему же мы сегодня ничего не знаем об PL/1, раз он такой хороший и так много всего в себе совмещает? Во-первых, PL/1 стал «корпоративным» языком, дополнив FORTRAN и Cobol на больших компьютерах IBM, но вне этой корпорации практически не использовался. Во-вторых, оказалось, что разработчики взяли от его «родителей» слишком много самого лучшего, и, как следствие, язык получился перегруженным возможностями и концепциями.

  1. BASIC
На заре развития вычислительной техники программисты были чем-то вроде научно-технической секты, неохотно пускающей в свои ряды новичков. Этому способствовали техническое несовершенство компьютеров и малое их количество. Но среди программистов были и те, которые считали необходимым сделать программирование такой же простой и обыденной учебной дисциплиной, как математика. Отцами-основателями коллектива создателей языка BASIC’а (аббревиатура словосочетания Basic Beginner’s All-purpose Symbolic Instruction Code, то есть универсальная система символического кодирования для начинающих, читается как «Бэйсик») являются сотрудники математического факультета Дартмутского колледжа Томас Курц и Джон Кемени. Когда они начали сотрудничать в 1954 году, Дартмутский колледж был обычным гуманитарным университетом, а через десять лет имел прекрасный вычислительный центр и славу родины знаменитого языка BASIC.
Вначале Курц и Кемени сами занимались программированием, причём выполнять программы приходилось вне стен университета. После появления в 1960 году первого собственного компьютера (небольшого LGP-30) они привлекли к изучению алгоритмов и написанию программ студентов. Успешные студенческие разработки убедили Курца и Кемени, что работа с компьютером студентам вполне по силам. Они решили, что пришла пора выдвинуть давно вынашиваемую идею и предложили обучать азам программирования всех студентов университета независимо от специальности. Более того, они настаивали на необходимости работать с машиной «вживую», создавая для нее реальные программы.
Однако существовало два препятствия: пакетная обработка [batch processing] и трудности при изучении языков программирования. Решением первой проблемы стала система разделения времени [time sharing], предложенная Массачусетским технологическим институтом в конце 50-х годов. Система разделения времени предполагала подключение к главному компьютеру – мэйнфрейму [mainframe] нескольких терминалов с алфавитно-цифровой клавиатурой. Специальные инструкции позволяли мэйнфрейму по очереди подключаться к каждому терминалу, выполняя необходимые операции в течение небольшого отрезка временного (в несколько миллисекунд). Так как мэйнфрейм предполагался достаточно мощным, у каждого программиста создавалось впечатление, что компьютер работает только с ним.
Для устранения второго препятствия была начата разработка универсального языка, который был бы прост в освоении, обладал бы сходством с Фортраном и позволял бы работать в интерактивном режиме для исследования поведения программы и её изменения в процессе выполнения. Летом 1963 года Кемени начал разрабатывать первую версию интерпретатора языка Бейсик. Осенью того же года студенты приступили к проектированию и кодированию операционной системы для машин, на которых Кемени и Курц планировали реализовать свои идеи. Это были машины General Electric-225 и Datanet-30. В феврале 1964 года оборудование было доставлено в колледж, а уже 1 мая Кемени и его коллеги протестировали первую программу в интерактивном режиме разделения времени. Доработанный студентами интерпретатор получил название Dartmouth BASIC.
Долгое время BASIC не имел компилятора, который бы позволял создавать полноценные исполняемые файлы. Лишь в конце 1975 года двумя программистами-любителями Диком Уипплом и Джоном Арнольдом был создан первый компилятор. В том же 1975 году фирма Micro Instrumentation and Telemetry Systems выпустила свою версию языка BASIC. Ее создатели – никому до того не известные программист фирмы Honeywell Пол Аллен и его друг - студент младших курсов Гарвардского университета Билл Гейтс.
Одно время популярность BASIC’а была столь велика, что персональные компьютеры выпускались с его интерпретатором, прошитым прямо в ПЗУ и доступным сразу после включения (классический пример - Sinclair ZX Spectrum).
Фирма Microsoft до сих пор развивает линейку языков Visual Basic, последние представители которой стали полноценными объектно-ориентированными языками с простым синтаксисом, поддержкой динамической типизации и компонентных технологий Microsoft. Популярны их отпрыски: VBScript, предназначенный для написания скриптов операционной системы Windows (до появления Power Shell) и Internet, а также VBA (Visual Basic for Applications), позволяющий расширять функциональность программных продуктов. По сути, новые реинкарнации Бэйсика не имеют ничего общего с прародителем, кроме некоторых удачных синтаксических конструкций.

  1. PASCAL и MODULA
Среди десятка наиболее распространенных к середине 60-х годов языков программирования каждый был ориентирован на решение определенных задач. Бейсик употреблялся для написания простых программ. FORTRAN  (с его четко определенными правилами выполнения арифметических операций) являлся классическим языком программирования для решения математических и физических задач. COBOL был задуман как основной язык для массовой обработки данных в сферах управления и бизнеса. ALGOL формально был универсальным и позволял прекрасно проводить структурную декомпозицию сложных алгоритмов, но был не очень практичным.
В 1965 году Международная федерация по обработке информации (IFIP), образованная в 1960 году, предложила специалистам в области информатики принять участие в разработке нового языка программирования – преемника ALGOL-60. Среди них был швейцарский ученый Никлаус Вирт, работавший доцентом на факультете информатики Стэнфордского университета. Он принял участие в разработке проекта языка под названием ALGOL-W. IFIP этот проект отклонила, признав победителем проект языка ALGOL-68 Аад ван Вейнгаартена.
Однако Никлаус Вирт по возвращению в Швейцарию в 1967 году не прекратил работу по созданию нового языка. Результатом  стала первая версия языка Pascal, появившаяся в конце 1968 г. Язык был назван в честь великого французского математика и физика Блеза Паскаля, который в 1642 году изобрел «паскалево колесо» механическое устройство для выполнения арифметических операций. Аналогично Бэйсику, который стал побочным продуктом преподавательской деятельности Кемени и Курца, Паскаль своим появлением также в какой-то степени обязан преподавательской деятельности Никлауса Вирта. Через два года совместно с другими сотрудниками Швейцарского федерального института технологии (ETH) в Цюрихе был разработан первый вариант компилятора. В 1971 году Вирт выпустил общедоступное описание своего языка.
Pascal вызвал интерес у различных групп пользователей, и после апробации и получения отзывов и предложений в 1974 году была разработана новая версия языка. В следующем году было опубликовано руководство пользователя языка Pascal, которое, по словам Н. Вирта, вполне можно рассматривать как стандартное определение языка.
Другие достоинства языка были предопределены двумя основополагающими статьями профессора Ч. Хоара, опубликованными на рубеже 60-70-х годов: «О структурной организации данных» и «Аксиоматическая основа программирования для вычислительных машин». Вирту, известному своей категоричностью, принадлежит знаменитая фраза «Практически невозможно научить хорошему программированию студентов, первоначально ориентированных на BASIC. Как потенциальные программисты они умственно оболванены без надежды на исцеление». В 1972 году Pascal объявлен официальным языком программирования для учащихся средних школ, которые намерены специализироваться в области вычислительной техники и программирования в американских университетах. К середине 70-х годов назрела необходимость разработать международный стандарт на Паскаль. В результате, в 1982 году появился стандарт ISO 7185:1983, который был пересмотрен в 1990 году. В то же время, стандартный Паскаль обладал рядом существенных недостатков как язык промышленного программирования, что обусловило появление разнообразных расширений и потомков.
Сам Вирт после создания Паскаля не остановился на достигнутом и занялся созданием нового языка для профессионалов, который получил название  Modula (Модула). Модула стала известной с выходом второй версии в 1979 году. В первую очередь Модула отличалась от Паскаля тем, что предоставляла развитые средства модульного программирования, что требовалось для создания крупных программных комплексов. Язык достаточно широко использовался. Последнее обновление стандарта на него произошло в 1996 году (ISO/IEC 10514-1(2,3):1996).
Затем Вирт занялся простым, но мощным и красивым объектно-ориентированным языком Oberon (Оберон), также ориентированным на обучение.

  1. Ada
Язык Ada (Ада) был создан по заказу и при активной поддержке Министерства обороны США. В 1974 году в Министерстве осознали, что тратят слишком много времени и ресурсов на разработку и сопровождение встроенных компьютерных систем, к которым предъявляются повышенные требования в части надёжности и безопасности. После анализа существующих решений было признано, что не один из языков программирования и компиляторов не отвечает требованиям, предъявляемым военными. Как результат, в 1977 состоялся открытый конкурс среди разработчиков, который выиграла фирма Honeywell в лице ее подразделения Cii-Bull под руководством Ж. Ишбиа. Главными требованиями к новому языку были надёжность, эффективность и удобство сопровождения. Язык был назван в честь Августы Ады Лавлейс – дочери английского поэта Дж. Байрона, которая вошла в мифологию ИТ как первая в мире программистка. Спецификации языка рождались в муках. Их окончательная версия появилась лишь в феврале 1983 года как стандарт ANSI/MIL-STD 1815A-1983. Эту версию языка обычно называют Ada-83.
Ада – канонический язык структурного и модульного программирования, который  предлагает множество дополнительных возможностей: создание ПО реального времени, параллельное выполнение подпрограмм, обработку прерываний. Синтаксис языка явно инспирирован Паскалем и Модулой. С самого начала Ада предназначалась для разработки больших программных комплексов с длительным жизненным циклом. При активной поддержке правительства США язык быстро развивался и распространялся в правительственных учреждениях. После утверждения международного стандарта ISO 8652:1987 начали появляться полноценные сторонние реализации, и язык распространился по всему миру. Ада подверглась значительному пересмотру в 1994 году, что привело к появлению версии Ada-95 (стандарт ISO/IEC 8652:1995), поддерживающей объектно-ориентированную парадигму программирования.
Ада – уникальный язык с точки зрения стандартизации. Его стандарты создавались одновременно с языком и его компилятором. Отметим, что в стандарте рассматривается не только синтаксис и семантика, но и эффективность реализации. Это позволяет намного более полно и точно сравнивать реализации. Однако это одновременно было и проблемой. Большинство исследователей отмечала проблемы выполнения всех требований стандарта компиляторами и сдвиг источника ошибок на более низкие уровни абстракции. 
В 2007 году язык был существенно дополнен, причём синтаксис языка был приведён в соответствие с ожиданиями программистов, «испорченных» другими популярными языками. Последняя версия стандарта принята в 2012 году (ISO/IEC 8652:2012).

  1. Simula и Smalltalk
Simula считается первым объектно-ориентированным языком. Оле Дал и Кристен Нугард из Norwegian Computing Center (организации, созданной в 1952 году для поддержки статистических исследований) начали его разработку в 1962 году в качестве языка моделирования сложных дискретных систем под впечатлением от возможностей и недостатков языка Алгол. В нём впервые были введены понятия объекта, класса, наследования и динамического связывания, сборки мусора. По сути, он является расширением Algol-60, аналогично тому, как Delphi является расширением Pascal. Наиболее известен вариант Simula-67, представленный в 1970 году. Он широко не использовался (в первую очередь из-за недостаточно качественных, малоэффективных и медленных компиляторов), но оказал большое воздействие на дальнейшее развитие объектно-ориентированных языков (особенно на C++).
Но родоначальником современных ОО-языков считается Smalltalk, созданный в 1972-77 годах в знаменитой лаборатории PARC (Paolo Alto Research Center) фирмы Xerox. В его создании принимали участие многие известные исследователи (Алам Кэй, Дэн Ингаллс, Тед Кэглер, Адель Голдберг и др.). Помимо того, что Smalltalk был первым чистым объектно-ориентированным языком, он был первым языком, поддерживающимся визуальной средой разработки. Язык стандартизирован в варианте Smalltalk-80.
Язык активно развивается до сих пор во множестве продуктов (например, Squeak, Cincom Smalltalk фирмы Cincom Systems, Smalltalk/X фирмы eXept Software, Dolphin Smalltalk фирмы Object Arts).

  1. С
Язык C (произносится как «Cи») создан в 1972 году сотрудниками Bell Laboratories Д. Ритчи, К. Томпсоном и Б. Керниганом. Он стал основой и одним из результатов работ над операционной системой UNIX, которая была представлена общественности в 1973 году. С тех пор большая часть UNIX и его потомков так и пишутся на этом языке. С самого начала UNIX распространялся в академической среде практически бесплатно, а вместе с ним  распространялся и C. Благодаря эффективности исполнения программ, написанных на этом языке, он получил широкое распространение. До сих пор C – один из наиболее широко используемых языков системного программирования. Он стандартизован в 1989 году, стандартная версия языка обозначается ANSI C.
Язык С специально проектировался так, чтобы программист мог без проблем работать с аппаратурой на низком уровне, но с использованием мощных структурных управляющих конструкций. Это делает его исключительно гибким и эффективным, но за это приходится расплачиваться надёжностью, поскольку мощные конструкции и структуры данных практически не проверяются компилятором. С – простой и удобный инструмент в руках профессионального системного программиста или разработчика предельно эффективных библиотек. Разработка крупных программных комплексов командами разработчиков разной квалификации с использованием C серьёзна затруднена.
Одно из требований к современному универсальному ЯПВУ - удобная интеграция с объектным кодом, генерируемым компиляторами С.

  1. C++
В середине 1980-х годов Бьярн Страуструп, также работавший в Bell Laboratories, добавил в язык С поддержку объектно-ориентированного программирования, аналогичную той, которую предоставлял язык Simula. Получившийся язык был назван C++ (произносится как «Си-плюс-плюс»), Помимо ООП, C++ получил и другие преимущества, но сохранил большинство особенностей языка С. C++ – наиболее подходящий язык для обновления систем, написанных на С. Он сочетает мультипарадигменность, гибкость, эффективность, достаточно низкий уровень. За это приходится расплачиваться низкой надёжностью, сложностью и трудностью создания компилятора.
Наиболее известными реализациями компилятора C++ являются свободный кросплатформенный GNU C++ Compiler (gcc), Microsoft Visual C++ для операционных систем Windows и Intel C++ Compiler, позволяющий использовать все возможности процессоров фирмы Intel.

  1. Java
Java (произносится как «Джава», хотя многие произносят «Ява» по аналогии с географическим названием) – объектно-ориентированный язык программирования, разрабатываемый фирмой Sun Microsystems с конца 1991 года и официально выпущенный 23 мая 1995 года. Главными задачами при разработке языка стали: обеспечение безопасности выполнения программ, повышение надёжности, максимальная совместимость с оборудованием (сравните с требованиями к Ada).
Программы на Java сначала транслируются в байт-код, который затем выполняется виртуальной Java-машиной (JVM) – программой, исполняющей байт-код на конкретном оборудовании. Байт-код, в отличие от исходного текста, обрабатывается значительно быстрее. Сама идея использования байт-кода была предложена задолго до появления Джавы (например, её использовал Вирт). Использование Java-машины (или аналогичных виртуальных машин) позволяет добиться высокой защищённости информационный системы в целом.
Java – это не только язык, но и набор платформ для создания систем различного уровня и назначения:
  1. J2EE (Java EE, Java Enterprise Editon) для создания корпоративных информационных систем;
  2. J2SE (Java SE, Java Standard Editon) для создания приложений для персональных компьютеров;
  3. J2ME (Java ME, Java Micro Edition) для создания приложений для мобильной техники, встроенных систем и других сильно ограниченных по ресурсам вычислителей.
Sun не захотела (кто-то считает, что не смогла) стандартизировать язык в ISO. Вместо этого Java стандартизуется сообществом разработчиков в рамках Java Community Process. Сейчас Java-программы могут выполняться практически всюду, где может найтись какой-либо универсальный процессор - от умных часов до суперкомпьютеров.

  1. Turbo Pascal, Delphi и Free Pasccal
Вдохновителем создания языка Turbo Pascal стал Андерс Хейлсберг, который в 1980 году написал свой вариант компилятора Паскаля и удачно продал его фирме Borland, которая после этого предложила ему работу. Хейлсберг согласился и проработал там главным архитектором до 1996 года. Затем он перебрался в Microsoft, где возглавил проектирование концепции общеязыковой среды (CLI) и языка C#. Победоносное шествие компиляторов Turbo Pascal началось в 1984 году с появлением версии Turbo Pascal 2.0. Развитие языка и библиотек шло в хорошем темпе. Версии  4.0 и 5.0 вышли соответственно в 1985 и 1988 году, добавив возможность модуляризации, интерфейс взаимодействия с MS-DOS и встроенный отладчик. После выхода шестой версии Turbo Pascal сменил имя на Borland Pascal и стал поддерживать объекты (Pascal with Objects), хотя и не стал полноценным ОО-языком. Он оказался настолько удачным, что используется до сих пор, особенно в качестве средства учебного назначения.
Компиляторы от фирмы Borland обладали завидным быстродействием, поддерживали все особенности операционной системы MS-DOS и поставлялись с богатыми и удобными библиотеками. Наиболее известной библиотекой стала объектная Turbo Vision, назначением которой было создание оконного интерфейса с пользователем в текстовом режиме работы дисплея.
В 1994 году вышла интегрированная среда разработки Delphi, поддерживающая язык Object Pascal – наследник Borland Pascal. Delphi 1 была первой средой разработки Windows-приложений, объединившей в себе оптимизирующий компилятор, визуальную среду разработки и мощные возможности доступа к базам данных. Годом позже Delphi 2 предложила все то же, но на новом уровне современных 32-битных операционных систем Windows 95 и Windows NT. Кроме того, Delphi 2 предоставил программисту 32-битный компилятор. Команда разработчиков Delphi представляла новые версии примерно раз в 1,5 года. При выпуске версии 6 язык Object Pascal был официально переименован в Delphi. После выпуска версии 7 у фирмы Borland началась полоса коммерческих и маркетологических неудач, и в 2006 году было принято решение о выделении отдела DevCo, занимавшимся созданием сред разработки, в отдельную фирму, названную CodeGear. Затем фирма CodeGear была куплена фирмой Embarcadero, но язык и среда продолжали планомерно развиваться. Среда сменила название на RAD Studio, а язык обрёл срезу несколько компиляторов: 32-разрядный, 64-разрядный, для мобильных устройств и др.
С конца 1990-х годов развивается проект реализации свободно распространяемого кросс-платформенного компилятора языка Pascal под названием Free Pascal, причём проект нацелен на максимально возможную совместимость с языком Delphi. Отметим, что многие считают именно Free Pascal наследником Turbo Pascal, и на web-сайте проекта есть страничка, описывающая отличия и тонкости портирования кода (http://www.freepascal.org/port.var).

  1. C#
C# (произносится как «Си-шарп») – объектно-ориентированный язык программирования для платформы Microsoft .NET, разработанный в 2000 году Андерсом Хейлсбергом, Скоттом Вилтамутом и Питером Гольде. Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности выполнения кода. C# разрабатывался «с нуля» и вобрал в себя много полезных свойств языков C++, Delphi, Java, Visual Basic и др. Необходимость обратной совместимости с какими-либо языками отсутствовала, что позволило C# решить большинство проблем, за которые критиковали предшественников. Он имеет прекрасную поддержку компонентов, надежен и устойчив благодаря строгой типизации с поддержкой шаблонов, использованию «сборки мусора», обработки исключений. Новых идей в языке мало, но старые переработаны так, что он действительно стал языком нового поколения.
Разработано уже пять версий языка C#, причём версии 1.2 и 2.0 стандартизированы в ECMA и ISO. Новые версии приурочиваются к выходу очередных версий Visual Studio и синхронизированы с изменениями самой инфраструктуры (платформы) .NET.
С 2014 года Microsoft среди других проектов, сменивших лицензию и стиль разработки, сделала открытым проект развития оптимизирующего компилятора языка C# под названием Roslin (https://github.com/dotnet/roslyn).

  1. D
Уолтер Брайт, работающий в фирме Digital Mars, начал разрабатывать язык D в 1999 году. Он является не эволюционным развитием языка С, как С++, а практически полным «редизайном». Итоговая версия явно вобрала идеи не только C++, но также Java, C# и Eiffel. D предлагает элегантные синтаксические конструкции при полном отсутствии неоднозначности в грамматике, поддерживает «сборку мусора» (но не запрещает прямой доступ к памяти) и модульное тестирование, на уровне ядра вводит типы данных «строка» и «отображение».

  1. Perl, Python, PHP и другие
С развитием Интернета резко выросла популярность универсальных интерпретируемых языков. Кроме Java, который развивался (как язык) достаточно медленно, появилось много других языков, призванных упростить разработку программного обеспечения не требовательного к производительности, но жизненный цикл которого очень насыщен изменениями. Их родословная восходит к командным языкам оболочки ОС Unix, которые позволяют автоматизировать действия пользователя путём создания скриптов.

Скрипт (сценарий) [script] – относительно небольшая последовательность команд (макрос), исполняемая приложением или операционной системой при выполнении некоторых условий (например, при регистрации пользователя в системе) или путём явного вызова. Скриптовые языки (языки сценариев) обычно специализированы и являются интерпретируемыми, а сами скрипты хранятся в виде обычных текстовых файлов.
С развитием глобальной сети Internet скрипты пережили второе рождение и стали активно развиваться, превращаясь в универсальные кросплатформенные интерпретируемые языки быстрого прототипирования и «склейки» приложений.
Язык Perl (сокращение от «Practical Extraction and Report Language» язык извлечения и составления отчетов) был создан в 1986 году Ларри Воллом для упрощения обработки больших массивов регулярных текстов. К настоящему времени Perl дорос до версии 6. Он всё ещё широко используется, хотя его популярность снизилась с появлением Python, PHP и Ruby.
Python («Питон» не сокращение, а просто змея) Гвидо ван Россум начал разрабатывать в 1991 году под впечатлением от языка ABC. С 2001 года язык развивается сообществом Python Software Foundation. В результате Python стал дружелюбным к программисту объектно-ориентированным языком сверхвысокого уровня со строгой динамической типизацией и автоматической сборкой мусора. Интересной особенностью Питона является отсутствие операторных скобок и выделение управляющих конструкций отступами от начала строки, что в принципе не позволяет написать совсем непонятный по структуре исходный код. Сейчас активно развивается третья версия языка.
PHP (сокращение от «Hypertext PreProcessor» препроцессор гипертекста) язык программирования, созданный для динамической генерации HTML-страниц на основе информации из баз данных web-сервера. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров. Входит в LAMP «стандартный» набор для создания веб-сайтов (Linux, Apache, MySQL, PHP (Python или Perl)). Его разработку начал Расмус Лердорф в 1994 году. Первые две версии были не более, чем видоизменённым Perl. Начиная с третьей версии разработкой занялись Энди Гутманс и Зив Сураски, которые превратили его в полноценный универсальный язык. PHP часто описывают как «смесь C и Perl». Сейчас развивается шестая версия языка.

  1. Декларативные и функциональные языки
Все рассмотренные выше языки были императивными (возможно, с элементами функциональной парадигмы). Что же касается менее традиционных языков, то следует обязательно упомянуть о языках  LISP, PROLOG и РЕФАЛ.
Чисто функциональный Язык LISP (сокращение от «List Processing Language», произносится как «Лисп») разработан Дж. Маккарти в США ещё в 1958 году. Он стал основой ряда программных реализаций интеллектуальных систем и дал толчок к разработке множества специализированных языков искусственного интеллекта и языков представлений знаний. В 1994 году принят стандарт ANSI на диалект Common Lisp.
PROLOG (сокращение от «PROgramming in LOGic») – это первый язык программирования, основанный на логическом выводе из базы фактов. Это роднит его с искусственным интеллектом. Фактически, на основе ряда начальных данных (аксиом) в соответствии с правилами логики, указывающими рамки поиска пути к решению, язык самостоятельно приходит к некоторым выводам. То есть программист описывает не то, как надо решать некоторую задачу в императивном стиле, a лишь формализует базу фактов в виде набора предикатов и задачу в виде дополнительного предиката, истинность которого надо доказать, а PROLOG сам ищет решение. Из-за необычности своей структуры он используется при решении достаточно нестандартных задач, поэтому оказался распространен не так широко, как другие языки. Разработка Пролога была начата Аланом Колмари, сотрудником университета в Лумини, Франция, в 1970 году. В 1972 году совместно с Филиппом Расселом был создан первый компилятор. Язык прекрасно чувствует себя в своей нише и методично развивается. Он стандартизирован ISO в 1995 году. Сейчас популярная среда Visual Prolog рзвивается фирмой PDC .
Третьим языком, который привнёс в эту область интересные идеи, стал язык символьной обработки РЕФАЛ (сокращение от «язык РЕкурсивных Функций АЛгоритмический», на английском языке известен как Refal), созданный В. Турчиным в 1966 году. Подобно LISP’у, этот язык активно использует мощные средства преобразования списков на основе концепции сопоставления с образцом. Последняя версия языка Refal-7 была разработана в 2005 году.
Языки функционального и логического программирования играют важную роль в программировании. С одной стороны, они позволили осуществить разработку и реализацию ряда практически важных систем аналитических преобразований, интеллектуальных систем и так далее, а с другой – именно эти языки породили целый спектр исследований, результатом которых стала разработка и реализация языков представления знаний. Такие языки – важнейшее средство реализации типичных спецификаций проблем информационной интеграции, и, следовательно, они с успехом претендуют на роль языков сверхвысокого уровня, а их элементы всё чаще появляются в языках общего назначения.

2 comments:

  1. А почему столь значимые языки, как Haskell и Erlang тут не отмечены?

    ReplyDelete
  2. Прямо по Козьме Пруткову - Никто не обнимет необъятного. Из примерно 2500 известных языков программирования более 200 тех, которые хотелось бы отметить. А этот текст, к тому же, уже устарел. Надо писать про Rust, Nim, Julia, Scala, ..

    ReplyDelete