RDBMS основан на Алгебре отношений, а также Модели Codd. У нас есть что-то подобным этому для Языков программирования или ООП?
Есть ли у нас [базовая модель] для языков программирования?
Небеса, да. И поскольку существует так много языков программирования, есть несколько моделей на выбор. Самое важное первое:
Нетипизированное лямбда-исчисление Черча представляет собой модель вычислений, столь же мощную, как машина Тьюринга (не больше и не меньше).Знаменитая «гипотеза Черча-Тьюринга» состоит в том, что эти две эквивалентные модели представляют собой наиболее общую модель вычислений, которую мы знаем, как реализовать. Лямбда-исчисление чрезвычайно просто; в целом язык
e :: = x | e1 e2 | \ x.e
, которые составляют переменные , приложения функций и определения функций . Лямбда-исчисление также имеет довольно большой набор «правил редукции» для упрощения выражений. Если вы найдете выражение, которое нельзя сократить, оно называется «нормальной формой» и представляет собой значение.
Лямбда-исчисление настолько универсально, что его можно использовать в нескольких направлениях.
Если вы хотите использовать все доступные правила, вы можете написать специализированные инструменты, такие как частичные оценщики и части компиляторов.
Если вы избегаете сокращения любого подвыражения с помощью лямбда, но в остальном используете все доступные правила, вы получите модель ленивого функционального языка, такого как Haskell или Clean. В этой модели, если сокращение может завершиться, это гарантировано, и легко представить бесконечные структуры данных. Очень могущественный.
Если вы избегаете сокращения любого подвыражения с помощью лямбда, и если вы также настаиваете на приведении каждого аргумента к нормальной форме перед применением функции, тогда у вас есть модель нетерпеливого функционального языка, такого как F # , Lisp, Objective Caml, Scheme или Standard ML.
Существует также несколько разновидностей типизированных лямбда-исчислений, самые известные из которых сгруппированы под названием Система F , которые были независимо открыты Жираром (в логике) и Рейнольдс (в области информатики). Система F - отличная модель для таких языков, как CLU, Haskell и ML, которые являются полиморфными, но имеют проверку типов во время компиляции. Хиндли (в логике) и Милнер (в информатике) открыли ограниченную форму Системы F (теперь называемую системой типов Хиндли-Милнера), которая позволяет вывести выражения Системы F из некоторых выражений нетипизированного лямбда-исчисление. Дамас и Милнер разработали алгоритм вывода, который используется в стандартном машинном обучении и обобщен на других языках.
Лямбда-исчисление просто перемещает символы. Новаторская работа Даны Скотт в денотационной семантике показала, что выражения в лямбда-исчислении действительно соответствуют математическим функциям - и он определил, какие из них. Работа Скотта особенно важна для понимания «рекурсивных определений», которые являются обычным явлением в информатике, но бессмысленны с математической точки зрения. Скотт и Кристофер Стрейчи показали, что рекурсивное определение эквивалентно наименее определенному решению рекурсивного уравнения, и, кроме того, показали, как это решение может быть построено. Любой язык, допускающий рекурсию, и особенно языки, допускающие рекурсию произвольного типа (например, Haskell и Clean), чем-то обязаны модели Скотта.
Существует целое семейство моделей, основанных на абстрактных машинах . Здесь не столько индивидуальная модель, сколько техника. Вы можете определить язык, используя конечный автомат и определяя переходы на нем. Это определение охватывает все, от машин Тьюринга до машин фон Неймана и систем переписывания терминов, но в целом абстрактная машина спроектирована так, чтобы быть «максимально приближенной к языку».«Проектирование таких машин и бизнес по доказательству теорем о них относятся к операционной семантике .
А как насчет объектно-ориентированного программирования?
Я не так хорошо образован как и следовало бы говорить об абстрактных моделях, используемых для ООП. Модели, с которыми я наиболее знаком, очень тесно связаны со стратегиями реализации. Если бы я хотел исследовать эту область дальше, я бы начал с денотационной семантики Уильяма Кука для Smalltalk. язык очень прост, почти такой же простой, как лямбда-исчисление, поэтому он представляет собой хороший пример для моделирования более сложных объектно-ориентированных языков.)
Вей Ху напоминает мне, что Мартин Абади и Лука Карделли собрали амбициозную группу работают над фундаментальными исчислениями (аналогичными лямбда-исчислениям) для объектно-ориентированных языков. Я недостаточно хорошо понимаю эту работу, чтобы резюмировать ее, но вот отрывок из Пролога их книги, который, как мне кажется, стоит процитировать:
Процедура уральские языки в целом хорошо понимаются; их конструкции к настоящему времени стандартны, а их формальная основа прочна. Фундаментальные особенности этих языков были преобразованы в формализмы, которые оказались полезными для выявления и объяснения проблем реализации, статического анализа, семантики и проверки.
Аналогичное понимание еще не появилось для объектно-ориентированных языков. Нет широкого согласия относительно набора базовых конструкций и их свойств ... Эта ситуация могла бы улучшиться, если бы мы лучше понимали основы объектно-ориентированных языков.
... мы воспринимаем объекты как примитивные и концентрируемся на внутренних правилах, которым объекты должны подчиняться. Мы вводим объектные исчисления и развиваем теорию объектов вокруг них. Эти исчисления объектов так же просты, как исчисления функций, но представляют объекты напрямую.
Я надеюсь, что эта цитата даст вам представление о сути произведения.
Лисп основан на лямбда-исчислении и является источником вдохновения для большей части того, что мы видим в современных языках.
Машины фон-Неймана являются основой современных компьютеров, которые сначала были запрограммированы на языке ассемблера, а затем на FORmula TRANslator. Затем была применена формальная лингвистическая теория контекстно-свободных грамматик, лежащая в основе синтаксиса всех современных языков.
Теория вычислимости (формальные автоматы) имеет иерархию типов машин, которая параллельна иерархии формальных грамматик, например, регулярная грамматика = конечный автомат, контекстно-свободная грамматика = выталкивающий автомат, контекстно-зависимый -грамматика = машина Тьюринга.
Существует также теория информации двух типов, Шеннона и Колмогорова, которая может быть применена к вычислениям.
Существуют менее известные модели вычислений, такие как теория рекурсивных функций, регистровые машины и пост-машины.
И не забывайте логику предикатов в ее различных формах.
Добавлено: Я забыл упомянуть дискретную математику - теорию групп и теорию решеток. В частности, решетки (IMHO) являются особенно изящной концепцией, лежащей в основе всей логической логики и некоторых моделей вычислений, таких как денотационная семантика.
Если вы изучаете языки программирования (например, в университете), вам потребуется много теории, а не математики.
Примеры:
Есть много измерений для ответа на ваш вопрос, разбросанных по ответам.
Прежде всего, чтобы описать синтаксис языка и указать, как будет работать синтаксический анализатор, мы используем контекстно-свободные грамматики.
Затем вам нужно присвоить значение синтаксису. Пригодится формальная семантика; основными игроками являются операционная семантика, денотационная семантика и аксиоматическая семантика.
Чтобы исключить плохие программы, у вас есть система типов.
В конце концов, все компьютерные программы могут быть сведены (или скомпилированы, если хотите) очень простых вычислительных моделей. Императивные программы легче сопоставляются с машинами Тьюринга, а функциональные программы - с лямбда-исчислением.
Если вы изучаете все это самостоятельно, я настоятельно рекомендую http://www.uni-koblenz.de/~laemmel/paradigms0910/ , потому что лекции записываются на видео и выкладываются онлайн.
Раздел истории в Википедии Объектно-ориентированное программирование может быть поучительным.
Ближайшая аналогия, которую я могу придумать, - это эволюционирующие алгебры Гуревича, которые в настоящее время более известны под названием «абстрактные государственные машины Гуревича» (ГАСМ).
Я давно надеялся увидеть больше реальных приложений теории, когда Гуревич присоединился к Microsoft, но похоже, что очень немногие из них выходят наружу. Вы можете проверить страницу ASML на сайте Microsoft.
Преимущество GASM в том, что они очень похожи на псевдокод, даже если их семантика определена формально. Это означает, что практикующие могут легко их понять.
В конце концов, я думаю, что частью успеха реляционной алгебры является то, что это формальная основа понятий, которые можно легко понять, а именно таблиц, внешних ключей, объединений и т. Д.
Я думаю, нам нужно что-то подобное для динамических компонентов программной системы.
Как мне известно, формальные грамматики используются для описания синтаксиса.
Функциональные языки, такие как lisp, унаследовали свои основные концепции от «лямбда-вычислений» Черча (статья в википедии здесь ). С уважением