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
Aqui na o tempo de execução foi de: 6.22s
Em Ruby
Nas mesmas condições, para minha surpresa, o Ruby
superou o Python
executando em apenas: 2.23s
.
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.