[sc-programming] [1-сентября] история и развитие ЯП
когда-то в институте (ой-ой-ой... КАК же это было давно... 2003! год) преподаватель по английскому попросила меня подготовить небольшой обзор по языкам программирования для студенток с кафедры Лингвистики и перевода — типа познакомить их с еще парой десятков "иностранных" языков 😊
и вот, я сегодня с утра вспомнил об этом реферате и подумал, что было бы вполне уместно и даже в чем-то символично опубликовать его в день знаний в рамках проекта @sc-programming, как некую ознакомительную историю, понятную даже тем, кто с техникой на ВЫ
полтора часа рылся в недрах всех своих накопителей информации! быстрее было бы загуглить и существенно освежить текст, НО это же неспортивно... и, в итоге, я таки нашел сий раритет!
Введение
В одном энциклопедическом словаре по поводу того, что такое язык, сказано буквально следующее:
«ЯЗЫК, 1) естественный язык, важнейшее средство человеческого общения. Я. неразрывно связан с мышлением; является социальным средством хранения и передачи информации, одним из средств управления человеческим поведением. Я. возник одновременно с возникновением общества в процессе совместной трудовой деятельности первобытных людей. Возникновение членораздельной речи явилось мощным средством дальнейшего развития человека, общества и сознания. … 2) Любая знаковая система, напр. Я. математики, кино, Я. жестов. См. также Искусственные языки, Язык программирования. 3)…»Так, для компьютера язык программирования является чем-то вроде естественного языка для человека. С его помощью человек программирует компьютер для решения каких-либо задач своей деятельности. Языки программирования имеют примерно полувековую историю и достаточно богатую эволюцию за этот короткий промежуток времени.
Fortran
Итак, первым был Fortran. Он появился в 1957 году. Но работы по его разработке начались намного раньше. С 1954 годов группа инженеров всем известной (теперь) компании IBM под руководством Джона Бекуса занималась созданием компилятора для Fortran. Эти работы велись более 2-х лет и, в конце концов, привели к созданию нового языка. Fortran — это сокращение от двух английских слов FORmula TRANslator — что переводится как "транслятор формул". Как видно из названия, первоначально язык создавался с целью использования при математических расчетах. Он предназначался для написания программ, используемых при решении прикладных технических задач. Основу языка составляли арифметические операторы, соответствующие по своему синтаксису традиционной записи математических выражений. В дополнение к этому в языке имелись средства разбиения сложных алгоритмов на более простые за счет явного определения подпрограмм (SUBROUTINE) и функций (FUNCTION). Описания данных в Fortran были ориентированы на представление главным образом числовой информации, поэтому и типы данных были просты: это целые и действительные числа, а также массивы из таких чисел. Поскольку Fortran обладает хорошо развитым математическим аппаратом, и под него за время его существования было написано множество удобных и полезных библиотек, он до сих пор иногда используется при программировании сложных вычислений. Первая версия была предназначена специально для компьютера IBM-704, который работал на лампах (!). Позднее появились более проработанные версии. Версия стандарта Fortran77 стала особенно популярна. Стоит заметить, что это был первый пример коммерчески успешного языка. Fortran не умер и сегодня, как думают многие, хотя область его применения остается достаточно специфической.
COBOL
ЭВМ между тем развивались, и становилось понятным, что с их помощью можно решать самые разнообразные проблемы, зачастую не связанные с научными приложениями. Поэтому постепенно разрабатывались и компиляторы других языков программирования. Так в конце 1959 года в США группа разработчиков представила совершенно новый универсальный язык программирования COBOL — это аббревиатура от Common Business-Oriented Language — универсальный язык, ориентированный на задачи бизнеса. Особенно эффективно программы, написанные на COBOL, производят простые арифметические операции с большими массивами данных, что довольно часто приходится делать в бухгалтерских расчетах. В нашей стране этот язык тоже достаточно широко использовался, причем он, один из немногих, был переведен на русский язык.
Algol
Тем не менее, языков программирования было все еще мало, да и те, что были, не всегда устраивали привередливых разработчиков. Поэтому ряд ведущих программистов в Цюрихе представили в 1958 году свое новое детище — Algol (сокращение от ALGOrithmic Language — алгоритмический язык программирования). Первая версия языка так и называлась — Algol-58, а позднее, в 60 году, уже в Париже, был принят стандарт Algol-60, который и стал основным на долгие годы, и хотя несколько раз вносились новые поправки и дополнения, это название оставалось неизменным до 1968 года. Язык приняли неоднозначно. В США Algol не получил широкого распространения, зато европейцы сразу приняли Algol. Основная заслуга этого языка в том, что он заложил базу для дальнейшего развития программистской мысли, и многие языки программирования, разработанные впоследствии, содержат многие идеи и решения, взятые из Algol.
- В первую очередь, это создание специальной нотации для определения синтаксиса алгоритмических языков (нотация Бэкуса-Наура).
- Во-вторых, доведение до логического завершения самой концепции операторных алгоритмических языков с заранее фиксированными типами данных и блочной структурой.
Из дополнительных нововведений можно выделить возможность разработки отдельных модулей проекта независимо друг от друга, а также реализацию вызовов фрагментов кода программы, способов передачи параметров между процедурами и функциями.
BASIC
Отцы-основатели BASIC — два ярких представителя программистов старшего поколения, сотрудники математического факультета Дармутского колледжа Томас Курц и Джон Кемени. Их идея была в создании языка программирования, который бы подходил для обучения азам программирования, то есть был бы легок для освоения студентами. Воображение легко рисовало язык, состоящий из английских слов, понятных и программисту, и компьютеру. Операторы нового языка должны были обладать сходством с операторами языка Fortran для возможности легкого перехода на новый уровень программирования. Некоторые идеи Кемени и Курца отличались от существовавших тогда "принципов". BASIC оказался универсальным языком в отличие от, например, COBOL. А его простота позволяла использовать преимущества ЭВМ как математикам и инженерам, так и филологам и социологам. Летом 1963 года Кемени начал разрабатывать первую версию компилятора для языка BASIC. Долгое время BASIC не имел компилятора или интерпретатора, который бы позволял создавать полноценные исполняемые exe-файлы.
И лишь в конце 1975 году был создан первый его интерпретатор. Он был создан двумя программистами-любителями — Диком Уипплом и Джоном Арнольдом. В том же 1975 году фирма Micro Instrumentation and Telemetry Systems выпустила свою версию языка BASIC. Ее создатели — никому не известные программист фирмы "Хониуэл" (Honeywell) и студент младших курсов Гарвардского университета Пол Аллен, а также его нерадивый приятель Билл Гейтс. Одно время популярность BASIC была столь велика, что PC выпускались с его интерпретатором, прошитым прямо в ПЗУ компьютера. Самым популярным стал M-BASIC, первый коммерческий успех молодой компании Microsoft Corporation.
К слову сказать, Microsoft до сих пор продвигает своего первенца — теперь это уже хорошо разросшийся Visual Basic — целый пакет визуального программирования и его аналог для программирования в Internet — VBScript.
PL/1
Еще один очень интересный пример языка, сошедшего с пути исторического развития, о котором сегодня помнят разве что специалисты, — PL/1. Все началось с того, что уже упоминавшаяся ранее фирма IBM в 1961 году решила начать разработку новой ЭВМ. Вместе с новой машиной разрабатывался и язык: он совмещал особенности трех лидеров данного сектора рынка — Fortran, COBOL и Algol. Главой проекта стал Джорж Рэдин. Менее чем за год все необходимые работы были проведены, и появился первый компилятор. Свое название язык получил как аббревиатуру от Programming Language One PL/1. Разработчики далеко не всегда брали от его "родителей" все самое лучшее, как следствие, язык получился перегруженным возможностями и концепциями.
Pascal
Влияние Algol на развитие других языков программирования оказалось значительным. Среди языков, целью создания которых было улучшение Algol, следует особо отметить Pascal, разработанный в конце 60-х годов швейцарским ученым Никлаусом Виртом. Pascal был назван в честь французского философа и математика XVII века Блеза Паскаля. Никлаус Вирт был профессором информатики в Федеральном техническом университете в Швейцарии и нуждался в языке, с помощью которого относительно легко можно было бы обучать студентов навыкам программирования на хорошем уровне. Базовая концепция Pascal была разработана Виртом примерно в 1970 году, и Pascal очень быстро начал повсеместно распространяться, прежде всего, благодаря легкости в изучении и наглядности написанных на нем программ. Язык Pascal требовал от программиста определения всех переменных в отдельной секции в начале программы. Так как эти определения задавались явным образом, то в программах появлялось сравнительно немного ошибок, и их было проще понять и исправить разработчику. Это сделало Pascal популярным при создании больших программ. В 1962 году он был объявлен официальным языком программирования для учащихся средних школ, которые намерены специализироваться в области вычислительной техники и программирования в американских университетах.
Modula-2
В то же время, стандартный Pascal обладал рядом существенных недостатков. Поэтому Вирт продолжил развивать свое детище, так через девять лет, в 1979 году, появилась Modula-2, прежде всего от Pascal она отличалась тем, что давала возможность использовать модульное программирование, а значит, с ее помощью уже можно было создавать достаточно большие проекты. К середине 70-х годов назрела необходимость разработать международный стандарт на Паскаль. В результате, в 1982 году появился стандарт ИСО 7185.
Ada
Но Вирт не останавливался на достигнутом, и немного позднее появились Ada и Oberon, которые позволяли использовать типы и объекты, что уже давало кардинально новые возможности для разработчиков. Язык Ada был создан фактически по заказу Министерства обороны США и, соответственно, при его активной поддержке. Был проведен конкурс среди разработчиков, и его выиграла некая фирма Honeywell в лице ее подразделения Cii-Bull с руководителем Ж. Ишбиа. Язык был назван в честь Августы Ады Лайвейс — дочери английского поэта Дж. Байрона, которая считается первой программисткой. Окончательная версия спецификаций языка Ada появилась в феврале 1983 году, она и стала основной. Ada до сих пор считается современным языком с традиционной структурой управления, возможностями определения типов и подпрограмм. Удовлетворяет язык и требованиям модульности. В дополнение к классическим свойствам язык обеспечивает программирование задач реального времени, а также возможности моделирования параллельного решения задач и обработку прерываний. Учитывая то, какую серьезную (моральную и не только) поддержку предоставляли правительство и Министерство обороны США, неудивительно, что язык очень быстро развивался и без особых проблем распространялся. Завершающим шагом была выработка все тем же министерством нового стандарта языка: ISO/les 8652:1985 (E), который описывает версию языка Ada95. Примечательно, что именно эта версия стала первой в мире объектно-ориентированной системой программирования, которая имела международный стандарт. Но все-таки оба эти языка (Ada и Ada95) не получили широкого распространения вне военных и проектов крупного масштаба.
FORTH
Язык программирования FORTH был разработан Чарльзом Муром. Первоначально язык назывался FOURTH, однако на ЭВМ, на которой он работал, символьные имена могли иметь только пять букв. Так язык стал называться FORTH. Несмотря на конкуренцию других языков программирования, в частности языка C, FORTH мало-помалу стал завоевывать популярность, особенно при решении задач управления сложными объектами в реальном времени. Язык FORTH использовался для математического обеспечения корабля многоразового использования типа Шаттл, спутников Земли, для разработки телеигр, при создании мультфильмов Stars Wars и т.д. В 1976г. комитет международного астрономического союза принял FORTH в качестве стандартного языка программирования. Позднее FORTH применялся для создания экспертных систем, систем искусственного зрения, автоматизации анализа крови и кардиологического контроля.
Turbo Pascal, Delphi
В сознании большинства людей (особенно молодого поколения, тех, кому еще нет 30), Pascal обычно ассоциируется с Turbo Pascal от фирмы Borland — это не верно! Ведь Turbo Pascal включает в себя многие положительные качества как Modula, так и Oberon, и является гораздо более сложным и мощным языком, чем Pascal Вирта. Судите сами: он позволяет использовать и модули, и типы, и даже объекты, давая всю мощь объектно-ориентированного программирования в руки разработчика. Как же он возник? Никлаус Вирт здесь совсем не при чем, а при чем — Андерс Хейлсберг, которого и следует считать отцом-создателем Turbo Pascal, вскоре вытеснившего с рынка все другие спецификации. Это победоносное шествие началось в 1984 году с появлением версии Turbo Pascal 2.0, ее распространение шло стремительными темпами. Версии 3.0, 4.0 и 5.0 выходили соответственно в 1985 и 1988 годах (последние две). В них появилось несколько революционных нововведений: возможность разбивать программу на несколько файлов (модулей), интерфейс взаимодействия с MS-DOS и встроенный отладчик. От версии к версии оптимизировалась работа компилятора, который генерировал исполняемый код на основе текста программы. Даже достаточно простые программы, перенесенные с других языков программирования, не использующие всех возможностей, которые давал Паскаль, после компиляции начинали работать существенно быстрее.
Последующее развитие Pascal привело к появлению таких библиотек, как Turbo Vision, с использованием которой написан, наверное, всем известный, Dos Navigator, а также языка Object Pascal, который впоследствии стал основой для создания Delphi.
Delphi - компилятор языка Object Pascal. Delphi 1 был первым инструментарием разработки Windows-приложений, объединившим в себе оптимизирующий компилятор, визуальную среду программирования и мощные возможности работы с базами данных. Годом позже Delphi 2 предложил все то же, но на новом уровне современной 32-битной операционной системы Windows 95 и Windows NT. Кроме того, Delphi 2 предоставил программисту 32-битовый компилятор, создававший более быстрые и эффективные приложения, мощные библиотеки объектов. Современный Delphi 7 является очередным шагом в эволюции компиляторов Pascal. Основной недостаток Delphi - скорость работы, она очень и очень невысока. Да и генерируемый компилятором код получается увесистым и неуклюжим.
C, C++
Язык C был разработан и реализован Д. Ричи в 1972г. в фирме Bell Labs, использовался в самых различных приложениях, в основном под управлением операционной системы UNIX. Он представлял собой дальнейшее развитие языка B, который основывался на созданном в Кембриджском университете языке BCPL (от Basic Combined Programming Language — базовый комбинированный язык программирования), который в свою очередь был потомком Algol-60. В 1977г. была начата работа по созданию машинно-независимой версии транслятора с языка C.
Первые версии языка программирования C++ (тогда он назывался "C с классами") были разработаны в начале 80-х годов Бьярном Страуструпом, сотрудником знаменитой AT&T Bell Labs, где ранее были разработаны операционная система UNIX и язык программирования C. По признанию самого автора языка, C++ никогда не разрабатывался на бумаге. Проектирование, реализация и документирование новых возможностей происходили фактически одновременно. Единственной целью разработки было создание языка, на котором было бы удобно программировать автору и его друзьям. За основу был взят популярный в среде профессиональных разработчиков язык программирования C. Первыми средствами, которыми был расширен C, стали средства поддержки абстракций данных и объектно-ориентированного программирования.
C 1985 года в язык были введены новые возможности: множественное и виртуальное наследование, шаблоны функций и классов, обработка исключительных ситуаций. Кардинально изменена семантика совместного использования оператора new, изменен синтаксис для вложенных классов. С момента опубликования и до настоящего момента язык постоянно усовершенствовался и расширялся. Важным этапом в его развитии стала публикация в 1990 году подробного и достаточно строгого описания языка. Фактически одновременно с этим началась стандартизация языка. Инициатором стандартизации выступил не автор языка. Более того, Страуструп всегда довольно прохладно относился к попытке его полной стандартизации.
Ключевым понятием C++ является класс. Класс — это определяемый пользователем тип. Классы обеспечивают упрятывание данных, их инициализацию, неявное преобразование пользовательских типов, динамическое задание типов, контролируемое пользователем управление памятью и средства для перегрузки операций. В языке C++ концепции контроля типов и модульного построения программ реализованы более полно, чем в C. Кроме того, C++ содержит усовершенствования, прямо с классами не связанные.
Существует классификация, согласно которой все языки делятся на вычислительные и языки символьной обработки. Можно сказать, что все вышеперечисленные языки относились к первому типу. Что же касается языков обработки символьной информации, то следует упомянуть о LISP (сокращение от List Processing Language), Prolog (сокращение от Programming in Logic) и РЕФАЛ (алгоритмический язык рекурсивных функций).
LISP
Язык LISP разработан Дж. Маккарти в США. Он стал основой ряда программных реализаций интеллектуальных систем и дал толчок к разработке множества специализированных языков искусственного интеллекта и языков представлений знаний.
Prolog
Гораздо интереснее Prolog, появившийся в 1972 году. Он стоит особняком в ряду тех языков программирования, о которых мы успели рассказать. Пролог - это сокращение от PROgramming LOGic. Можно сказать, что он появился "на пустом месте", так как фактически при его создании ни один из известных языков не был взят за основу. Prolog разрабатывался Аланом Колмари — сотрудником университета в Лумини, и в отличиe от LISP — это европейский язык. В чем же его особенность? А вот в чем: это первый и, пожалуй, единственный язык программирования, основанный на логическом выводе и решении поставленной задачи. Это роднит его с искусственным интеллектом. Фактически, на основе ряда начальных данных (аксиом, фактов) в соответствии с правилами логики, указывающими рамки поиска пути к решению, язык самостоятельно приходит к некоторым выводам.
РЕФАЛ
Наконец, третьим языком символьной обработки, с появлением которого в эту область были внесены интересные идеи, стал язык РЕФАЛ, созданный В. Турчиным. Подобно LISP, этот язык активно использует мощные средства преобразования списков на основе концепции распознавания по образу.
Заключение
Языки символьной обработки сыграли важную роль в программировании. С одной стороны, они позволили осуществить разработку и реализацию ряда практически важных систем аналитических преобразований, интеллектуальных программ и так далее, а с другой — именно эти языки породили целый спектр исследований, результатом которых стала разработка и реализация языков представления знаний. Такие языки — важнейшее средство реализации типичных спецификаций проблем информационной интеграции, и, следовательно, они могут с успехом претендовать на роль языков сверхвысокого уровня.
Приведем в качестве иллюстрации ко всему вышеизложенному далеко не полную (и, возможно, не очень хорошо отражающую эволюцию языков программирования) схему...