«В чем преимущества OCaml как языка программирования» - это действительно вопрос, основанный на мнениях, и тот, который я не собираюсь решать здесь. Тем не менее, я работаю над командой Hack в Facebook и тесно сотрудничаю с командой Flow, поэтому я могу ответить 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Ответить с цитатой
- Основная причина заключается в том, что OCaml имеет блестящую поддержку defining your own datatypes, а затем pattern matching on them. Большинство из того, что делают Hack и Flow, являются операциями над различными формами AST и имеют действительно хороший способ выразить «если вы видите этот узел с таким узлом внутри него, сделайте это», это неоценимо. Взгляните на definition of subtyping in Hack - это, конечно, сложно, но в основе всего это просто большое совпадение шаблонов по паре типов, и было бы непроницаемо сложным на любом языке без соответствия шаблонов.
- OCaml в значительной степени функциональный язык, с большой поддержкой первоклассных функций и неизменяемых структур данных. Как и выше, когда вы делаете проверку типов, вы в конечном итоге делаете лот разных видов карт и складок по узлам AST, а функциональные языки выражают это очень сжато. Например, набрав блок кода, буквально just a
fold_left
over the statements it contains.
- Но это не чисто функционально. Это «нечисто» - иногда mutable state, using exceptions, или аналогичный - это самый лучший способ выразить что-то. Но самое главное, это означает, что вам не нужна какая-либо сложная акробатика или переключатель умственной модели или что-либо, чтобы вызвать функции C через FFI. Как Hack, так и Flow используют одну и ту же модель для многопоточности: специальную область
mmap
'd, разделяемую между различными процессами fork
' d, содержащую общую, заблокированную хеш-таблицу. Это то, что я бы не хотел выражать на любом языке, кроме C - and that's exactly what we do. Код OCaml может вызывать пару магических функций, не будучи мудрее, что на самом деле это C под капотом. (В стороне, я собираюсь сделать технический разговор в январе о том, как точно работает наша многопоточность, а также некоторые другие детали реализации Hack - это действительно здорово, но трудно понять без ввода, даже если код с открытым исходным кодом!)
Это хороший вопрос, я не понимаю, почему он сбивается с места. Я не знаю OCaml, но это, как говорят, отличный инструмент для написания компиляторов (я бы добавил HaXe в ваш список) и [этот старый пост] (http://flint.cs.yale.edu/cs421/case -for-ml.html) (см. также [здесь] (https://news.ycombinator.com/item?id=3002838)) кратко излагает, почему. – georg
Потому что это прежде всего мнение. –
@georg Ссылки, которые вы предоставили, действительно полезны. Они содержат внятные комментарии о OCaml. – Supasate