ReasonML: O que é ReasonML?

Uma série de artigos sobre a nova linguagem do Facebook

Esse artigo oferece uma breve explicação sobre a nova linguagem de programação do Facebook, ReasonML.

1. Uma série de artigos

Iremos abordar ReasonML de uma forma direta e prática, separando por tópicos:

Sobre ReasonML:

  1. O que é ReasonML? (esse em que estamos 👋)
  2. Começando com ReasonML
  3. O que está planejado para ReasonML

Partes Principais:

  1. Valores e Tipos básicos
  2. Escopos e bindings com let
  3. Pattern Matching: desestruturação, switch e expressões if
  4. Funções
  5. O básico sobre módulos
  6. Tipos variantes
  7. Tipos variantes polimórficos
  8. Lists e Arrays
  9. Records
  10. Functors

Padrões e Técnicas:

  1. Iterações externa e interna

2. O que é ReasonML?

ReasonML é uma nova linguagem de programação objeto-funcional criada pelo Facebook. Em essência, é uma nova sintaxe, tipo C, para a linguagem de programação OCaml. Essa nova sintaxe tem como foco, facilitar a interoperabilidade com JavaScript e a adoção de programadores JavaScript. Além disso, ele remove idiossincrasias da sintaxe do OCaml.

O ReasonML também suporta JSX (a sintaxe para template HTML dentro do JavaScript usado pelo framework React do Facebook). Devido a ReasonML estar baseado no OCaml, muitas pessoas usam os dois nomes de forma intercambiável. O diagrama a seguir mostra como o ReasonML se encaixa no ecossistema OCaml.

Image for post
Image for post

No momento, o alvo de compilação melhor suportado pelo ReasonML é JavaScript (browsers e Node.js).

Abaixo, como se parece o código ReasonML (exemplo tirado do playground online do ReasonML).

type tree = Leaf | Node(int, tree, tree);let rec sum =
fun
| Leaf => 0
| Node(value, left, right) => value + sum(left) + sum(right);
let myTree =
Node(
1,
Node(2, Node(4, Leaf, Leaf), Node(6, Leaf, Leaf)),
Node(3, Node(5, Leaf, Leaf), Node(7, Leaf, Leaf))
);
sum(myTree) |> Js.log;

3. Os benefícios do OCaml

A fundação do ReasonML, OCaml, traz os seguintes benefícios:

  • É uma linguagem estabelecida (criada em 1996) que já se provou em muitos projetos. O próprio Facebook está usando ela em vários projetos (por exemplo, Flow).
  • Seu núcleo é uma linguagem de programação funcional com um sistema de tipo completo. Mas também suporta orientação a objetos e estados mutáveis.
  • Pode ser compilado para bytecode, código nativo rápido ou JavaScript.
  • A compilação para JavaScript é rápida. Citando a postagem do blog “Messenger.com Now 50% Converted to Reason”:

A recompilação completa da parte Reason da base de código é ~2s (com algumas centenas de arquivos), a compilação incremental (a norma) é <100ms em média. O autor do BuckleScript estima que o sistema de compilação deve escalar para algumas centenas de milhares de arquivos na condição atual.

4. Melhorando OCaml

A equipe do ReasonML também pretende melhorar o ecossistema OCaml:

  • Melhores ferramentas (teste, documentação, suporte ao editor, etc.).
  • Melhor interoperação com JavaScript. O compilador ReasonML-para-JavaScript já é muito rápido e produz código relativamente legível.
  • Melhor biblioteca padrão (há uma quantidade razoável de concorrência neste espaço no OCaml, sem um vencedor claro). Aqui, o objetivo também é usar nomes camel-case (StringUtilities, createResource). OCaml usa snake-case para nomes minúsculos (create_resource) e camel-case para nomes de maiúsculas (StringUtilities).

5. Conclusão

O ReasonML parece muito com o que você obtém se você limpasse o JavaScript e o transformasse em uma linguagem de programação funcional estática. Eu sou ambivalente sobre o JSX no ReasonML — tem vantagens e desvantagens. Fico feliz que o ReasonML não reinvente a roda e é estritamente baseado no estabelecido OCaml.

O pragmatismo do OCaml significa que você não possui alguns dos recursos funcionais mais sofisticados (por exemplo, Haskell), mas por outro lado, gera uma compilação rápida, código eficiente e mensagens de erro decentes.

Créditos

Written by

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store