Конвергенция математики и языков программирования

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

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

  • каковы преимущества моделирования языков программирования или языковых функций по математике?
  • каковы преимущества моделирования языка на принципах формальной логики?
  • может ли язык общего назначения отказаться от логики или математики?
  • Каковы некоторые из языков, которые действительно показывают от преимуществ любого подхода?
  • какие аппаратные функции делают один подход более привлекательным, чем другой?

4 ответов


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

кроме того, я не уверен, что теоретическая красота языков программирования, основанных на математике/логике, действительно стоит многого, когда дело доходит до получения вещей, написанных эффективным, поддерживаемым кодом.

Что касается конкретных вопросов.

каковы преимущества моделирования языки программирования или язык особенности по математике? В чем преимущества моделирования языка на принципах формальной логики?

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

может ли язык общего назначения forgo логика или математика?

зависит от того, что вы подразумеваете под "forgo". Вы можете иметь язык без математических операций (хотя вы должны получить довольно эзотерический; машины Тьюринга-единственные, о которых я могу думать, которые даже не имеют приращения или декремента), и вы, конечно, можете иметь тот, который не заботится о формализмах (ассемблер, C). Но я не думаю, что возможно иметь язык программирования без логики (хотя это может быть извращенная логика, см. тоже)

Каковы некоторые из языков, которые действительно показывают преимущества любого подхода?

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

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

какие аппаратные функции делают один подход более привлекательным, чем другой?

нет. Провал Lisp Машины доказывает ИМО довольно убедительно, что компиляторы+общее оборудование более мощные, чем специализированное оборудование. Однако можно сказать, что грубая сила современной системы делает языки, которые полностью игнорируют аппаратные ограничения, практичными там, где они ранее не были.


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


ну, если честно, многие из этих так называемых" современных языков программирования " просто imlpementing вещи, которые были в различных языках программирования на протяжении более 50 лет.


каковы преимущества моделирования языков программирования или языковых функций по математике? В чем преимущества моделирования языка на принципах формальной логики?

это одно и то же: формальная логика-это всего лишь раздел математики. Два основных преимущества использования формальной математики-оптимизация и безопасность. Когда алгоритм не имеет побочных эффектов (т. е. референтно прозрачен) и выражается исключительно с помощью компиляторов чистой математики можно перестроить алгоритм в соответствии с правилами математики. Это облегчает компиляторам оптимизацию кода и использование параллельных архитектур. Еще одним важным преимуществом является возможность доказать определенные свойства кода.

может ли язык общего назначения forgo логика или математика?

нет. Как бы вы делали логические операции или арифметику без логики или математики. Возможно, вы имеете в виду что-то, чего я не понимаю.

Каковы некоторые из языков, которые действительно демонстрируют преимущества любого подхода?

Haskell, ML, OCaML, Miranda, Alice, Oz, Erlang, Twelf, Coq, Prolog, все демонстрируют более строгие приложения математики к программированию.

какие аппаратные функции делают один подход более привлекательным, чем другой?

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