История языков программирования - History of programming languages
Эта статья ведущий раздел может быть слишком коротким, чтобы адекватно подвести итог его ключевые моменты. (Февраль 2018 г.) |
История вычислительной техники |
---|
Аппаратное обеспечение |
Программного обеспечения |
Информатика |
Современные концепции |
По стране |
Хронология вычислений |
Глоссарий информатики |
|
В история языков программирования простирается от документации ранних механических компьютеров до современных инструментов для разработки программного обеспечения. Ранние языки программирования были узкоспециализированными, полагались на математические обозначения и столь же неясный синтаксис.[1] На протяжении ХХ века исследования в компилятор Теория привела к созданию языков программирования высокого уровня, которые используют более доступный синтаксис для передачи инструкций.
Первый язык программирования высокого уровня был Plankalkül, сделано Конрад Зузе между 1942 и 1945 гг.[2] Первый язык высокого уровня с ассоциированным компилятор был создан Коррадо Бём в 1951 г. для его кандидатская диссертация. Первым коммерчески доступным языком был FORTRAN (FORmula TRANslation), разработанный в 1956 г. (первое руководство появилось в 1956 г., но впервые разработано в 1954 г.) группой под руководством Джон Бэкус в IBM.
Ранняя история
В 1842–1849 гг. Ада Лавлейс перевел мемуары итальянского математика Луиджи Менабреа о Чарльз Бэббидж новейшая предлагаемая машина: Аналитическая машина; она дополнила мемуары примечаниями, в которых подробно описан метод расчета Числа Бернулли с двигателем, признанным большинством историков первой в мире опубликованной компьютерной программой.[3]
Первые компьютерные коды были специализированы для своих приложений: например, Церковь Алонсо смог выразить лямбда-исчисление шаблонным способом и Машина Тьюринга была абстракцией от работы машины для маркировки лент.
Жаккардовые станки и Чарльза Бэббиджа Разностная машина у обоих были простые языки для описания действий, которые эти машины должны выполнять, поэтому они были создателями первого языка программирования.
Первые языки программирования
В 1940-х годах были созданы первые современные компьютеры с электрическим приводом. Ограниченная скорость и объем памяти вынуждали программистов писать вручную настроенные язык ассемблера программы. В конце концов стало понятно, что программирование на ассемблере требует больших интеллектуальных усилий.
Раннее предложение по язык программирования высокого уровня был Plankalkül, разработан Конрад Зузе за его Z1 компьютер между 1943 и 1945 годами, но в то время не реализовывались.[4]
Первые функционирующие языки программирования, предназначенные для передачи инструкций компьютеру, были написаны в начале 1950-х годов. Джон Мочли с Короткий код, предложенный в 1949 году, был одним из первых языков высокого уровня, когда-либо разработанных для электронный компьютер.[5] В отличие от Машинный код, Операторы Short Code представляют собой математические выражения в понятной форме. Однако программу пришлось перевести на Машинный код каждый раз, когда он запускается, что делает процесс намного медленнее, чем запуск эквивалентного машинного кода.
В начале 1950-х гг. Алик Гленни развитый Автокодирование, возможно, первый скомпилированный язык программирования, на Манчестерский университет. В 1954 году для Mark 1 была разработана вторая версия языка, известная как «автокод Mark 1». Р. А. Брукер. Брукер также разработал автокод для Ферранти Меркьюри в 1950-х годах совместно с Манчестерским университетом. Версия для EDSAC 2 был разработан Дуглас Хартри из Математическая лаборатория Кембриджского университета в 1961 году. Известный как EDSAC 2 Autocode, он был непосредственной разработкой Mercury Autocode, адаптированной к местным условиям, и был известен своей оптимизацией объектного кода и диагностикой исходного языка, которые были развиты в то время. Современная, но отдельная ветка развития, Атлас Автокод был разработан для Манчестерского университета Атлас 1 машина.
В 1954 г. FORTRAN был изобретен в IBM командой во главе с Джон Бэкус; это был первый широко используемый язык программирования общего назначения высокого уровня иметь функциональную реализацию, а не просто дизайн на бумаге.[6][7] Когда впервые был представлен FORTRAN, к нему относились скептически из-за ошибок, задержек в разработке и сравнительной эффективности программ, написанных вручную на ассемблере.[8] Однако на рынке оборудования, который быстро развивался; со временем язык стал известен своей эффективностью. Это по-прежнему популярный язык для высокопроизводительные вычисления[9] и используется для программ, которые оценивают и оценивают мировые самые быстрые суперкомпьютеры.[10]
Другой ранний язык программирования был разработан Грейс Хоппер в США называется ПОТОК-MATIC. Он был разработан для UNIVAC I в Ремингтон Рэнд в период с 1955 по 1959 год. Хоппер обнаружила, что заказчики, занимающиеся обработкой бизнес-данных, не любят математические обозначения, и в начале 1955 года она и ее команда написали спецификацию для английский язык программирования и реализовал прототип.[11] Компилятор FLOW-MATIC стал общедоступным в начале 1958 года и был практически завершен в 1959 году.[12] Flow-Matic оказал большое влияние на дизайн КОБОЛ, поскольку только он и его прямой потомок AIMACO фактически использовались в то время.[13]
Другие языки, которые все еще используются сегодня, включают LISP (1958), изобретенный Джон Маккарти и КОБОЛ (1959), созданный Комитетом ближнего радиуса действия. Другой важной вехой в конце 1950-х годов стала публикация комитетом американских и европейских компьютерных ученых «нового языка алгоритмов»; то АЛГОЛ 60 Отчет ("АЛГОритмичный Language "). Этот отчет объединил многие идеи, которые циркулировали в то время, и включил три ключевых языковых нововведения:
- структура вложенных блоков: кодовые последовательности и связанные объявления могут быть сгруппированы в блоки без необходимости превращения в отдельные, явно названные процедуры;
- лексическая область видимости: блок может иметь свои собственные частные переменные, процедуры и функции, невидимые для кода вне этого блока, то есть скрытие информации.
Еще одно нововведение, связанное с этим, заключалось в способе описания языка:
- математически точное обозначение, Форма Бэкуса – Наура (BNF), использовался для описания синтаксиса языка. Почти все последующие языки программирования использовали вариант BNF для описания контекстно-свободный часть их синтаксиса.
Алгол 60 оказал особое влияние на разработку более поздних языков, некоторые из которых вскоре стали более популярными. В Большие системы Берроуза были разработаны для программирования в расширенном подмножестве Algol.
Ключевые идеи Алгола были продолжены, АЛГОЛ 68:
- синтаксис и семантика стали еще более ортогональными: появились анонимные процедуры, система рекурсивной типизации с функциями высшего порядка и т. д .;
- не только контекстно-свободная часть, но и весь синтаксис и семантика языка были определены формально в терминах Грамматика Ван Вейнгаардена, формализм, разработанный специально для этой цели.
Множество мало используемых языковых функций Algol 68 (например, параллельные и параллельные блоки) и его сложная система синтаксических сокращений и автоматического приведения типов сделали его непопулярным среди разработчиков и приобрели репутацию трудно. Никлаус Вирт фактически вышел из комитета по дизайну, чтобы создать более простой Паскаль язык.
Некоторые известные языки, которые были разработаны в этот период, включают:
|
Установление фундаментальных парадигм
Период с конца 1960-х до конца 1970-х годов принес большой расцвет языков программирования. Большинство основных языковых парадигм, используемых в настоящее время, были изобретены именно в этот период:[оригинальное исследование? ]
- Speakeasy, разработанный в 1964 г. Аргоннская национальная лаборатория (ANL) автор: Стэнли Коэн, является OOPS (объектно-ориентированного программирования система, как и более поздняя MATLAB, IDL и Mathematica ) числовой пакет. Speakeasy имеет четкое Фортран основной синтаксис. Сначала он обращался к эффективным физическим вычислениям внутри ANL, был модифицирован для использования в исследованиях (как "Modeleasy") для Совет Федерального Резерва в начале 1970-х, а затем стал доступен на коммерческой основе; Speakeasy и Modeleasy все еще используются.
- Симула, изобретенный в конце 1960-х годов Nygaard и Даль как надмножество Algol 60, был первым языком, разработанным для поддержки объектно-ориентированного программирования.
- C, рано системное программирование язык, был разработан Деннис Ричи и Кен Томпсон в Bell Labs между 1969 и 1973 гг.
- Болтовня (середина 1970-х гг.) предоставили полную основу для проектирования объектно-ориентированного языка.
- Пролог, разработанный в 1972 г. Colmerauer, Руссель, и Ковальски, был первым логическое программирование язык.
- ML построил систему полиморфных типов (изобретен Робин Милнер в 1973 году) поверх Lisp,[14] новаторский статически типизированный функциональное программирование языков.
Каждый из этих языков породил целую семью потомков, и большинство современных языков насчитывают по крайней мере один из них в своей родословной.
1960-е и 1970-е годы также стали свидетелями серьезных дискуссий по поводу достоинств "структурное программирование ", что по сути означало программирование без использования"идти к ". Значительная часть программистов считала, что даже в языках, которые предоставляют" goto ", это плохо стиль программирования использовать его, за исключением редких случаев. Эти дебаты были тесно связаны с языковым дизайном: некоторые языки вообще не включали «goto», что заставляло программиста использовать структурированное программирование.
Чтобы обеспечить еще более быстрое время компиляции, некоторые языки были структурированы для "однопроходные компиляторы "которые ожидают, что первыми будут определены подчиненные процедуры, как в случае Паскаль, где основная процедура или функция драйвера является последним разделом листинга программы.
Некоторые известные языки, которые были разработаны в этот период, включают:
1980-е: консолидация, модули, производительность
1980-е годы были годами относительной консолидации в императивные языки. Вместо того, чтобы изобретать новые парадигмы, все эти движения развили идеи, изобретенные в предыдущем десятилетии. C ++ комбинированное объектно-ориентированное и системное программирование. Правительство США стандартизировало Ада, язык системного программирования, предназначенный для использования оборонными подрядчиками. В Японии и других странах были потрачены огромные суммы на расследование так называемых языки программирования пятого поколения которые включали конструкции логического программирования. Сообщество функциональных языков перешло к стандартизации ML и Lisp. Исследования в Миранда, функциональный язык с ленивая оценка, начал распространяться в этом десятилетии.
Одной из важных новых тенденций в языковом дизайне было повышенное внимание к программированию для крупномасштабных систем за счет использования модули, или крупномасштабные организационные единицы кода. Modula, Ada и ML разработали известные модульные системы в 1980-х годах. Модульные системы часто были связаны с общее программирование конструкции --- дженерики, по сути, являются параметризованными модулями[нужна цитата ] (смотрите также полиморфизм в объектно-ориентированном программировании ).
Хотя основных новых парадигм для императивных языков программирования не появилось, многие исследователи расширили идеи предшествующих языков и адаптировали их к новым контекстам. Например, языки Аргус и Изумруд системы адаптировали объектно-ориентированное программирование к распределенные системы.
1980-е годы также принесли успехи в реализации языков программирования. В RISC движение в компьютерная архитектура постулировал, что оборудование должно быть разработано для компиляторы а не для программистов человеческой сборки. При поддержке процессор Улучшение скорости, которое сделало возможным все более агрессивные методы компиляции, движение RISC вызвало больший интерес к технологии компиляции для языков высокого уровня.
В этом же направлении языковые технологии продолжались вплоть до 1990-х годов.
Некоторые известные языки, которые были разработаны в этот период, включают:
|
|
1990-е годы: эпоха Интернета
Быстрый рост Интернета в середине 1990-х годов стал следующим крупным историческим событием в языках программирования. Открыв радикально новую платформу для компьютерных систем, Интернет создал возможность для принятия новых языков. В частности, JavaScript Язык программирования стал популярным благодаря своей ранней интеграции с веб-браузером Netscape Navigator. Различные другие языки сценариев получили широкое распространение при разработке специализированных приложений для веб-серверов, таких как PHP. 1990-е не увидели принципиальных новшеств в императивные языки, но много рекомбинации и созревания старых идей. В эту эпоху началось распространение функциональные языки. Большой движущей философией была продуктивность программиста. Появилось много языков "быстрой разработки приложений" (RAD), которые обычно поставлялись с IDE, вывоз мусора, и были потомками более старых языков. Все такие языки были объектно-ориентированный. К ним относятся Object Pascal, Visual Basic, и Ява. В частности, большое внимание привлекла Java.
Более радикальными и новаторскими, чем языки RAD, были новые языки сценариев. Они не произошли напрямую от других языков и отличались новым синтаксисом и более либеральным включением функций. Многие считают эти языки сценариев более производительными, чем даже языки RAD, но часто из-за того, что они делают небольшие программы более простыми, а большие - сложными в написании и сопровождении.[нужна цитата ] Тем не менее, языки сценариев стали самыми популярными из них, используемыми в сети.
Некоторые известные языки, которые были разработаны в этот период, включают:
|
|
Текущие тренды
Развитие языков программирования продолжается как в промышленности, так и в исследованиях. Некоторые из последних тенденций включают:
- Растущая поддержка функциональное программирование на основных языках, используемых в коммерческих целях, в том числе чистое функциональное программирование для упрощения анализа кода и упрощения его распараллеливания (как на микро-, так и на макроуровне)
- Конструкции для поддержки одновременный и распределен программирование.
- Механизмы повышения безопасности и надежности проверка к языку: расширенная статическая проверка, зависимая типизация, управление информационным потоком, статическое безопасность потоков.
- Альтернативные механизмы компоновки и модульности: миксины, черты, классы типов, делегаты, аспекты.
- Компонентно-ориентированная разработка программного обеспечения.
- Метапрограммирование, отражение или доступ к абстрактное синтаксическое дерево
- АОП или Аспектно-ориентированное программирование позволяя разработчикам вставлять код в другой модуль или класс в «точках соединения»
- Языки домена и генерация кода
- Повышенный интерес к дистрибуции и мобильности.
- Интеграция с базами данных, в том числе XML и реляционные базы данных.
- Открытый исходный код как философия развития языков, включая коллекцию компиляторов GNU и такие языки, как Python, Рубин, и Scala.
- Больше интереса к языки визуального программирования подобно Царапать, LabVIEW и PWCT
- Массивно-параллельные языки для кодирования графических процессоров на 2000 процессоров и массивов суперкомпьютеров, включая OpenCL
- Ранние исследования (пока нереализуемые) квантовые вычисления языки программирования
- Ранние исследования в применении Искусственный интеллект методы для генерации кода, такие как использование GPT-3[15]
Некоторые известные языки, разработанные в этот период, включают: [16][17]
|
Другие новые языки программирования включают красный, Кристалл, Вяз, Взломать, Haxe, Зиг, Причина и Балерина.
Выдающиеся люди
Некоторые ключевые люди, которые помогали разрабатывать языки программирования:
- Алан Купер, разработчик Visual Basic.
- Алан Кей, новаторская работа в области объектно-ориентированного программирования и создатель Болтовня.
- Андерс Хейлсберг, разработчик Турбо Паскаль, Delphi, C #, и Машинопись.
- Артур Уитни, разработчик А +, k, и q.
- Бертран Мейер, изобретатель Эйфель.
- Бьярне Страуструп, разработчик C ++.
- Брайан Керниган, соавтор первой книги по C язык программирования с Деннис Ричи, соавтор AWK и AMPL языки программирования.
- Крис Латтнер, создатель Быстрый и LLVM.
- Клив Молер, создатель MATLAB.
- Деннис Ричи, изобретатель C. Операционная система Unix, операционная система Plan 9.
- Дуглас Макилрой, повлиял на такие языки, как СНОБОЛ, ПРОФ, PL / I, АЛЬТРАН, TMG и C ++.
- Грейс Хоппер, первым использовавшим термин компилятор и разработчик ПОТОК-MATIC, повлияли на развитие КОБОЛ. Популяризация машинно-независимых языков программирования и термина "отладка ".
- Гвидо ван Россум, создатель Python.
- Джеймс Гослинг, ведущий разработчик Ява и его предшественник, дуб.
- Жан Ичбия, главный конструктор Ада, Ада 83.
- Жан-Ив Жирар, соавтор полиморфное лямбда-исчисление (Система F).
- Джефф Безансон, главный дизайнер и один из основных разработчиков Юля.
- Джеффри Сновер, изобретатель PowerShell.
- Джо Армстронг, создатель Erlang.
- Джон Бэкус, изобретатель Фортран и сотрудничал в разработке АЛГОЛ 58 и АЛГОЛ 60.
- Джон С. Рейнольдс, соавтор полиморфного лямбда-исчисления (Система F).
- Джон Маккарти, изобретатель LISP.
- Джон фон Нейман, создатель Операционная система концепция.
- Грейдон Хоар, изобретатель Ржавчина.
- Кен Томпсон, изобретатель B, Идти, Inferno (операционная система) и Unix Соавтор операционной системы.
- Кеннет Э. Айверсон, разработчик APL, и со-разработчик J вместе с Роджер Хуэй.
- Конрад Зузе, разработал первый язык программирования высокого уровня, Plankalkül (что повлияло АЛГОЛ 58[18]).
- Кристен Найгаард, пионер объектно-ориентированного программирования, соавтор Симула.
- Ларри Уолл, создатель языка программирования Perl (см. Perl и Раку ).
- Мартин Одерский, создатель Scala, и ранее участвовал в разработке Ява.
- Мартин Ричардс разработал BCPL язык программирования, предшественник B и C языков.
- Натаниэль Рочестер, изобретатель первого ассемблер (IBM 701).
- Никлаус Вирт, изобретатель Паскаль, Modula и Оберон.
- Оле-Йохан Даль, пионер объектно-ориентированного программирования, соавтор Симула.
- Расмус Лердорф, создатель PHP.
- Рич Хикки, создатель Clojure.
- Роберт Джентльмен, соавтор р.
- Роберт Гриземер, соавтор Идти.
- Робин Милнер, изобретатель ML, и делиться кредитом Хиндли-Милнер полиморфный вывод типа.
- Роб Пайк, соавтор Идти, Inferno (операционная система) и Plan 9 (операционная система) Соавтор операционной системы.
- Росс Ихака, соавтор р.
- Стэнли Коэн, изобретатель Speakeasy, который был впервые создан с помощью объектно-ориентированной системы программирования OOPS в 1964 году.
- Стивен Вольфрам, создатель Mathematica.
- Том Лав и Брэд Кокс, создатель Цель-C.
- Уолтер Брайт, создатель D.
- Юкихиро Мацумото, создатель Рубин.
Смотрите также
Рекомендации
- ^ Хоппер (1978) стр. 16.
- ^ Knuth, Donald E .; Пардо, Луис Трабб. «Раннее развитие языков программирования». Энциклопедия компьютерных наук и технологий. Марсель Деккер. 7: 419–493.
- ^ Дж. Фуэги и Дж. Фрэнсис (октябрь – декабрь 2003 г.), «Лавлейс и Бэббидж и создание заметок 1843 года»'", Анналы истории вычислительной техники, 25 (4): 16–26, Дои:10.1109 / MAHC.2003.1253887
- ^ В 1998 и 2000 годах были созданы компиляторы для языка как историческое упражнение. Рохас, Рауль, и другие. (2000). «Планкалкюль: первый язык программирования высокого уровня и его реализация». Institut frame Informatik, Freie Universität Berlin, Технический отчет B-3/2000. (полный текст)
- ^ Себеста, W.S. (2006). Концепции языков программирования. п. 44. ISBN 978-0-321-33025-3.
- ^ "Создатель Fortran Джон Бэкус умер - Технологии и гаджеты - NBC News". NBC News. 2007-03-20. Получено 2010-04-25.
- ^ "CSC-302 99S: Класс 02: Краткая история языков программирования". Math.grin.edu. Архивировано из оригинал на 2010-07-15. Получено 2010-04-25.
- ^ Падуя, Дэвид (февраль 2000 г.). "Компилятор FORTRAN I" (PDF). Вычислительная техника в науке и технике. 2 (1): 70–75. Дои:10.1109/5992.814661. Получено 7 ноября 2019.
- ^ Юджин Ло (18 июня 2010 г.). «Идеальный язык программирования HPC». Очередь. Ассоциация вычислительных машин. 8 (6).
- ^ «HPL - переносимая реализация высокопроизводительного теста Linpack для компьютеров с распределенной памятью». Получено 2015-02-21.
- ^ Хоппер (1978) стр. 16.
- ^ Саммет (1969) стр. 316
- ^ Саммет (1978) стр. 204.
- ^ Гордон, Майкл Дж. К. (1996). «От LCF к HOL: краткая история» (PDF). п. 3. Получено 2015-05-04.
Эдинбургский LCF, включая интерпретатор ML, был реализован на Lisp.
- ^ Манджу, Фархад (29 июля 2020 г.). "Откуда вы знаете, что это написал человек?". Нью-Йорк Таймс. ISSN 0362-4331. Получено 4 августа, 2020.
- ^ TIOBE (25 мая 2018 г.). «Индекс TIOBE, 100 лучших языков программирования согласно индексу TIOBE». www.tiobe.com. TIOBE_index.
- ^ "Octoverse 2018 на GitHub". Архивировано из оригинал на 2019-03-22.
- ^ Рохас, Рауль; Хашаген, Ульф (2002). Первые компьютеры: история и архитектура. MIT Press. п. 292. ISBN 978-0262681377. Получено 25 октября, 2013.
дальнейшее чтение
- Розен, Саул, (редактор), Системы программирования и языки, Макгроу-Хилл, 1967.
- Саммет, Жан Э., Языки программирования: история и основы, Прентис-Холл, 1969.
- Саммет, Жан Э. (июль 1972 г.). «Языки программирования: история и будущее». Коммуникации ACM. 15 (7): 601–610. Дои:10.1145/361454.361485. S2CID 2003242.
- Ричард Л. Вексельблат (ред.): История языков программирования, Академическая пресса 1981.
- Томас Дж. Бергин и Ричард Г. Гибсон (редакторы): История языков программирования, Аддисон Уэсли, 1996.