История программирования - PullRequest
15 голосов
/ 26 апреля 2010

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

Например:

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

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

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

  • Сборка мусора

Ответы [ 2 ]

21 голосов
/ 08 июня 2010

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

Plankalkül (1943-45) - Разработанный Конрадом Цузе, это был первый высокоуровневый язык программирования не фон Неймана, согласно Wikipedia и сообщениям ACM бумага "Планкалкюль" Конрада Цузе: предшественник современных языков программирования " от FL Бауэр и Х. Восснер. Язык изначально разрабатывался для механического компьютера Zuse Z1 , но реализация компилятора командой из Свободного университета Берлина не была разработана до 2000 года. Язык ввел следующее:

  • «Операторы присваивания, подпрограммы, условные операторы, итерация, арифметика с плавающей запятой, массивы, иерархические структуры записей, утверждения и обработка исключений» ( Wikipedia: Plankalkül ).

Fortran

  • Do-loop (действительно эквивалент современного цикла for в таких языках, как C, C ++ и т. Д.) ( Wikipedia: For_loop )
  • Трехсторонняя арифметическая инструкция IF ( Backus )
  • вычислено GOTO (предшественник оператора switch в Algol 58 и Algol 60) - из ( Backus ), ( Wikipedia: Fortran ) и ( Wikipedia: ALGOL 58 )

IPL (язык обработки информации) - рекурсия (позже включена в LISP) - (Ньюэлл и Саймон)

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 - параметрический полиморфизм ( Карделли и Вегнер )

ISBL (базовый язык информационных систем) - реляционная алгебра (была введена здесь раньше, чем в SQL) - ( Hall et al ), ( Wikipedia: Реляционная алгебра )

Схема - первые полностью поддерживаемые затворы ( Sussman and Steele, 1975 ), ( Sussman and Steele, 1998 )

Как ни странно, для четырех из наиболее часто используемых современных языков программирования, C, C ++, Java и C #, я не смог идентифицировать какие-либо поддающиеся проверке, принципиально новые конструкции языка программирования. Шаблоны в C ++ представляют собой временную версию полиморфизма, введенную в ML. Наиболее близкой вещью к новой языковой функции в Java было включение поддержки потоков. В основном все четыре языка представляют собой комбинацию желательных функций и концепций, изобретенных в других местах.

Другие примечания: хотя Prolog был одним из первых языков логического программирования, я не смог выявить каких-либо существенных особенностей, ранее не представленных в других языках.

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

Документ ACM, на который я ссылался для Plankalkül, подтверждает большинство его возможностей. Конрад Цузе был дальновидным гением.

СПИСОК ЛИТЕРАТУРЫ

F.L. Бауэр и Х. Весснер (1972). «Планкалкюль» Конрада Цузе: A предвестниксовременных языков программирования . связи ACM, 15 (7): 678–685.

Рауль Рохас и соавт. (2000). "Plankalkül: первый язык программирования высокого уровня и его реализация" . Institut für Informatik, Freie Universität Berlin, Технический отчет B-3/2000.

J. В. Бэкус (1956). Система автоматического кодирования Fortran для IBM 704 EDPM . Международная корпорация бизнес-машин.

Аллен Ньюэлл и Герберт А. Саймон (1956). Машина теории логики: сложная система обработки информации . IRE Труды по теории информации IT-2, № 1, с. 3: 61-79.

Джон Маккарти (1960). Рекурсивные функции символьных выражений и их вычисление на машине, часть I , Сообщения ACM, т.3 № 4, с.184-195, апрель.

Джон Маккарти (1978). История ЛИСП . Ричард Л. Вексельблат, редактор журнала «История языков программирования: материалы конференции ACM SIGPLAN», стр. 173-197. Академическая пресса, 1-3 июня.

J.W. Бэкус (1959). «Синтаксис и семантика предлагаемого международного алгебраического языка Цюрихской конференции ACM-GAMM» . Материалы международной конференции по обработке информации. ЮНЕСКО. С. 125–132.

J.W. Бэкус, Ф. Л. Бауэр, Дж. Грин, К. Кац, Дж. Маккарти, П. Наур, А.Дж. Perlis, H. Rutishauser, K. Samelson, B. Vauquois, J. H. Wegstein, A. van Wijngaarden, M. Woodger; под редакцией Питера Наура (1963). Пересмотренный отчет по алгоритмическому языку АЛГОЛ 60 . Сообщения ACM, том 6, номер 1 (январь), страницы 1-17.

A. van Wijngaarden, A. (редактор), Mailloux, B.J., Peck, J.E.L., Koster, C.H.A. (1969). «Отчет по алгоритмическому языку АЛГОЛ 68» , раздел 10.2.2. Numer. Математика 14, 79-218.

Оле-Йохан Даль, Бьёрм Мирхауг и Кристен Нюгаард (1970). SIMULA, общий базовый язык . (2-е издание) Осло, Норвежский вычислительный центр.

Лука Карделли и Питер Вегнер (1985). О типах, абстракции данных и полиморфизме . Компьютерные обзоры, том 17 н. 4, стр. 471-522, декабрь.

Патрик А.В. Холл, Питер Хичкок, Стивен Тодд (1975). "Алгебра отношений для машинного вычисления" . Протокол конференции второго симпозиума ACM по принципам языков программирования, Пало-Альто, Калифорния: ACM, с. 225–232, январь.

Джеральд Джей Суссман и Гай Л. Стил, младший (1975). Схема: интерпретатор расширенного лямбда-исчисления . AI Memo 349, декабрь.

Джеральд Джей Суссман и Гай Л. Стил, младший (1998). "Схема: Интерпретатор расширенного лямбда-исчисления ". Высший порядок и символические вычисления 11 (4): 399–404, декабрь, Kluwer Academic Publishers, Бостон.

3 голосов
/ 26 апреля 2010

оператор SWITCH - 1965 - АЛГОЛ W

Согласно: http://ojs.pythonpapers.org/index.php/tpp/article/viewFile/49/45

У АЛГОЛА, отца всех процедурных языков, не было описания случая, поскольку концепция случая еще не была изобретена на языках высокого уровня. Затем в 1965 году был выпущен редко используемый язык ALGOL W, который содержал оператор switch ... case, придуманный C.A.R. Hoare, который допускал неупорядоченные непересекающиеся значения и диапазоны. C и Pascal оба получены из этого родительского языка, и оба имели форму регистра: C знакомый переключатель (переменная) case ... и Pascal, использующий регистр переменной begin value1: .... C ++, PHP , C # и синтаксис Java являются производными от версии C.

...