Lançamento da linguagem de programação Crystal 1.5

Foi publicado o lançamento da linguagem de programação Crystal 1.5, cujos desenvolvedores estão tentando combinar a conveniência do desenvolvimento na linguagem Ruby com o alto desempenho de aplicação característico da linguagem C. A sintaxe do Crystal é próxima, mas não totalmente compatível com Ruby, embora alguns programas Ruby sejam executados sem modificação. O código do compilador é escrito em Crystal e distribuído sob a licença Apache 2.0.

A linguagem usa verificação de tipo estática, implementada sem a necessidade de especificar explicitamente os tipos de variáveis ​​e argumentos de método no código. Os programas Crystal são compilados em arquivos executáveis, com macros avaliadas e código gerado em tempo de compilação. Nos programas Crystal, é possível conectar ligações escritas em C. A paralelização da execução do código é realizada por meio da palavra-chave “spawn”, que permite executar uma tarefa em segundo plano de forma assíncrona, sem bloquear o thread principal, na forma de threads leves chamados fibras.

A biblioteca padrão fornece um grande conjunto de funções comuns, incluindo ferramentas para processamento de CSV, YAML e JSON, componentes para criação de servidores HTTP e suporte WebSocket. Durante o processo de desenvolvimento, é conveniente utilizar o comando “crystal play”, que gera uma interface web (localhost:8080 por padrão) para execução interativa de código na linguagem Crystal.

Grandes mudanças:

  • O compilador adicionou uma verificação da correspondência dos nomes dos argumentos na implementação de um método abstrato e em sua definição. Se houver uma incompatibilidade de nome, um aviso será emitido: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(nome: Int32): Nil ^— Aviso: o parâmetro posicional 'nome' corresponde ao parâmetro 'número' do método substituído FooAbstract#foo(número: Int32), que tem um nome diferente e pode afetar a passagem de argumentos nomeados
  • Ao atribuir um argumento a um método não tipado ao valor de uma variável, o argumento agora fica restrito ao tipo dessa variável. class Foo @x : Int64 def inicialize(x) @x = x # parâmetro x será digitado @x end end
  • Permite adicionar anotações a parâmetros de métodos ou macros. def foo(@[MaybeUnused] x); fim # OK
  • Adicionado suporte para uso de constantes como índices e nomes em tuplas. KEY = "s" foo = {s: "String", n: 0} coloca foo[KEY].size
  • Novos métodos File#delete?foram adicionados à API File para excluir arquivos e diretórios. e Dir#delete?, que retornam false se o arquivo ou diretório estiver faltando.
  • Foi reforçada a proteção do método File.tempfile, que agora não permite caracteres nulos nas linhas que formam o nome do arquivo.
  • Adicionada variável de ambiente NO_COLOR, que desativa o realce de cores na saída do compilador e do interpretador.
  • O trabalho no modo intérprete foi significativamente melhorado.

Fonte: opennet.ru

Adicionar um comentário