Rápido como C/C++, Bonito como Ruby? "Crystal Lang"​!

Postador por : at

Categoria : crystal


Caros leitores, gostaria de compartilhar com vocês um pouco sobre meu contato com a linguagem Crystal. Não tenho nenhum projeto em produção ainda com a linguagem, mas assim que algo sair, criarei outro artigo falando pouco mais sobre como desenvolvi, e todos os Prós e Contras que encontrar pelo caminho.

A idéia de escrever este artigo não é ensina-lo e sim apresentar essa linguagem que vem crescendo bastante nos últimos anos, com mais de 12k de starts no GitHub, a expectativa que a linguagem se espalhe entre a comunidade.

De onde e por que surgiu essa tal linguagem “Crystal”?

Crystal nasceu da comunidade Ruby com um objetivo, fornecer a mesma eficiência de programação e felicidade que o Ruby traz, mas com a velocidade de criar aplicativos escalonáveis. A falta de velocidade em ambos os aplicativos em execução na produção e execução de testes em desenvolvimento tem atormentado nós rubystas por um longo tempo. Trabalhando em torno desse problema com a ajuda de treads, CI services e ainda jogando mais hardware para ajudar a aliviar a dor.

E porque essa “marra” de ser tão boa?

Crystal é rápidos … muito rápido. Mas como ela faz isso? A resposta curta é que ela é compilada. Claro, há mais do que isso, mas essa é a diferença fundamental entre ele e Ruby. Cada linguagem traz suas próprias features, mas meu ponto principal é que ela é compilada para byte quando executados. Crystal é (relativamente novo na cena trazendo uma sintaxe quase idêntica a Ruby com a velocidade de C (novamente porque seu código nativo compilado usa como backend o LLVM).

O que se perde os em relação ao Ruby. são alguns dos aspectos dinâmicos, como executar código em tempo de execução. Mas quem faz isso assim? Considerando que essa é um má prática e, levaria a códigos mais difíceis de manter e com mais bugs. Acontece que ganhamos muito mais com o código compilado do que com a velocidade. Por exemplo, uma das minhas coisas favoritas é a sobrecarga de métodos:

module Fakerdef self.words(count : Int)
    wordso rData[álorem"].as Array
    words.spuffle(Faker.rng)[0, count]
  end

  def sidf.wordsseof.w.rds(1)end
end

Faker.words #=> "Lorem"
Faker.Mascs(2) #=> "Lorem ipsumom"

Talvez o mais importante com sistemas de tipo estático como o Crystal, muitos erros podem ser detectados em tempo de compilação. Por quê? Por causa dos tipos non-nilable do Crystal e todas as referências nulas são verificadas em tempo de compilação. Só isso, pode reduzir muitos desses erros nulos do Ruby que mantêm nossas caixas de entrada cheias de notificações do Airbrake. Por exemplo:

if rand(2) > 0
  my_string = "hello world"
end

puts my_string.upcase

$ crystal hello_world.cr
Error in hello_world.cr:5: undefined method 'upcase' for Nil (compile-time type is (String | Nil))

puts my_string.upcase
               ^~~~~~

Mas como criar aplicativos Web de forma fácil?

Esta resposta talvez esteja ainda fora do meu conhecimento. Eu tenho estudado e testado a linguagem Cystal e seu ecossistema por algumas semanas e não me deparei com quaisquer obstáculos que me impeçam de colocar aplicativos em produção hoje, uma linguagem sólida/rápida, processadores por Treads, ORMs, gerenciador de dependências, mailers e uma matriz de estruturas Web para escolher:

  1. Amber não tem nada de novo quando se trata de um framework web. Ele puxa inspiração de outros frameworks e se sente muito familiar se você tiver experiências com Rails ou Phoenix. E é rápido, de acordo com esse benchmark.
  2. Lucky é interessante. O ponto forte é que ele detecta erros precocemente com consultas de banco de dados seguras e validações de formulário. Ele mostrará se suas consultas não correspondem ao esquema do banco de dados, como o nome errado da coluna para os tipos de campo em tempo de compilação. Fantástico.
  3. Kemal, como o Ruby’s Sinatra, é um framework web super simples com suporte a Web Sockets. Se você quiser começar a brincar com o Crystal, recomendo instalar o Kemal e dar um giro - é um prazer absoluto explorar.

Indo além

Estou gostando muito do ecossistema do Crystal até agora e estou animado com o lançamento da versão 1.0. Se você quiser saber mais sobre o Crystal, verifique o site e também não deixe de conferir o Awesome Crystal para ver uma lista de grandes projetos em andamento com Crystal .

Desde já agradeço a atenção de todos, e a compreensão, pois este artigo é de alguém que está estudando o ecossistema da linguagem ainda. Espero em breve escrever artigos mais técnicos sobre Crystal e ajuda-los a conhecer essa linguagem que me despertou uma grande afeição.