Ответ 1
Вот обширная история основных конструкций языка программирования, которые я смог определить до сих пор. Я, несомненно, пропустил что-то, но я уверен, что сообщество SO поможет выявить эти упущения.
Plankalkül (1943-45) - Разработан Konrad Zuse, это был первый высокоуровневый язык программирования не-фон Неймана, согласно Wikipedia и связи в бумаге ACM "The Plankalkül" Конрада Зуза: предвестник языков программирования сегодня " от FL Бауэра и Х. Восснера. Язык был первоначально разработан для механического Zuse Z1 computer, но реализация компилятора командой в Свободном университете Берлина не был разработан до 2000 года. На этом языке было представлено следующее:
- "Операторы присваивания, подпрограммы, условные операторы, итерация, арифметика с плавающей запятой, массивы, иерархические структуры записей, утверждения и обработка исключений" (Wikipedia: Plankalkül).
Fortran
- Do-loop (действительно эквивалент современного for-loop в таких языках, как C, С++ и т.д.) (Wikipedia: For_loop)
- Трехсторонний арифметический оператор IF (Backus)
- вычисленный GOTO (предшественник оператора switch в Algol 58 и Algol 60) - из (Backus), (Википедия: Fortran) и (Википедия: ALGOL 58)
IPL (язык обработки информации) - рекурсия (позже включена в LISP) - (Newell and Simon)
LISP - сбор мусора, лямбда-выражения и динамическая типизация - (McCarthy, 1960), (McCarthy, 1978), (Википедия: сбор мусора), и (Википедия: LISP)
ALGOL 58 - введенные блоки кода (но только для потока управления, а не для переменной области) (Backus, 1959)
ALGOL 60 - добавлена лексическая область для блоков кода, определения вложенных функций с лексической областью (Backus et al 1963)
ALGOL 68 - перегрузка оператора (A. van Wijngaarden et al)
Simula - объекты, классы, подклассы, виртуальные методы, сопрограммы (Dahl et al)
ML - параметрический полиморфизм (Cardelli and Wegner)
ISBL (базовый язык информационных систем) - реляционная алгебра (была введена здесь ранее, чем в SQL) - (Hall et al.), (Википедия: реляционная алгебра)
Схема - первые полностью поддерживаемые закрытия (Sussman and Steele, 1975), (Sussman and Steele, 1998)
Как ни странно, для четырех наиболее часто используемых современных языков программирования C, С++, Java и С# я не смог идентифицировать какие-либо проверенные, принципиально новые конструкции языка программирования. Шаблоны на С++ являются аддоктивной версией полиморфизма, введенной в ML. Ближайшей особенностью новой языковой функции в Java было включение поддержки потоков. В основном, все четыре языка представляют собой сочетание желательных функций и концепций, изобретенных в других местах.
Другие примечания: хотя Prolog был одним из первых языков логического программирования, я не мог идентифицировать какие-либо существенные функции, ранее не представленные на других языках.
Хотя есть некоторые ссылки в Википедии, большинство перечисленных выше функций были отнесены к твердым источникам, на которые ссылаются ниже. Там, где я добрался, чтобы найти авторитетные ссылки, детали, основанные на Википедии, хорошо сохранились.
Документ ACM, на который я ссылался на Plankalkül, подтверждает большинство его функций. Конрад Зузе был дальновидным гением.
ЛИТЕРАТУРЫ
F.L. Бауэр и Х. Вёсснер (1972). "Plankalkül" Конрада Зузе: A Предшественник современных языков программирования. связи ACM, 15 (7): 678-685.
Raúl Rojas et al. (2000). "Plankalkül: первый язык программирования высокого уровня и его реализация" . Institut für Informatik, Freie Universität Berlin, Технический отчет B-3/2000.
J. W. Backus (1956). Автоматическая система кодирования Fortran для EDPM IBM 704. Корпорация International Business Machines.
Аллен Ньюэлл и Герберт А. Саймон (1956). Машина логической теории: сложная система обработки информации. IRE Сделки по теории информации IT-2, вып. 3: 61-79.
Джон Маккарти (1960). Рекурсивные функции символических выражений и их вычисление машиной, часть I, Сообщения ACM, v.3 n.4, p.184-195, Апрель. Джон МакКарти (1978). История LISP. В Ричарде Л. Вексельблате, редакторе истории языков программирования: материалы конференции ACM SIGPLAN, стр. 173-197. Академическая пресса, 1-3 июня.J.W. Бэккус (1959). "Синтаксис и семантика предлагаемого международного алгебраического языка конференции Цюрихского ACM-GAMM" . Материалы Международной конференции по обработке информации. ЮНЕСКО. стр. 125-132.
J.W. Backus, F. L. Bauer, J. Green, C. Katz, J. McCarthy, P. Naur, A.J. Perlis, H. Rutishauser, K. Samelson, B. Vauquois, J. H. Wegstein, A. van Wijngaarden, M. Woodger; под редакцией Питера Наура (1963). Пересмотренный отчет по алгоритмическому языку ALGOL 60. Сообщения ACM, том 6, номер 1 (январь), страницы 1-17.
а. van Wijngaarden, A. (Editor), Mailloux, B. J., Peck, J. E. L., Koster, C. H. A. (1969). "Отчет об алгоритмическом языке ALGOL 68" , раздел 10.2.2. Numer. Математика 14, 79-218.
Ole-Johan Dahl, Bjørm Myhrhaug и Kristen Nygaard (1970). SIMULA, общий базовый язык. (2-е издание) Осло, Норвежский вычислительный центр.
Лука Карделли и Питер Вегнер (1985). О понятиях понимания, абстракции данных и полиморфизмах. Вычислительные исследования, т. 17 н. 4, с. 471-522, декабрь.
Патрик А.В. Холл, Питер Хичкок, Стивен Тодд (1975). "Алгебра отношений для машинного вычисления" . Запись конференции второго симпозиума ACM по принципам языков программирования, Пало-Альто, Калифорния: ACM, стр. 225-232, январь.
Джеральд Джей Суссман и Гай Л. Стил, младший (1975). Схема: интерпретатор расширенного исчисления лямбда. AI Memo 349, декабрь.
Джеральд Джей Суссман и Гай Л. Стил, младший (1998). " Схема: Переводчик для расширенного исчисления лямбда ". Вычисление высших порядков и символьных вычислений 11 (4): 399-404, декабрь, академические издатели Kluwer, Бостон.