Есть ли какая-либо Математическая модель или Теория позади Языков программирования? [закрытый]

RDBMS основан на Алгебре отношений, а также Модели Codd. У нас есть что-то подобным этому для Языков программирования или ООП?

22
задан Padmarag 18 March 2010 в 12:39
поделиться

9 ответов

Есть ли у нас [базовая модель] для языков программирования?

Небеса, да. И поскольку существует так много языков программирования, есть несколько моделей на выбор. Самое важное первое:

  • Нетипизированное лямбда-исчисление Черча представляет собой модель вычислений, столь же мощную, как машина Тьюринга (не больше и не меньше).Знаменитая «гипотеза Черча-Тьюринга» состоит в том, что эти две эквивалентные модели представляют собой наиболее общую модель вычислений, которую мы знаем, как реализовать. Лямбда-исчисление чрезвычайно просто; в целом язык

     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. язык очень прост, почти такой же простой, как лямбда-исчисление, поэтому он представляет собой хороший пример для моделирования более сложных объектно-ориентированных языков.)

Вей Ху напоминает мне, что Мартин Абади и Лука Карделли собрали амбициозную группу работают над фундаментальными исчислениями (аналогичными лямбда-исчислениям) для объектно-ориентированных языков. Я недостаточно хорошо понимаю эту работу, чтобы резюмировать ее, но вот отрывок из Пролога их книги, который, как мне кажется, стоит процитировать:

Процедура уральские языки в целом хорошо понимаются; их конструкции к настоящему времени стандартны, а их формальная основа прочна. Фундаментальные особенности этих языков были преобразованы в формализмы, которые оказались полезными для выявления и объяснения проблем реализации, статического анализа, семантики и проверки.

Аналогичное понимание еще не появилось для объектно-ориентированных языков. Нет широкого согласия относительно набора базовых конструкций и их свойств ... Эта ситуация могла бы улучшиться, если бы мы лучше понимали основы объектно-ориентированных языков.

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

Я надеюсь, что эта цитата даст вам представление о сути произведения.

41
ответ дан 29 November 2019 в 03:32
поделиться

Лисп основан на лямбда-исчислении и является источником вдохновения для большей части того, что мы видим в современных языках.

Машины фон-Неймана являются основой современных компьютеров, которые сначала были запрограммированы на языке ассемблера, а затем на FORmula TRANslator. Затем была применена формальная лингвистическая теория контекстно-свободных грамматик, лежащая в основе синтаксиса всех современных языков.

Теория вычислимости (формальные автоматы) имеет иерархию типов машин, которая параллельна иерархии формальных грамматик, например, регулярная грамматика = конечный автомат, контекстно-свободная грамматика = выталкивающий автомат, контекстно-зависимый -грамматика = машина Тьюринга.

Существует также теория информации двух типов, Шеннона и Колмогорова, которая может быть применена к вычислениям.

Существуют менее известные модели вычислений, такие как теория рекурсивных функций, регистровые машины и пост-машины.

И не забывайте логику предикатов в ее различных формах.

Добавлено: Я забыл упомянуть дискретную математику - теорию групп и теорию решеток. В частности, решетки (IMHO) являются особенно изящной концепцией, лежащей в основе всей логической логики и некоторых моделей вычислений, таких как денотационная семантика.

10
ответ дан 29 November 2019 в 03:32
поделиться

Одной из концепций может быть Машина Тьюринга .

5
ответ дан 29 November 2019 в 03:32
поделиться

Если вы изучаете языки программирования (например, в университете), вам потребуется много теории, а не математики.

Примеры:

3
ответ дан 29 November 2019 в 03:32
поделиться

Есть много измерений для ответа на ваш вопрос, разбросанных по ответам.

Прежде всего, чтобы описать синтаксис языка и указать, как будет работать синтаксический анализатор, мы используем контекстно-свободные грамматики.

Затем вам нужно присвоить значение синтаксису. Пригодится формальная семантика; основными игроками являются операционная семантика, денотационная семантика и аксиоматическая семантика.

Чтобы исключить плохие программы, у вас есть система типов.

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

Если вы изучаете все это самостоятельно, я настоятельно рекомендую http://www.uni-koblenz.de/~laemmel/paradigms0910/ , потому что лекции записываются на видео и выкладываются онлайн.

2
ответ дан 29 November 2019 в 03:32
поделиться

Раздел истории в Википедии Объектно-ориентированное программирование может быть поучительным.

2
ответ дан 29 November 2019 в 03:32
поделиться

Ближайшая аналогия, которую я могу придумать, - это эволюционирующие алгебры Гуревича, которые в настоящее время более известны под названием «абстрактные государственные машины Гуревича» (ГАСМ).

Я давно надеялся увидеть больше реальных приложений теории, когда Гуревич присоединился к Microsoft, но похоже, что очень немногие из них выходят наружу. Вы можете проверить страницу ASML на сайте Microsoft.

Преимущество GASM в том, что они очень похожи на псевдокод, даже если их семантика определена формально. Это означает, что практикующие могут легко их понять.

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

Я думаю, нам нужно что-то подобное для динамических компонентов программной системы.

2
ответ дан 29 November 2019 в 03:32
поделиться

Как мне известно, формальные грамматики используются для описания синтаксиса.

0
ответ дан 29 November 2019 в 03:32
поделиться

Функциональные языки, такие как lisp, унаследовали свои основные концепции от «лямбда-вычислений» Черча (статья в википедии здесь ). С уважением

6
ответ дан 29 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: