¿Cuáles son los beneficios de OCaml como lenguaje de programación detrás de Hacklang y Flow?


Recientemente, Facebook anunció Flow, un comprobador de tipo estático para JavaScript, que se implementa principalmente en OCaml (https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-javascript/).

Hacklang (PHP con comprobador de tipo estático) también está escrito principalmente en OCaml. Por lo tanto, me pregunto cuáles son los beneficios distintivos de OCaml para hacer un comprobador de tipo estático?

Author: Laurel, 2014-11-19

1 answers

"Cuáles son los beneficios de OCaml como lenguaje de programación" es de hecho una pregunta basada en la opinión, y una que no voy a abordar aquí. Sin embargo, trabajo en el equipo de Hackeo en Facebook, y he trabajado en estrecha colaboración con el equipo de Flow, por lo que puedo responder a la pregunta que creo que tenía la intención de preguntar: "¿Por qué Facebook eligió OCaml para construir Hack and Flow?"

  • La mayor razón es que OCaml tiene un soporte brillante para definir sus propios tipos de datos, y luego patrón coincidiendo con ellos . La mayoría de lo que Hack and Flow hacen son operaciones sobre varias formas de un AST, y tener una forma muy agradable de expresar "si ves este tipo de nodo con ese tipo de nodo dentro de él, haz esto" es invaluable. Echa un vistazo a la definición de subtipo en Hack certainly es ciertamente complicado, pero en su corazón es solo una gran coincidencia de patrones sobre un par de tipos, y sería irrefutablemente complejo en cualquier idioma sin coincidencia de patrones.
  • OCaml es en gran medida un lenguaje funcional, con gran soporte para funciones de primera clase y estructuras de datos inmutables. De manera similar a lo anterior, cuando estás haciendo typechecking, terminas haciendo un lote de diferentes tipos de mapas y pliegues sobre nodos AST, y los lenguajes funcionales lo expresan de manera muy concisa. Por ejemplo, escribir un bloque de código es literalmente solo un fold_left sobre las instrucciones que contiene.
  • Pero no es puramente funcional. Es "impuro" sometimes a veces, mutable estado, usar excepciones, o algo similar, es simplemente la mejor manera de expresar algo. Pero lo más importante, significa que no necesita ningún tipo de acrobacias complicadas o interruptor de modelo mental o nada para llamar a las funciones de C a través de un FFI. Tanto Hack como Flow usan el mismo modelo para multihilo: una región d especialmente mmap compartida entre diferentes procesos fork'd, que contiene una tabla hash compartida y sin bloqueo. Ese es el tipo de cosa que no querría expresar en ninguna lenguaje excepto C { y eso es exactamente lo que hacemos. El código OCaml puede llamar a un par de funciones mágicas sin ser el más sabio que es en realidad C bajo el capó. (Como un aparte, voy a hacer una charla técnica en enero sobre cómo funciona exactamente nuestro multithreading, junto con algunos otros detalles de implementación de Hackeo it es realmente genial, pero difícil de entender sin una introducción, incluso si el código es de código abierto!)
 46
Author: Josh Watzman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-22 07:55:43