10 самых влиятельных (и почти мёртвых) языков программирования

от автора

Гиллель Уэйн*, разработчик и консультант по формальной верификации, обратил внимание на статью «20 наиболее значимых языков программирования в истории», которую сам автор называет «нелепой, только что придуманной таблицей». По мнению Уэйна, эта характеристика вполне справедлива: автор таблицы называет Go «наиболее значимым», но не включает в список ALGOL, Smalltalk или ML. И не учитывает Pascal, потому что тот «почти мёртв». Абсурд! Это противоречит всей сути понятия «значимость в истории».

Так давайте обсудим некоторые «почти мёртвые» языки и причины их важности.

Дисклеймер: Да, не все из этих языков мертвы и забыты. Ведь большинство людей слышали о Smalltalk, правда? Также, скорее всего, в этой статье полно ошибок, ведь их легко допустить, когда вы анализируете 60-летнюю историю компьютерных вычислений. Не стесняйтесь возражать, если что-то заметите!

Дисклеймер 2: Да, некоторые из упомянутых здесь языков были «первыми изобретёнными», а другие — «первыми популярными». История — это сложно!

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.


Определение влияния

Небольшое предисловие о том, что стоит понимать под «влиянием». Простой факт того, что X был первым языком с функцией Z, не означает, что X действительно оказал влияние на Z. Несмотря на то что Absys, возможно, стал первым языком логического программирования, его большая часть строится на разработанном независимо Prolog. В конечном итоге есть только один точный показатель того, повлиял ли X на Y: цитирование. Что означает один из следующих вариантов:

  • Y ссылается на X в своем справочном руководстве

  • Y ссылается на статью, которая цитирует X

  • Автор Y заявляет: «На нас повлиял X»

Цитирование происходит по цепочке. Иногда в руководстве по языку Q упоминается документ R, который в свою очередь называет источником вдохновения статью S, где говорится о заимствовании идей из языка T. Таким образом, мы понимаем, что T оказал влияние на Q, даже если цепочка довольно длинная. Следовательно, для поиска нужной информации требуется изучить большое количество источников. Чтобы ускорить процесс, мы определяем область поиска с помощью эвристики.

Одним из эффективных методов является изучение сходств языков программирования. Крайне редко языки самостоятельно приходят к одинаковому синтаксису. Так что если два языка имеют схожий синтаксис, вероятно, один из них повлиял на другой. Например: даже не зная о проектных решениях Матца, мы понимаем, что на Ruby оказал влияние Smalltalk, так как оба языка используют метод select для фильтрации списка. Это не решающее доказательство. Возможно, разработка Матца независима, или же и на Ruby, и на Smalltalk повлиял один и тот же предшественник. Но оно дает нам точку отсчёта для начала поиска.

Языки

COBOL

Происхождение: CODASYL, 1960. COBOL сформировался в результате разделения разработки для бизнеса и науки. Тогда промышленные языки высокого уровня применялись либо для инженерных расчетов, либо для работы с данными. Все инженеры выбрали FORTRAN, в то время как в бизнес-сфере царил хаос из COMTRAN, FLOW-MATIC и других, поэтому Министерство обороны собрало комитет для создания единого универсального бизнес-языка. И им стал COBOL.

Он был одним из четырёх «родительских» языков, вместе с ALGOL, FORTRAN и LISP. Сегодня мы считаем его заурядным, но когда-то он был самым популярным языком в мире. На нём до сих пор работают многие из поддерживаемых бизнес-систем.

Значение: Синтаксис и семантика COBOL редко встречаются в современных вычислениях. Самым значительным нововведением COBOL является концепция структуры данных. В FORTRAN и ALGOL единственной доступной структурой данных был статический массив. Однако в COBOL можно было загружать структурированные файлы с иерархическими данными, которые автоматически преобразовывались в соответствующие переменные. Это стало предвестником современных структур данных.

Причина упадка: Сыграли два основных фактора. Первый: COBOL не перекликался с другими проектами PLT. На COBOL разрабатывали очень немногие. А значит, что вторые и третьи поколения языков, основанные на уроках своих предшественников, его почти не использовали. Это связано не столько с проблемами самого COBOL, сколько с результатом пренебрежительного отношения академического сообщества к процессу его создания. Организация CODASYL была коммерческой и, очевидно,

Для его написания требовалась вот такая специализированная клавиатура:

Клавиатура для APL (источник)

Клавиатура для APL (источник)

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

Значение: Обработка массивов. В эпоху, когда сложение двух списков чисел подразумевало использование map или цикла, APL предложил идею оперирования над всем массивом одновременно. Вот пример:

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

Нововведение APL привело к созданию R, numpy, pandas, Matlab и т.д. Также есть прямые наследники APL: J, Dyalog, K, Q. Они не столь успешны, но активно используются в финансовом секторе.

Причина упадка: очевидно, проблема в клавиатурах. Если нет возможности писать код на ASCII, много написать и не получится. Иверсон решил эту проблему в J, где вместо различных символов используются диграфы. Вместо ≠ используется ~:. Но это случилось в 1990 году, довольно поздно для популяризации радикально нового стиля программирования.

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

Дополнительная информация: Notation as a Tool of Thought

BASIC

Происхождение: Джон Кемени, 1964 г. Изначально это был упрощённый аналог FORTRAN, созданный для помощи в использовании компьютеров людям, не связанным с инженерией.

BASIC по-настоящему расцвёл в эпоху микрокомпьютеров. Первые из них не обладали достаточным объёмом памяти для компиляции программ на «полноценных» языках программирования, в то время как упрощённый компилятор BASIC можно было уместить примерно в 2 килобайта. Он стал общепринятым языком начинающих программистов. Если вы занимались программированием дома в 1970-х, то, вероятнее всего, писали на BASIC на микрокомпьютере.

Значение: BASIC стал первым языком с интерпретатором в режиме реального времени (Dartmouth Time Sharing System), опередив APL на год. А поскольку система APL была доступна только для клиентов IBM, долгое время выбор стоял The Choice of PL/I

SIMULA 67

Происхождение: Оле Даль и Кристен Нюгаард, 1967 год. Они модифицировали ALGOL для моделирования симуляций. Сначала разработали SIMULA I, имевший специализированный синтаксис для моделирования и выполнения задач. SIMULA I нашел применение на ранних этапах, но оба автора были недовольны «специализированностью» языка и большим количеством дублирующего кода в моделях. Они стремились создать более универсальную систему для описания объектов в целом, а не только для моделирования.

Концепция заключалась в том, что пользователи могли задавать новые типы, называемые «классами», с полиморфным разрешением функций. А затем — создавать функции моделирования как частный случай объектной системы, что упрощало бы настройку того, как все это работает, в соответствии с их конкретными потребностями.

Значение: Несмотря на то, что SIMULA не был первым «истинным» языком ООП, он стал первым языком с полноценными объектами и заложил основу, на которой строились последующие языки. В том числе разделение на классы и объекты, подклассы, виртуальные методы и защищённые атрибуты. Он стал источником вдохновения для большинства академических исследований в области объектов после 1967 года. Как CLU, так и ML указывали SIMULA в качестве источника основного влияния. Бьёрн Страуструп написал докторскую диссертацию по SIMULA, в конечном итоге многие идеи SIMULA были внедрены в язык C++.

Причина упадка: В докторской диссертации Страуструп заявил, что SIMULA слишком медленный для использования в больших масштабах. Медленный в духе «Удачи с выполнением задач, если не используете мейнфрейм». Стоит отметить, что Smalltalk-80, который развил эти идеи дальше, имел преимущество в виде дополнительных 13 лет действия закона Мура. И даже Smalltalk часто критиковали за излишнюю медлительность. Идеи, которые были в SIMULA, начали внедрять в более простые быстрые языки.

Pascal

Происхождение: Никлаус Вирт, 1970 год. Создан, чтобы сохранить суть ALGOL-60 после того, как ALGOL-68 показался Вирту слишком сложным. Сперва стал известен как язык «введения в computer science», и к началу 80-х годов стал вторым по популярности языком на досках объявлений о работе Usenet. Вирт рассматривал всё семейство — Pascal, Modula и Oberon — как единую концепцию языка.

Значение: Pascal не представил ни одной совершенно новой идеи. Это был намеренно консервативный язык, который стремился собрать и объединить в своих рамках лучшее из прошедшего десятилетия. Pascal вынес синтаксис ALGOL за пределы академического мира, и синтаксис присваивания ALGOL, :=, стал известен как «стиль Pascal». С этого момента большинство языковых особенностей, напоминающих ALGOL, скорее всего, были вдохновлены не им, а Pascal.

Хотя сам Pascal не был особенно инновационным, его разновидности такими были. Вирт также стал пионером концепции «пошагового улучшения» как метода написания совершенного программного обеспечения. В конечном итоге это привело к созданию Modula, который популяризовал модули первого класса, и Euclid — первого формального языка верификации, используемого на практике.

Причина упадка: В отличие от большинства других языков в списке, у Pascal не было серьезных структурных препятствий или сильного конкурента. Да, он конкурировал с C, но всё равно успешно существовал долгое время. Обычно говорят об эссе Why Pascal is not my favorite language («Почему Pascal не мой любимый язык»), но это слишком простой ответ, а история гораздо сложнее. Также довольно высокие места в рейтингах TIOBE и PYPA до сих пор занимает Delphi, так что Pascal не настолько мёртв, как тот же SIMULA. Точный же анализ упадка Pascal занял бы больше места, чем остальная часть данного эссе.

Дополнительная информация: Pascal and its Successors

CLU

Происхождение: Барбара Лисков, 1975 г. Лисков хотела поэкспериментировать с абстрактными типами данных. Вот и всё. Вот в чем суть CLU.

Значение: CLU, возможно, самый влиятельный язык, о котором никто не слышал. Итераторы? CLU. Абстрактные типы данных? CLU. Дженерики? CLU. Проверяемые исключения? CLU.

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

Причина упадка: CLU был демонстрационным языком; Лисков хотела, чтобы люди приняли ее идеи, а не конкретный язык. Так и случилось: почти каждый современный язык чем-то обязан CLU. Завершив работу над CLU, Лисков перешла к Argus, который должен был продемонстрировать идеи о параллелизме. Он не получил такого же признания, и в нём еще много нераскрытого.

Дополнительная информация: A History of CLU

ML

Происхождение: Робин Милнер, 1976 г. Милнер разрабатывал LCF Prover, одну из первых систем автоматического доказательства теорем. Если вы составили доказательство в правильном формате, LCF мог проверить его корректность. Чтобы помочь в написании доказательств, Милнер создал метаязык, основанный на надежных математических формализмах, что в то время означало строгие статические типы и функции высшего порядка. В конце концов написал здесь.

Значение: Иногда кажется, что Smalltalk — это «истинный» язык ООП, а такие языки как Java и Python — нет, но это не верно. ООП, как и любая другая парадигма, является продуктом множества различных влияний. Но язык определенно популяризовал саму идею. Если вы откроете любую книгу по общей теории ООП из середины 80-х или начала 90-х, она будет на Smalltalk. Кто-то переведёт свои примеры на C++, некоторые — на другие языки, но все будут использовать Smalltalk.

Smalltalk также популяризовал идею о объектах как о передаваемых данных, что привело к появлению CORBA, и вдохновил создание модели Actor.

Причина упадка: Общепринято считать, что Smalltalk проиграл из-за распространения C++. Но это не правда. У Smalltalk действительно были некоторые проблемы, в частности, сложность взаимодействия с другими инструментами и низкая производительность. Но даже в 1990-е годы Smalltalk использовался активно, и многие предполагали, что он станет доминирующим языком в бизнесе.

А потом появился Java.

Источник

Smalltalk не стал единственной жертвой «Java-покалипсиса»: Java также отодвинул на задний план Eiffel, Ada95 и почти все остальное в мире ООП. Интересный вопрос не в том, почему Smalltalk умер, а почему C++ остался в живых. Я полагаю, потому что C++ был лучше совместим с C, что облегчало его интеграцию в существующие системы.

***

Это лишь малая часть важных и почти умерших языков. Я не затрагивал ALPHARD, ALTRAN, Argus, Automath, BCPL, COMTRAN, CPL, Eiffel, FLOW-MATIC, HOPE, Hypercard, ISWIM, JOVIAL, MacSyma, Mesa, Miranda, Multics Shell, PLANNER, SMP, Sketchpad или SNOBOL. Каждый из них внёс свой уникальный вклад в современное программирование. История —  это сложно.

Большинство влиятельных языков так и не стали популярными. Немногие использовали хотя бы один из них. Но каждый из них вдохновил людей, которые в свою очередь вдохновили других; так ДНК забытых языков появляется спустя десятилетия после их забвения. Существует также бесчисленное количество языков, идеи которых так и не были реализованы. «Энциклопедия языков программирования» насчитывает более 8000 языков. Многие из них содержали идеи, которые в дальнейшем не нашли развития. Представьте, сколько бы мы упустили, если бы никто не узнал о SIMULA или Лисков не представила бы CLU!

Вот почему мне так нравится изучать историю. Понимать, что мы потеряли, и находить это снова.

Благодарю Миикку Коскинена, Кевлина Хенни, Эрика Фишера и Леви Пирсона за их корректировки и отзывы.


ссылка на оригинал статьи https://habr.com/ru/articles/753562/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *