Cozinhando Crystal

Crystal uma linguagem de programação para humanos

Cozinhando Crystal

Para quem nunca assistiu, a imagem é uma referência a um dos episódios da série Breaking Bad, onde o personagem principal, Walter White, está cozinhando metanfetamina. A imagem é uma brincadeira com o nome da linguagem de programação Crystal.

“A language for humans and computers”

Essa a frase que me chamou atenção quando ouvi falar pela primeira vez sobre Crystal. É como a linguagem se apresenta em seu site oficial.

Crystal lang

Crystal é uma linguagem de programação que tem como objetivo ser amigável. Sua sintaxe é fortemente inspirada em Ruby e a sua eficiência pode ser comparada a linguagens poderosas como GO lang. Nesta talk talk, sobre Ruby, o @akita fala sobre o básico sobre a linguagem e chega a brincar dizendo que o “Crystal é o filho bastardo de Ruby com GO”, o que faz todo sentido e eu já te mostro porque. 😆

Eu ouvi falar a primeira de Crystal há uns dois anos atrás, mas, na minha cega ignorância o primeiro pensamento que tive foi:

“ah… porque eu vou aprender mais uma linguagem de programação? Já sei Ruby, Python, JavaScript, PHP, Java, C# e outras… pra que mais uma?”

Tome cuidado se também estiver um pensamento parecido, o comodismo é uma arma letal, especialmente se você for uma pessoa desenvolvedora. Crystal, por sua vez, é uma linguagem compilada, estaticamente tipada e orientada a objetos. Ela tem o objetivo de ser extremamente performática e amigável.

Porque Crystal?

No README da lang os próprios autores já te dão bons motivos.

  • Adoramos a eficiência do Ruby para escrever código.
  • Adoramos a eficiência do C na execução de código.
  • Queremos o melhor dos dois mundos.
  • Queremos que o compilador entenda o que queremos dizer sem precisar especificar tipos em todos os lugares.
  • Queremos POO completo.
  • Ah, e não queremos escrever código C para acelerar o código.

Estes parecem ser bons motivos para mim. Então, vamos ver o que temos por aí.

Let’s to Code

Para este post, vou focar um pouco na syntaxe e princípios da linguagem.

A standard library do Crystal é extremamente completa e já provê praticamente tudo o que você precisa para sair codando. Vamos usar um exemplo da documentação oficial para criar um servidor web e fazer bind dele na porta 8080.

Link para instalação do crystal

# server.cr

# A very basic HTTP server
require "http/server"

server = HTTP::Server.new do |context|
 context.response.content_type = "text/plain"
 context.response.print "Hello world, got #{context.request.path}!"
end

puts "Listening on http://127.0.0.1:8080"
server.listen(8080)

A primeira vez que vi esse exemplo eu fiquei procurando o código crystal. Pois é, não tem como negar a semelhança com Ruby. Assumindo que você tem o crystal instalado na sua máquina, você pode rodar o comando crystal build para gerar o binário do seu código e executá-lo em seguida com: ./server. Ou pode simplesmente rodar o código com o comando crystal passando o seu arquivo em seguida.

Agora, perceba que ao rodar o comando build ele gera pra você um binário com o mesmo nome do seu arquivo .cr

Bacana né? 😎

Performance

Como mencionado anteriormente a linguagem Crystal foi desenvolvida com o intuito de ser extremamente performática. É possível notar pontos interessantes da linguagem. Tomei a liberdade de replicar alguns do exemplos para ver como a linguagem se sairia com uma implementação do algoritmo de Fibonacci. O mesmo teste será feito usando as linguagens Python, Ruby para termos uma margem de comparação.

Python VS Ruby VS Crystal

Todos os testes serão feitos sob o mesmo ambiente um após o outro para que possamos ter uma comparação justa.

⚠️ Para todos os testes estou usando um MacBook Pro, 2,8 GHz Dual-Core Intel, Core i7, com 8GB de RAM 1600 MHz DDR3, sistema operacional na versão Catalina.

Em Python 3

Fibonacci em python

Aqui na o tempo de execução foi de: 6.22s

Em Ruby

Fibonacci em ruby

Nas mesmas condições, para minha surpresa, o Ruby superou o Python executando em apenas: 2.23s.

Em crystal

Fibonacci em crystal

Perceba que o código é praticamente o mesmo do exemplo em Ruby, a única diferença é que agora estamos usando a extensão .cr.

INCRÍVEIS 0.17s 😱

É muito rápido! ⚡️

Conclusão

Crystal é uma linguagem que merece ser atenção. Ela é extremamente performática e tem uma sintaxe muito amigável e não se engane, também é possível desenvolver aplicações web usando Crystal.

Se quiser saber mais sobre a linguagem ou trocar uma ideia, temos uma comunidade no Telegram e qualquer pessoa é bem vinda.

Referências