Вопрос

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

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

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

Решение

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

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

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

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

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

Может ли язык общего назначения отказаться от либо логики, либо математики?

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

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

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

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

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

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

Другие советы

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

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

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

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

Может ли язык общего назначения отказаться от либо логики, либо математики?

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top