Позвольте нам исследование и проследите источники конструкций языка.
Например:
Конструкции, представленные от LISP
Если еще Блок: "Повсеместная if-then-else структура, теперь считаемая само собой разумеющимся как существенный элемент любого языка программирования, была изобретена McCarthy для использования в Lisp, где это видело свое первое выступление в более общей форме (конусовидная структура). Это было наследовано Алголом, который популяризировал его". - Википедия
Функциональный Тип: Функции как граждане первого класса.
Сборка "мусора"
Вот исчерпывающая история основных конструкций языка программирования, которые я смог идентифицировать до сих пор. Я, несомненно, что-то упустил, но уверен, что сообщество SO поможет выявить эти упущения.
Планкалкюль (1943-45). Согласно Википедии и сообщениям статьи ACM , разработанный Конрадом Цузе, это был первый высокоуровневый язык программирования, не связанный с фон Нейманом. ] «Планкалкюль» Конрада Цузе: предшественник современных языков программирования » от FL Бауэр и Х. Восснер. Изначально язык был разработан для механического компьютера Zuse Z1 , но реализация компилятора группой из Свободного университета Берлина не была разработана до 2000 года. В языке было представлено следующее:
Fortran :
IPL (язык обработки информации) - рекурсия (позже включен в LISP) - (Ньюэлл и Саймон)
LISP - сборка мусора, лямбда-выражения и динамическая типизация - ( Маккарти, 1960 ), ( Маккарти, 1978 ), ( Википедия: Сборка мусора ) и ( Википедия: LISP )
АЛГОЛ 58 - введены кодовые блоки (но только для потока управления, а не для области видимости переменных) ( Backus, 1959 )
АЛГОЛ 60 - добавлена лексическая область видимости в блоки кода, определения вложенных функций с лексическая область видимости ( Backus et al 1963 )
ALGOL 68 - перегрузка оператора ( A.van Wijngaarden et al )
Simula - объекты, классы, подклассы, виртуальные методы, сопрограммы ( Dahl et al )
ML - параметрический полиморфизм ( Карделли и Вегнер )
ISBL (базовый язык информационных систем) - реляционная алгебра (здесь была введена раньше, чем в SQL) - ( Холл и др. ), ( Википедия: Реляционная алгебра )
Схема - первые полностью поддерживаемые замыкания ( Суссман и Стил, 1975 ), ( Суссман и Стил, 1998 )
. Как ни странно, для четырех наиболее часто используемых современных языков программирования, C, C ++, Java и C #, я не смог идентифицировать какие-либо проверяемые, принципиально новые конструкции языка программирования. Шаблоны в C ++ - это специальная версия полиморфизма, представленного в ML. Самым близким к новой языковой функции в Java было включение поддержки потоков. По большей части, все четыре языка представляют собой комбинацию желательных функций и концепций, изобретенных в другом месте.
Другие примечания: Хотя Prolog был одним из первых языков логического программирования, я не смог выделить какие-либо существенные особенности, которые ранее не были представлены в других языках.
Хотя есть некоторые ссылки на Википедию, большинство перечисленных выше функций было отнесено к надежным источникам, на которые есть ссылки ниже. Там, где я копался, чтобы найти авторитетные ссылки, детали из Википедии хорошо себя зарекомендовали.
Документ ACM, на который я ссылался в отношении Планкалкюля, подтверждает большинство его особенностей. Конрад Цузе был дальновидным гением.
ССЫЛКИ
F.L.Бауэр и Х. Вёсснер (1972). «Планкалкюль» Конрада Цузе: A Предшественник современных языков программирования . Связь АКМ, 15 (7): 678–685.
Рауль Рохас и др. (2000). «Планкалкюль: первый язык программирования высокого уровня и его реализация» . Институт информатики, Свободный университет Берлина, Технический отчет B-3/2000.
Дж. В. Бакус (1956). Система автоматического кодирования Fortran для IBM 704 EDPM . Международная корпорация бизнес-машин.
Аллен Ньюэлл и Герберт А. Саймон (1956). Машина теории логики: сложная система обработки информации . IRE Труды по теории информации ИТ-2, вып. 3: 61-79.
Джон Маккарти (1960). Рекурсивные функции символьных выражений и их вычисление машиной, Часть I , Сообщения ACM, v.3 n.4, p.184-195, апрель.
Джон Маккарти (1978). История LISP . В Ричард Л. Вексельблат, редактор, История языков программирования: Материалы конференции ACM SIGPLAN, страницы 173–197. Academic Press, 1-3 июня.
Дж. У. Бакус (1959). «Синтаксис и семантика предлагаемого международного алгебраического языка Цюрихской конференции ACM-GAMM» . Материалы Международной конференции по обработке информации. ЮНЕСКО. С. 125–132.
Дж. У. Backus, F. L. Bauer, J. Green, C. Katz, J. McCarthy, P. Naur, A .J. Перлис, Х. Рутисхаузер, К. Самельсон, Б. Вокуа, Дж. Х. Вегштейн, А. ван Вейнгаарден, М. Вудгер; под редакцией Питера Наура (1963). Пересмотренный отчет по алгоритмическому языку ALGOL 60 . Сообщения ACM, том 6, номер 1 (январь), страницы 1-17.
А. ван Вейнгаарден, А. (редактор), Майлу, Б. Дж., Пек, Дж. Э. Л., Костер, К. Х. А. (1969). «Отчет по алгоритмическому языку АЛГОЛ 68» , раздел 10.2.2. Нумер. Математика. 14, 79-218.
Оле-Йохан Даль, Бьёрм Мирхауг и Кристен Найгаард (1970). SIMULA, Общий базовый язык . (2-е издание) Осло, Норвежский вычислительный центр.
Лука Карделли и Питер Вегнер (1985). О типах, абстракции данных и полиморфизме . Вычислительные исследования, Том 17, н. 4, стр. 471-522, декабрь.
Патрик А.В. Холл, Питер Хичкок, Стивен Тодд (1975). «Алгебра соотношений для машинных вычислений» . Отчет о конференции второго симпозиума ACM по принципам языков программирования, Пало-Альто, Калифорния: ACM, стр. 225–232, январь.
Джеральд Джей Сассман и Гай Л. Стил младший (1975). Схема: интерпретатор для расширенного лямбда-исчисления . Записка AI 349, декабрь.
Джеральд Джей Сассман и Гай Л. Стил младший (1998). "Схема: Интерпретатор для расширенного лямбда-исчисления ». Высшие порядки и символические вычисления 11 (4): 399–404, декабрь, Kluwer Academic Publishers, Бостон.
Заявление SWITCH - 1965 - АЛГОЛ W
Согласно: http://ojs.pythonpapers.org/index.php/tpp/article/viewFile/49/45
АЛГОЛ, отец всех процедурных языков, не имел описания падежа, поскольку концепция падежа еще не была изобретена в языках высокого уровня. Затем в 1965 году был выпущен редко используемый язык ALGOL W, который содержал оператор switch ... case, изобретенный К.А.Р. Хоаром, который допускал неупорядоченные неперекрывающиеся значения и диапазоны.
C и Pascal оба являются производными от этого родительского языка, и оба имеют форму case: C - знакомый переключатель (переменная) case ... и Pascal, использующий переменную case begin value1: .... C ++, PHP, C #, и синтаксис Java унаследованы от версии C.