Обучение / использование ML.Какую систему я должен использовать? - PullRequest
8 голосов
/ 04 марта 2011

Я хочу изучать и использовать ML, но есть много компиляторов. Мне нужно:

  • Скорость
  • низкое использование памяти
  • потоковая
  • изменяемые массивы и типы записей
  • продолжений
  • готов к производству код
  • Easy FFI
  • до даты
  • ... полезные библиотеки
  • портативный до некоторой степени

мне не нужно:

  • объекты
  • GUI
  • поддержка Windows

Например, я нашел OCaml , Батареи OCaml включают и MLton . Какой-нибудь совет для меня, какой мне выбрать?

Ответы [ 3 ]

9 голосов
/ 04 марта 2011

SML имеет лучшую поддержку продолжений.Если у вас острая необходимость в продолжениях, это лучший выбор;OCaml не поддерживает их на языке, но есть библиотека Delimcc Олега для продолжения с разделителями;будучи внешним, он, вероятно, медленнее, чем реализации SML.В противном случае, у OCaml, похоже, больше возможностей в наши дни, поэтому следует ожидать, что инструментальные средства и библиотеки будут немного лучше.

В целом, SML имеет тенденцию быть более элегантным, в то время как у OCaml есть более продвинутые функции, причуды.и пользователи.С точки зрения производительности они оба хороши.

(см. this для синтаксического сравнения наиболее распространенных фрагментов обоих языков; конечно, объекты и полиморфные варианты OCaml не представлены.)

5 голосов
/ 05 марта 2011

Хорошо для MLton:

  • Скорость
    • Вся оптимизация программы определенно дает вам лучшую скорость, чем OCaml, однако штраф, который вы отбываете за каждую перекомпиляцию, может быть довольно раздражающим. См. эту ссылку для простого неформального сравнения MLton и OCaml
  • Threading
  • Изменяемые массивы и типы записей
  • Продолжение
  • готов для производственного кода
    • Очевидно, зависит от библиотек, которые вы используете. Но базовая библиотека солидна, однако MLton имеет свои дополнения , а у некоторых других есть репозитории с расширениями, перечисленными здесь . Однако проект библиотеки MLton содержит хороший код. Однако, как и во многих таких библиотеках / расширениях, они, как правило, полагаются на другие расширения, сделанные ими самостоятельно, и поэтому их трудно использовать только небольшими частями.
  • Easy ffi
    • ForeignFunctionInterface и NoLonger-FFI великолепны. Однако у меня были проблемы со скоростью с NL-FFI на больших кодовых базах C, что, я думаю, связано с тем, что MLton не удалял полные типы фантомов. Однако это всего лишь предположение, я мог сделать что-то не так.
  • Портативный в некоторой степени
5 голосов
/ 04 марта 2011

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

. Есть много компаний, которые используют OCaml в производстве для всех видов вещей.Некоторые компании упоминаются на веб-сайте консорциума Caml .

Я также рекомендую прочитать несколько превосходных отчетов об опыте работы с OCaml:

OCaml в Jane Street Capital

OCaml на XenSource

...