2014-11-19 4 views
28

Недавно Facebook объявил Flow, статический тип проверки JavaScript, который реализован в основном в OCaml (https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-javascript/).Каковы преимущества OCaml как языка программирования Hacklang и Flow?

Hacklang (PHP со статическим контролером типа) также в основном написан в OCaml. Итак, интересно, какие отличительные преимущества OCaml для создания проверки статического типа?

+2

Это хороший вопрос, я не понимаю, почему он сбивается с места. Я не знаю OCaml, но это, как говорят, отличный инструмент для написания компиляторов (я бы добавил HaXe в ваш список) и [этот старый пост] (http://flint.cs.yale.edu/cs421/case -for-ml.html) (см. также [здесь] (https://news.ycombinator.com/item?id=3002838)) кратко излагает, почему. – georg

+1

Потому что это прежде всего мнение. –

+0

@georg Ссылки, которые вы предоставили, действительно полезны. Они содержат внятные комментарии о OCaml. – Supasate

ответ

43

«В чем преимущества 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 - это действительно здорово, но трудно понять без ввода, даже если код с открытым исходным кодом!)
+0

«Как Hack, так и Flow используют одну и ту же модель для многопоточности: специальная область mmap'd, разделяемая между различными процессами fork'd, содержащая общую, беззаботную хеш-таблицу». Интересно ... –

+2

Я поговорил несколько недель назад о внутренностях Hack; третья часть его находилась в магической области mmap'd. Я бы предложил посмотреть весь разговор, но если вы хотите перейти прямо к этой части, вот привязанная по времени ссылка: https://youtu.be/aN22-V-b8RM?t=39m –

+1

Большое спасибо! Вы видели F # или LLVM? Вам будет интересен OCaml-подобный язык с многоядерным GC? –

 Смежные вопросы

  • Нет связанных вопросов^_^