История программирования

Давайте исследовать и проследить происхождение языковых конструкций.

Например:

Конструкции, введенные из LISP

  • If-Else Block: "Вездесущая структура if-then-else, теперь принятая как должное как необходимый элемент любого языка программирования, была изобретена Маккарти для использования в Lisp, где он увидел свое первое появление в более общей форме (структура cond). Он был унаследован Алголом, который популяризировал его". - WikiPedia

  • Тип функции: функционирует как граждане первого класса.

  • Коллекция мусора

Ответы

Ответ 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, Бостон.

Ответ 2

инструкция SWITCH - 1965 - ALGOL W

В соответствии с: http://ojs.pythonpapers.org/index.php/tpp/article/viewFile/49/45

АЛГОЛ, отец всех процедурных языков, не имел случая, поскольку понятие случая еще не было изобретено на языках высокого уровня. Затем в 1965 году был выпущен редко используемый язык ALGOL W, в котором содержался оператор... case case, изобретенный C. A. R. Hoare, который допускал неупорядоченные неперекрывающиеся значения и диапазоны.

C и Pascal оба получены из этого родительского языка, и оба имеют форму case: C знакомый случай (переменный) case... и Pascal с использованием переменной case begin value1:.... С++, PHP, С#, и синтаксис Java получены из версии C.