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:
- O que é ReasonML? (esse em que estamos 👋)
- Começando com ReasonML
- O que está planejado para ReasonML
Partes Principais:
- Valores e Tipos básicos
- Escopos e bindings com let
- Pattern Matching: desestruturação, switch e expressões if
- Funções
- O básico sobre módulos
- Tipos variantes
- Tipos variantes polimórficos
- Lists e Arrays
- Records
- Functors
Padrões e Técnicas:
- 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.
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
- What is ReasonML?, escrito originalmente por Axel Rauschmayer