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

Foi publicado o lançamento da linguagem de programação Crystal 1.2, 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:

  • Adicionada a capacidade de atribuir uma subclasse de uma classe genérica a um elemento de uma classe pai. classe Foo(T); classe final Bar(T) < Foo(T); fim x = Foo x = Barra
  • As macros agora podem usar um sublinhado para ignorar um valor em um loop for. {% para _, v, i em {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% end %}
  • Adicionado método “file_exists?” às macros. para verificar a existência de um arquivo.
  • A biblioteca padrão agora oferece suporte a números inteiros de 128 bits.
  • Adicionado módulo Indexable::Mutable(T) com implementação de operações avançadas para coleções como BitArray e Deque. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
  • Adicionado método XML::Node#namespace_definition para extrair um namespace específico do XML.
  • Os métodos IO#write_utf8 e URI.encode foram descontinuados e devem ser substituídos por IO#write_string e URI.encode_path.
  • O suporte para arquitetura x32 de 86 bits foi movido para o segundo nível (pacotes prontos não são mais gerados). Está sendo preparada uma transferência para o primeiro nível de suporte à arquitetura ARM64.
  • O trabalho continua para garantir suporte total à plataforma Windows. Adicionado suporte para soquetes do Windows.
  • Foi adicionado um pacote universal para macOS, funcionando tanto em dispositivos com processadores x86 quanto em equipamentos com chip Apple M1.

Fonte: opennet.ru

Adicionar um comentário