Подтвердить что ты не робот

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

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

Вот некоторые моменты, которые я считаю важными:

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

Ответ 1

Я предлагаю Agda, потому что он имеет совместимость с Haskell. Как таковой, он, вероятно, зависит от типизированного языка с лучшими библиотеками. Документация и учебники немного тусклые, хотя и поддержка инструментов тоже не слишком велика. Честно говоря, большинство зависимых языков не очень полно развиты на данный момент.

Если вы вместо этого пошли с немного более слабым спросом на то, что ваш язык должен GADT, есть два очень ухоженных варианта: Scala и Haskell. ИМХО вы получаете большую часть преимуществ зависимых типов с помощью GADT, и вы сохраняете typechecking разрешимым для загрузки.

Scala, а у Haskell есть большие и хорошо документированные библиотеки, рабочая цепочка инструментов, а также FFI (для Java и C соответственно). У обоих есть сообщества, которые используют их для решения реальных проблем, таких как parsing и web разработка.

Ответ 2

Принятый ответ содержит дезинформацию. Typechecking в Agda разрешима, если вы не отключите проверку положительности/завершения/юниверса. Более того, бесконечные процессы программируются в Agda, точно так же, как процессы IO программируются в Haskell: единственным ограничением является то, что бесконечные процессы не могут разворачиваться неограниченно при выполнении в процессе проверки типов. Вы можете реализовать симулятор машины Тьюринга в Агда: вы просто не можете сказать ложь, что он гарантирует прекратить или убедить typechecker запускать его неограниченно.

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

Идрис, как было предложено Twey, является ближайшим кандидатом на "реальный мир", на котором навязывается язык. Это гораздо больше сосредоточилось на том, чтобы сделать вещи, чем Агда. Я бы порекомендовал Agda как лучший инструмент для того, чтобы справиться с идеями, лежащими в основе программируемого программирования, но Идрис - более практичный вариант.

Это, я рад сказать, стоит рассмотреть недавние выпуски Haskell в качестве кандидата в этой дискуссии. Начиная с GHC 7.4, Haskell начал поддерживать полезное представление данных типа уровня и, по крайней мере, с помощью одноэлементного метода (например, kludge), мы можем действительно иметь типы в зависимости от значений времени выполнения (за счет их зависимости от статических переменных ограничивается равными значениями времени выполнения). Таким образом, Haskell является реальным "реальным миром" на ранней стадии эксперимента с зависимыми типами.

Ответ 3

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