Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

История языков программирования пролетов из документации ранних механических компьютеров для современных инструментов для разработки программного обеспечения. Ранние языки программирования были узкоспециализированными, полагались на математические обозначения и столь же неясный синтаксис. [1] На протяжении 20 века исследования теории компиляторов привели к созданию языков программирования высокого уровня, которые используют более доступный синтаксис для передачи инструкций.

Первым языком программирования высокого уровня был Plankalkül , созданный Конрадом Цузе между 1942 и 1945 годами. [2] Первый язык высокого уровня, имеющий связанный компилятор, был создан Коррадо Бёмом в 1951 году для его докторской диссертации . Первым коммерчески доступным языком был FORTRAN (FORmula TRANslation), разработанный в 1956 году (первое руководство появилось в 1956 году, но впервые было разработано в 1954 году) группой под руководством Джона Бэкуса из IBM .

Ранняя история [ править ]

В 1842–1849 годах Ада Лавлейс перевела мемуары итальянского математика Луиджи Менабреа о новейшей машине, предложенной Чарльзом Бэббиджа : Аналитической машине ; она дополнила мемуары примечаниями, в которых подробно описан метод вычисления чисел Бернулли с помощью двигателя, признанного большинством историков первой в мире опубликованной компьютерной программой. [3]

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

Жаккардовые и Чарльз Бэббиджа Difference Engine оба были простые языки для описания действий , которые эти машины должны выполнять , следовательно , они были создателями первого языка программирования.

Первые языки программирования [ править ]

В 1940-х годах были созданы первые современные компьютеры с электрическим приводом. Ограниченная скорость и объем памяти заставляли программистов писать вручную настроенные программы на языке ассемблера . В конце концов стало понятно, что программирование на ассемблере требует больших интеллектуальных усилий.

Первым предложением языка программирования высокого уровня был Plankalkül , разработанный Конрадом Цузе для своего компьютера Z1 между 1943 и 1945 годами, но не реализованный в то время. [4]

Первые функционирующие языки программирования, предназначенные для передачи инструкций компьютеру, были написаны в начале 1950-х годов. Джон Мочли «s Сокращенный код , предложенный в 1949 году, был одним из первых языков высокого уровня , когда - либо для электронной вычислительной машины . [5] В отличие от машинного кода , операторы Short Code представляют математические выражения в понятной форме. Однако программу приходилось переводить в машинный код каждый раз при запуске, что делало процесс намного медленнее, чем выполнение эквивалентного машинного кода.

В начале 1950-х годов Алик Гленни разработал Autocode , возможно, первый скомпилированный язык программирования в Манчестерском университете . В 1954 году Р.А. Брукером была разработана вторая версия языка, известная как «автокод Mark 1» для Mark 1 . Брукер также разработал автокод для Ferranti Mercury в 1950-х годах совместно с Манчестерским университетом. Версия для EDSAC 2 был разработан Дуглас Хартри из Кембриджского университета математической лабораториив 1961 году. Известный как EDSAC 2 Autocode, он был непосредственной разработкой Mercury Autocode, адаптированной к местным условиям, и был известен своей оптимизацией объектного кода и диагностикой исходного языка, которые были развиты в то время. Атлас Autocode, современный, но отдельный поток разработки, был разработан для машины Atlas 1 Манчестерского университета .

В 1954 году в IBM был изобретен FORTRAN группой под руководством Джона Бэкуса ; это был первый широко используемый язык программирования общего назначения высокого уровня, имевший функциональную реализацию, а не просто проект на бумаге. [6] [7] Когда FORTRAN был впервые представлен, к нему относились скептически из-за ошибок, задержек в разработке и сравнительной эффективности программ, написанных вручную на ассемблере. [8] Однако на рынке оборудования, который быстро развивался; со временем язык стал известен своей эффективностью. Это по-прежнему популярный язык для высокопроизводительных вычислений [9] и используется для программ, которые оценивают и оценивают мировыесамые быстрые суперкомпьютеры . [10]

Еще один ранний язык программирования, разработанный Грейс Хоппер в США, называется FLOW-MATIC . Он был разработан для UNIVAC I в Remington Rand в период с 1955 по 1959 год. Хоппер обнаружила, что клиенты, занимающиеся обработкой бизнес-данных, не любят математические обозначения, и в начале 1955 года она и ее команда написали спецификацию для английского языка программирования и реализовали ее. прототип. [11] Компилятор FLOW-MATIC стал общедоступным в начале 1958 года и был практически завершен в 1959 году. [12] Flow-Matic оказал большое влияние на разработку COBOL , поскольку только он и его прямой потомок AIMACOфактически использовались в то время. [13]

Другие языки, которые все еще используются сегодня, включают LISP (1958), изобретенный Джоном Маккарти, и COBOL (1959), созданный Комитетом ближнего действия. Другой важной вехой в конце 1950-х годов стала публикация комитетом американских и европейских компьютерных ученых «нового языка алгоритмов»; Алгол 60 Report (далее " ALGO rithmic L anguage"). В этом отчете собрано множество идей, циркулировавших в то время, и представлены три ключевых языковых нововведения:

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

Еще одно нововведение, связанное с этим, заключалось в способе описания языка:

  • математически точная нотация, форма Бэкуса – Наура (BNF), использовалась для описания синтаксиса языка. Почти все последующие языки программирования использовали вариант BNF для описания контекстно-свободной части своего синтаксиса.

Алгол 60 оказал особое влияние на разработку более поздних языков, некоторые из которых вскоре стали более популярными. Эти крупные системы Burroughs были разработаны , чтобы быть запрограммированы в расширенном подмножество Алголя.

Ключевые идеи Алгола были продолжены, и появился Алгол 68 :

  • синтаксис и семантика стали еще более ортогональными: появились анонимные процедуры, система рекурсивной типизации с функциями высшего порядка и т. д .;
  • не только контекстно-свободная часть, но и весь синтаксис и семантика языка были определены формально в терминах грамматики Ван Вейнгаардена , формализма, разработанного специально для этой цели.

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

Фортран

Некоторые известные языки, которые были разработаны в этот период, включают:

Установление фундаментальных парадигм [ править ]

Схема

Период с конца 1960-х до конца 1970-х годов принес большой расцвет языков программирования. Большинство основных языковых парадигм, используемых в настоящее время, были изобретены именно в этот период: [ оригинальные исследования? ]

  • Speakeasy , разработанный в 1964 году в Аргоннской национальной лаборатории (ANL) Стэнли Коэном , представляет собойчисловой пакетOOPS ( объектно-ориентированная система программирования , очень похожая на более поздние MATLAB , IDL и Mathematica ). Speakeasy имеет четкийбазовый синтаксис Fortran . Сначала он обращался к эффективным физическим вычислениям внутри ANL, был модифицирован для использования в исследованиях (как Modeleasy) для Совета Федеральной резервной системы в начале 1970-х годов, а затем стал доступен на коммерческой основе; Speakeasy и Modeleasy все еще используются.
  • Simula , изобретенная в конце 1960-х годов Найгаардом и Далем как надмножество Algol 60, была первым языком, разработанным для поддержки объектно-ориентированного программирования .
  • C , один из первыхязыков системного программирования , был разработан Деннисом Ричи и Кеном Томпсоном в Bell Labs в период с 1969 по 1973 год.
  • Smalltalk (середина 1970-х) предоставил полную основу для проектирования объектно-ориентированного языка.
  • Prolog , разработанный в 1972 году Колмерауэром , Русселем и Ковальски , был первымязыком логического программирования .
  • ML построил систему полиморфных типов (изобретенную Робином Милнером в 1973 г.) на основе Lisp [14], став пионером вязыках функционального программирования со статической типизацией .

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

1960-е и 1970-е годы также стали свидетелями серьезных дискуссий по поводу достоинств « структурированного программирования », что по сути означало программирование без использования « goto ». Значительная часть программистов считала, что даже в языках, которые предоставляют «goto», использовать его - плохой стиль программирования, за исключением редких случаев. Эти дебаты были тесно связаны с языковым дизайном: некоторые языки вообще не включали «goto», что заставляло программиста или преподавателя использовать структурированное программирование.

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

Некоторые известные языки, которые были разработаны в этот период, включают:

1980-е: объединение, модули, производительность [ править ]

MATLAB
Erlang
Tcl

1980-е были годами относительной консолидации императивных языков . Вместо того, чтобы изобретать новые парадигмы, все эти движения развили идеи, изобретенные в предыдущем десятилетии. C ++ сочетает объектно-ориентированное и системное программирование. Правительство США стандартизировало Ада , язык системного программирования, предназначенный для использования оборонными подрядчиками. В Японии и других странах были потрачены огромные суммы на исследование так называемых языков программирования пятого поколения , включающих конструкции логического программирования. Сообщество функциональных языков перешло к стандартизации ML и Lisp. В этом десятилетии начались исследования Miranda , функционального языка с отложенным вычислением .

Одной из важных новых тенденций в языковом дизайне было повышенное внимание к программированию для крупномасштабных систем за счет использования модулей или крупномасштабных организационных единиц кода. Modula , Ada и ML разработали известные модульные системы в 1980-х годах. Модульные системы часто были связаны с универсальными конструкциями программирования - обобщенные типы, по сути, являлись параметризованными модулями [ необходима ссылка ] (см. Также полиморфизм в объектно-ориентированном программировании ).

Хотя основные новые парадигмы для императивных языков программирования так и не появились, многие исследователи расширили идеи предшествующих языков и адаптировали их к новым контекстам. Например, языки систем Argus и Emerald адаптировали объектно-ориентированное программирование к распределенным системам .

1980-е годы также принесли успехи в реализации языков программирования. Движение RISC в компьютерной архитектуре постулировало, что оборудование должно быть разработано для компиляторов, а не для программистов на сборке. Благодаря повышению скорости процессора, которое сделало возможным все более агрессивные методы компиляции, движение RISC вызвало больший интерес к технологии компиляции для языков высокого уровня.

В этом же направлении языковые технологии продолжались вплоть до 1990-х годов.

Некоторые известные языки, которые были разработаны в этот период, включают:

1990-е: эпоха Интернета [ править ]

Haskell
Lua
PHP
Ребол

Быстрый рост Интернета в середине 1990-х годов стал следующим крупным историческим событием в языках программирования. Открыв радикально новую платформу для компьютерных систем, Интернет создал возможность для принятия новых языков. В частности, популярность языка программирования JavaScript возросла благодаря его ранней интеграции с веб-браузером Netscape Navigator. Различные другие языки сценариев получили широкое распространение при разработке специализированных приложений для веб-серверов, таких как PHP. В 1990-е годы в императивных языках не было принципиальных новшеств , а было много рекомбинации и созревания старых идей. В эту эпоху началось распространение функциональных языков.. Большой движущей философией была продуктивность программиста. Появилось множество языков «быстрой разработки приложений» (RAD), которые обычно поставлялись с IDE , сборкой мусора и были потомками более старых языков. Все такие языки были объектно-ориентированными . К ним относятся Object Pascal , Visual Basic и Java . В частности, большое внимание привлекла Java.

Более радикальными и новаторскими, чем языки RAD, были новые языки сценариев . Они не произошли напрямую от других языков и отличались новым синтаксисом и более либеральным включением функций. Многие считают эти языки сценариев более производительными, чем даже языки RAD, но часто из-за того, что они делают небольшие программы проще, а большие - сложнее писать и поддерживать. [ необходима цитата ] Тем не менее, языки сценариев стали наиболее популярными из них, используемыми в связи с Интернетом.

Некоторые известные языки, которые были разработаны в этот период, включают:

Текущие тенденции [ править ]

Развитие языков программирования продолжается как в промышленности, так и в исследованиях. Некоторые из последних тенденций включают:

D Язык программирования
Groovy
PowerShell
Ржавчина
Царапать
  • Расширение поддержки функционального программирования на основных языках, используемых на коммерческой основе, включая чисто функциональное программирование для упрощения анализа кода и упрощения распараллеливания (как на микро-, так и на макроуровне)
  • Конструкции для поддержки параллельного и распределенного программирования.
  • Механизмы добавления в язык проверки безопасности и надежности : расширенная статическая проверка, зависимая типизация , управление информационным потоком, статическая безопасность потоков .
  • Альтернативные механизмы компонуемости и модульность: Примеси , черты , классы типов , делегаты , аспекты .
  • Компонентно-ориентированная разработка программного обеспечения.
  • Метапрограммирование , отражение или доступ к абстрактному синтаксическому дереву
    • АОП или аспектно-ориентированное программирование, позволяющее разработчикам вставлять код в другой модуль или класс в «точках соединения»
    • Специфичные для домена языки и генерация кода
      • XML для графического интерфейса ( XUL , XAML )
  • Повышенный интерес к дистрибуции и мобильности.
  • Интеграция с базами данных, включая XML и реляционные базы данных .
  • Открытый исходный код как философия развития языков, включая коллекцию компиляторов GNU и такие языки, как Python , Ruby и Scala .
  • Повышенный интерес к языкам визуального программирования, таким как Scratch , LabVIEW и PWCT.
  • Массивно-параллельные языки для кодирования графических процессоров на 2000 процессоров и массивов суперкомпьютеров, включая OpenCL
  • Ранние исследования (пока еще не реализуемых) языков программирования для квантовых вычислений
  • Ранние исследования применения методов искусственного интеллекта для генерации кода, подобного использованию GPT-3 [15]

Некоторые известные языки, разработанные в этот период, включают: [16] [17]

Другие новые языки программирования включают Red , Crystal , Elm , Hack , Haxe , Zig , Reason и Ballerina .


Выдающиеся люди [ править ]

Андерс Хейлсберг
Юкихиро Мацумото
Грейс М. Хоппер
Бьярне Страуструп
Никлаус Вирт

Некоторые ключевые люди, которые помогали разрабатывать языки программирования:

  • Алан Купер , разработчик Visual Basic .
  • Алан Кей , новатор в области объектно-ориентированного программирования и создатель Smalltalk .
  • Андерс Хейлсберг , разработчик Turbo Pascal , Delphi , C # и TypeScript .
  • Артур Уитни , разработчик A + , k и q .
  • Бертран Мейер , изобретатель Эйфеля .
  • Бьярн Страуструп , разработчик C ++ .
  • Брайан Керниган , соавтор первой книги по языку программирования C вместе с Деннисом Ритчи , соавтором языков программирования AWK и AMPL .
  • Крис Латтнер , создатель Swift и LLVM .
  • Клив Молер , создатель MATLAB .
  • Деннис Ритчи , изобретатель C . Операционная система Unix, операционная система Plan 9.
  • Дуглас Макилрой оказал влияние и создал такие языки, как SNOBOL , TRAC , PL / I , ALTRAN , TMG и C ++ .
  • Грейс Хоппер , первая использовавшая термин « компилятор и разработчик FLOW-MATIC» , оказала влияние на разработку COBOL . Популярились машинно-независимые языки программирования и термин « отладка ».
  • Гвидо ван Россум , создатель Python .
  • Джеймс Гослинг , ведущий разработчик Java и его предшественника Oak .
  • Жан Ичбиа , главный дизайнер Ada , Ada 83 .
  • Жан-Ив Жирар , соавтор полиморфного лямбда-исчисления (Система F).
  • Джефф Безансон , главный дизайнер и один из основных разработчиков Julia .
  • Джеффри Сновер , изобретатель PowerShell .
  • Джо Армстронг , создатель Erlang .
  • Джон Бэкус , изобретатель Фортрана, участвовал в разработке Алгола 58 и Алгола 60 .
  • Джон С. Рейнольдс , соавтор полиморфного лямбда-исчисления (Система F).
  • Джон Маккарти , изобретатель LISP .
  • Джон фон Нейман , автор концепции операционной системы .
  • Грейдон Хоар , изобретатель Rust .
  • Кен Томпсон , изобретатель B , Go , Inferno (операционная система) и соавтор операционной системы Unix .
  • Кеннет Э. Айверсон , разработчик APL и со-разработчик J вместе с Роджером Хи .
  • Конрад Цузе разработал первый язык программирования высокого уровня , Plankalkül (который повлиял на ALGOL 58 [18] ).
  • Кристен Найгаард , пионер объектно-ориентированного программирования, стала соавтором Simula .
  • Ларри Уолл , создатель языка программирования Perl (см. Perl и Raku ).
  • Мартин Одерски , создатель Scala , ранее участвовавший в разработке Java .
  • Мартин Ричардс разработал BCPL программирования языка, предвестник B и C языках.
  • Натаниэль Рочестер , изобретатель первого ассемблера (IBM 701).
  • Никлаус Вирт , изобретатель Паскаля , Модулы и Оберона .
  • Оле-Йохан Даль , пионер объектно-ориентированного программирования, стал соавтором Simula .
  • Расмус Лердорф , создатель PHP .
  • Рич Хики , создатель Clojure .
  • Жан Паоли , соавтор XML
  • Роберт Джентльмен , один из создателей R .
  • Роберт Гриземер , один из создателей Go .
  • Робин Милнер , изобретатель машинного обучения , разделяющий признание полиморфного вывода типа Хиндли-Милнера .
  • Роб Пайк , соавтор Go , Inferno (операционная система) и Plan 9 (операционная система), соавтор операционной системы.
  • Росс Иейка , один из создателей R .
  • Стэнли Коэн , изобретатель Speakeasy , который был впервые создан с помощью объектно-ориентированной системы программирования OOPS в 1964 году.
  • Стивен Вольфрам , создатель Mathematica .
  • Брэд Кокс , соавтор Objective-C .
  • Уолтер Брайт , создатель D .
  • Юкихиро Мацумото , создатель Ruby .
  • Райан Даль , создатель Node.js .

См. Также [ править ]

Ссылки [ править ]

  1. ^ Хоппер (1978) стр. 16.
  2. ^ Кнут, Дональд Э .; Пардо, Луис Трабб. «Раннее развитие языков программирования». Энциклопедия компьютерных наук и технологий . Марсель Деккер. 7 : 419–493.
  3. ^ Дж. Фуэги и Дж. Фрэнсис (октябрь – декабрь 2003 г.), «Лавлейс и Бэббидж и создание« заметок » 1843 г. », Annals of the History of Computing , 25 (4): 16–26, doi : 10.1109 / MAHC.2003.1253887
  4. ^ В 1998 и 2000 годах были созданы компиляторы для языка как историческое упражнение. Рохас, Рауль и др. (2000). «Планкалкюль: первый язык программирования высокого уровня и его реализация». Institut frame Informatik, Freie Universität Berlin, Технический отчет B-3/2000. (полный текст)
  5. ^ Себеста, WS (2006). Понятия языков программирования . п. 44. ISBN 978-0-321-33025-3.
  6. ^ "Создатель Fortran Джон Бэкус умирает - Технологии и гаджеты - Новости NBC" . NBC News. 2007-03-20 . Проверено 25 апреля 2010 .
  7. ^ "CSC-302 99S: Класс 02: Краткая история языков программирования" . Math.grin.edu. Архивировано из оригинала на 2010-07-15 . Проверено 25 апреля 2010 .
  8. Падуя, Дэвид (февраль 2000 г.). "Компилятор FORTRAN I" (PDF) . Вычислительная техника в науке и технике . 2 (1): 70–75. DOI : 10.1109 / 5992.814661 . Дата обращения 7 ноября 2019 .
  9. Юджин Ло (18 июня 2010 г.). «Идеальный язык программирования HPC» . Очередь . Ассоциация вычислительных машин. 8 (6).
  10. ^ «HPL - портативная реализация высокопроизводительного теста Linpack для компьютеров с распределенной памятью» . Проверено 21 февраля 2015 .
  11. ^ Хоппер (1978) стр. 16.
  12. ^ Саммет (1969) стр. 316
  13. ^ Саммет (1978) стр. 204.
  14. ^ Гордон, Майкл JC (1996). «От LCF к HOL: краткая история» (PDF) . п. 3 . Проверено 4 мая 2015 . Эдинбургский LCF, включая интерпретатор ML, был реализован на Lisp.
  15. ^ Манджа, Фархад (29 июля 2020). "Откуда вы знаете, что это написал человек?" . Нью-Йорк Таймс . ISSN 0362-4331 . Проверено 4 августа 2020 года . 
  16. ^ TIOBE (25 мая 2018). «Индекс TIOBE, 100 лучших языков программирования согласно индексу TIOBE» . www.tiobe.com . TIOBE_index .
  17. ^ "Octoverse GitHub 2018" . Архивировано из оригинала на 2019-03-22.
  18. ^ Рохас, Рауль; Хашаген, Ульф (2002). Первые компьютеры: история и архитектура . MIT Press. п. 292. ISBN. 978-0262681377. Проверено 25 октября 2013 года .

Дальнейшее чтение [ править ]

  • Розен, Сол (редактор), Системы программирования и языки , McGraw-Hill, 1967.
  • Саммет, Жан Э. , Языки программирования: история и основы , Прентис-Холл, 1969.
  • Саммет, Жан Э. (июль 1972 г.). «Языки программирования: история и будущее». Коммуникации ACM . 15 (7): 601–610. DOI : 10.1145 / 361454.361485 . S2CID  2003242 .
  • Ричард Л. Вексельблат (редактор): История языков программирования , Academic Press, 1981.
  • Томас Дж. Бергин и Ричард Г. Гибсон (редакторы): История языков программирования , Addison Wesley, 1996.

Внешние ссылки [ править ]

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