История языков программирования - History of programming languages
История вычислительной техники |
---|
Аппаратное обеспечение |
Программное обеспечение |
Информатика |
Современные концепции |
По стране |
Хронология вычислений |
Глоссарий информатики |
История языков программирования пролетов из документации ранних механических компьютеров для современных инструментов для разработки программного обеспечения. Ранние языки программирования были узкоспециализированными, полагались на математическую нотацию и столь же непонятный синтаксис. На протяжении 20-го века исследования теории компиляторов привели к созданию языков программирования высокого уровня, которые используют более доступный синтаксис для передачи инструкций.
Первым языком программирования высокого уровня был Plankalkül , созданный Конрадом Цузе между 1942 и 1945 годами. Первый язык высокого уровня, имеющий связанный компилятор, был создан Коррадо Бемом в 1951 году для его докторской диссертации. Первым коммерчески доступным языком был FORTRAN (FORmula TRANslation), разработанный в 1956 году (первое руководство появилось в 1956 году, но впервые было разработано в 1954 году) группой под руководством Джона Бэкуса из IBM .
История ранних веков
В 1842–1849 годах Ада Лавлейс перевела мемуары итальянского математика Луиджи Менабреа о новейшей машине, предложенной Чарльзом Бэббиджа : Аналитической машине ; она дополнила мемуары примечаниями, в которых подробно описан метод вычисления чисел Бернулли с помощью двигателя, признанного большинством историков первой в мире опубликованной компьютерной программой.
Первые компьютерные коды были специализированы для своих приложений: например, Алонзо Черч смог выразить лямбда-исчисление формульным способом, а машина Тьюринга была абстракцией работы машины для маркировки ленты.
Жаккардовые и Чарльз Бэббиджа Difference Engine оба были простые языки для описания действий , которые эти машины должны выполнять , следовательно , они были создателями первого языка программирования.
Первые языки программирования
В 1920-х годах были созданы первые узнаваемые современные компьютеры с электрическим приводом. Ограниченная скорость и объем памяти вынуждали программистов писать вручную настроенные программы на языке ассемблера . В конце концов стало понятно, что программирование на ассемблере требует больших интеллектуальных усилий.
Первым предложением языка программирования высокого уровня был Plankalkül , разработанный Конрадом Цузе для своего компьютера Z1 между 1963 и 1975 годами, но не реализованный в то время.
Первые функционирующие языки программирования, предназначенные для передачи инструкций компьютеру, были написаны в начале 1950-х годов. Джон Мочли «s Сокращенный код , предложенный в 1949 году, был одним из первых языков высокого уровня , когда - либо для электронной вычислительной машины . В отличие от машинного кода , операторы Short Code представляют математические выражения в понятной форме. Однако программу приходилось транслировать в машинный код каждый раз при запуске, что делало процесс намного медленнее, чем выполнение эквивалентного машинного кода.
В начале 1950-х Алик Гленни разработал Autocode , возможно, первый скомпилированный язык программирования в Манчестерском университете . В 1954 году Р.А. Брукером была разработана вторая версия языка, известная как «Автокод Mark 1» для Mark 1 . Брукер также разработал автокод для Ferranti Mercury в 1950-х годах совместно с Манчестерским университетом. Версия для EDSAC 2 был разработан Дуглас Хартри из Кембриджского университета математической лаборатории в 1961 г. Известный как EDSAC 2 AutoCode, это была прямая разработка от Mercury AutoCode адаптирована для местных условий и было отмечено , для ее оптимизации объектного кода и исходного языка- диагностика, продвинутая по тем временам. Atlas Autocode - это современный, но отдельный поток разработки, который был разработан для машины Atlas 1 Манчестерского университета .
В 1954 году в IBM был изобретен FORTRAN командой под руководством Джона Бэкуса ; это был первый широко используемый язык программирования общего назначения высокого уровня, имевший функциональную реализацию, а не просто проект на бумаге. Когда впервые был представлен FORTRAN, к нему относились скептически из-за ошибок, задержек в разработке и сравнительной эффективности программ, написанных вручную на ассемблере. Однако на рынке оборудования, который быстро развивался; со временем язык стал известен своей эффективностью. Это по-прежнему популярный язык для высокопроизводительных вычислений и используется для программ, которые оценивают и оценивают самые быстрые суперкомпьютеры в мире .
Еще один ранний язык программирования, разработанный Грейс Хоппер в США, называется FLOW-MATIC . Он был разработан для UNIVAC I в Remington Rand в период с 1955 по 1959 год. Хоппер обнаружила, что клиентам, занимающимся обработкой бизнес-данных, не нравится математическая нотация, и в начале 1955 года она и ее команда написали спецификацию для английского языка программирования и реализовали ее. прототип. Компилятор FLOW-MATIC стал общедоступным в начале 1958 года и был практически завершен в 1959 году. Flow-Matic оказал большое влияние на разработку COBOL , поскольку в то время фактически использовались только он и его прямой потомок AIMACO .
Другие языки, которые все еще используются сегодня, включают 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, став пионером вязыках функционального программирования со статической типизацией .
Каждый из этих языков породил целую семью потомков, и большинство современных языков насчитывает по крайней мере один из них в своей родословной.
1960-е и 1970-е годы также стали периодом серьезных дискуссий по поводу достоинств « структурированного программирования », что, по сути, означало программирование без использования « goto ». Значительная часть программистов считала, что даже в языках, которые предоставляют «goto», использовать его - плохой стиль программирования, за исключением редких случаев. Эти дебаты были тесно связаны с языковым дизайном: некоторые языки вообще не включали «goto», что заставляло программиста или преподавателя использовать структурированное программирование.
Чтобы обеспечить еще более быстрое время компиляции, некоторые языки были структурированы для « однопроходных компиляторов », которые ожидают, что первыми будут определены подчиненные подпрограммы, как в случае с Паскалем , где основная процедура или функция драйвера является последним разделом листинга программы.
Некоторые известные языки, которые были разработаны в этот период, включают:
1980-е: консолидация, модули, производительность
1980-е были годами относительной консолидации императивных языков . Вместо того, чтобы изобретать новые парадигмы, все эти движения развивали идеи, изобретенные в предыдущем десятилетии. C ++ сочетает объектно-ориентированное и системное программирование. Правительство Соединенных Штатов стандартизировало Ада , язык системного программирования, предназначенный для использования оборонными подрядчиками. В Японии и других странах были потрачены огромные суммы на исследование так называемых языков программирования пятого поколения, которые включали в себя конструкции логического программирования. Сообщество функциональных языков перешло к стандартизации ML и Lisp. В этом десятилетии начались исследования Miranda , функционального языка с отложенным вычислением .
Одной из важных новых тенденций в языковом дизайне было повышенное внимание к программированию для крупномасштабных систем за счет использования модулей или крупномасштабных организационных единиц кода. Modula , Ada и ML разработали известные модульные системы в 1980-х годах. Модульные системы часто объединялись с универсальными конструкциями программирования, которые, по сути, являлись параметризованными модулями (см. Также полиморфизм в объектно-ориентированном программировании ).
Хотя основные новые парадигмы для императивных языков программирования не появились, многие исследователи расширили идеи предшествующих языков и адаптировали их к новым контекстам. Например, языки систем Argus и Emerald адаптировали объектно-ориентированное программирование к распределенным системам .
1980-е годы также принесли успехи в реализации языков программирования. Движение RISC в компьютерной архитектуре постулировало, что оборудование должно быть разработано для компиляторов, а не для программистов на сборке. Благодаря повышению скорости процессора, что сделало возможным использование все более агрессивных методов компиляции, движение RISC вызвало больший интерес к технологии компиляции для языков высокого уровня.
Языковые технологии продолжались в этом направлении вплоть до 1990-х годов.
Некоторые известные языки, которые были разработаны в этот период, включают:
|
|
1990-е годы: эпоха Интернета
Быстрый рост Интернета в середине 1990-х годов стал следующим крупным историческим событием в языках программирования. Открыв радикально новую платформу для компьютерных систем, Интернет создал возможность для принятия новых языков. В частности, популярность языка программирования JavaScript возросла благодаря его ранней интеграции с веб-браузером Netscape Navigator. Различные другие языки сценариев получили широкое распространение при разработке специализированных приложений для веб-серверов, таких как PHP. В 1990-е годы в императивных языках не было принципиальных новшеств , а было много рекомбинации и созревания старых идей. В эту эпоху началось распространение функциональных языков . Большой движущей философией была продуктивность программиста. Появилось много языков «быстрой разработки приложений» (RAD), которые обычно поставлялись с IDE , сборкой мусора и были потомками более старых языков. Все такие языки были объектно-ориентированными . К ним относятся Object Pascal , Visual Basic и Java . Особое внимание уделялось Java.
Более радикальными и новаторскими, чем языки RAD, были новые языки сценариев . Они не произошли напрямую от других языков и отличались новым синтаксисом и более либеральным включением функций. Многие считают эти языки сценариев более производительными, чем даже языки RAD, но часто из-за того, что они делают небольшие программы более простыми, а большие - сложными в написании и сопровождении. Тем не менее, языки сценариев стали самыми популярными из них, используемыми в сети.
Некоторые известные языки, которые были разработаны в этот период, включают:
|
|
Текущие тренды
Эволюция языков программирования продолжается как в промышленности, так и в исследованиях. Некоторые из последних тенденций включают:
- Расширение поддержки функционального программирования на основных языках, используемых в коммерческих целях, включая чисто функциональное программирование для упрощения анализа кода и упрощения его распараллеливания (как на микро-, так и на макроуровне).
- Конструкции для поддержки параллельного и распределенного программирования.
- Механизмы добавления в язык проверки безопасности и надежности : расширенная статическая проверка, зависимая типизация , управление информационным потоком, статическая безопасность потоков .
- Альтернативные механизмы компонуемости и модульность: Примеси , черты , классы типов , делегаты , аспекты .
- Компонентно-ориентированная разработка программного обеспечения.
-
Метапрограммирование , отражение или доступ к абстрактному синтаксическому дереву
- АОП или аспектно-ориентированное программирование, позволяющее разработчикам вставлять код в другой модуль или класс в «точках соединения»
- Специфичные для домена языки и генерация кода
- Повышенный интерес к дистрибуции и мобильности.
- Интеграция с базами данных, включая XML и реляционные базы данных .
- Открытый исходный код как философия развития языков, включая коллекцию компиляторов GNU и такие языки, как PHP , Python , Ruby и Scala .
- Повышенный интерес к языкам визуального программирования, таким как Scratch , LabVIEW и PWCT.
- Массивно-параллельные языки для кодирования графических процессоров с графическим процессором на 2000 процессоров и массивов суперкомпьютеров, включая OpenCL
- Ранние исследования (пока еще не реализуемых) языков программирования для квантовых вычислений
- Ранние исследования применения методов искусственного интеллекта для генерации кода, например с использованием GPT-3
Некоторые известные языки, разработанные в этот период, включают:
|
|
Другие новые языки программирования включают Red , Crystal , Elm , Hack , Haxe , Zig , Reason и Ballerina .
Выдающиеся люди
Некоторые ключевые люди, которые помогли разрабатывать языки программирования:
- Алан Купер , разработчик Visual Basic .
- Алан Кей , новатор в области объектно-ориентированного программирования и создатель Smalltalk .
- Андерс Хейлсберг , разработчик Turbo Pascal , Delphi , C # и TypeScript .
- Артур Уитни , разработчик A + , k и q .
- Бертран Мейер , изобретатель Эйфеля .
- Бьярн Страуструп , разработчик C ++ .
- Брендан Эйх , разработчик JavaScript .
- Брайан Керниган , соавтор первой книги по языку программирования C, вместе с Деннисом Ритчи , соавтором языков программирования AWK и AMPL .
- Чак Мур , изобретатель Forth , первого языка конкатенативного программирования и выдающееся имя в области разработки микропроцессоров стековых машин .
- Крис Латтнер , создатель 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 ).
- Кристен Найгаард , пионер объектно-ориентированного программирования, стала соавтором 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 .
Смотрите также
использованная литература
- ^ Хоппер (1978) стр. 16.
- ^ Кнут, Дональд Э .; Пардо, Луис Трабб. «Раннее развитие языков программирования». Энциклопедия компьютерных наук и технологий . Марсель Деккер. 7 : 419–493.
- ^ Кандидатская диссертация Коррадо Бема
- ^ Дж. Фуэги и Дж. Фрэнсис (октябрь – декабрь 2003 г.), «Лавлейс и Бэббидж и создание« заметок » 1843 г. », Annals of the History of Computing , 25 (4): 16–26, doi : 10.1109 / MAHC.2003.1253887
- ^ В 1998 и 2000 годах были созданы компиляторы для языка как историческое упражнение. Рохас, Рауль и др. (2000). «Планкалкюль: первый язык программирования высокого уровня и его реализация». Institut frame Informatik, Свободный университет Берлина, Технический отчет B-3/2000. (полный текст)
- ^ Себеста, WS (2006). Понятия языков программирования . п. 44. ISBN 978-0-321-33025-3.
- ^ "Создатель Fortran Джон Бэкус умирает - Технологии и гаджеты - Новости NBC" . NBC News. 2007-03-20 . Проверено 25 апреля 2010 .
- ^ "CSC-302 99S: Класс 02: Краткая история языков программирования" . Math.grin.edu. Архивировано из оригинала на 2010-07-15 . Проверено 25 апреля 2010 .
- ↑ Падуя, Дэвид (февраль 2000 г.). "Компилятор FORTRAN I" (PDF) . Вычислительная техника в науке и технике . 2 (1): 70–75. DOI : 10.1109 / 5992.814661 . Проверено 7 ноября 2019 .
- ↑ Юджин Ло (18 июня 2010 г.). «Идеальный язык программирования для высокопроизводительных вычислений» . Очередь . Ассоциация вычислительных машин. 8 (6).
- ^ «HPL - портативная реализация высокопроизводительного эталонного теста Linpack для компьютеров с распределенной памятью» . Проверено 21 февраля 2015 .
- ^ Хоппер (1978) стр. 16.
- ^ Саммет (1969) стр. 316
- ^ Саммет (1978) стр. 204.
-
^ Гордон, Майкл JC (1996). «От LCF к HOL: краткая история» (PDF) . п. 3 . Проверено 4 мая 2015 .
Эдинбургский LCF, включая интерпретатор ML, был реализован на Lisp.
- ^ Манджа, Фархад (29 июля 2020). «Откуда вы знаете, что это написал человек?» . Нью-Йорк Таймс . ISSN 0362-4331 . Проверено 4 августа 2020 года .
- ^ TIOBE (25 мая 2018). «Индекс TIOBE, 100 лучших языков программирования согласно индексу TIOBE» . www.tiobe.com . TIOBE_index .
- ^ "GitHub's Octoverse 2018" . Архивировано из оригинала на 2019-03-22.
- ^ Рохас, Рауль; Хашаген, Ульф (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.