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. class Foo(T); end class Bar(T) < Foo(T); end x = Foo x = Bar
- Agora, as macros podem usar o caractere de sublinhado para ignorar um valor em um loop `for`. {% for _, v, i in {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% end %}
- O método "file_exists?" foi adicionado às macros para verificar a existência de um arquivo.
- A biblioteca padrão implementa suporte para números inteiros de 128 bits.
- Adicionado o módulo Indexable::Mutable(T) com implementação de operações estendidas 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 o 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, em vez disso, devem ser usados IO#write_string e URI.encode_path.
- O suporte para a arquitetura x86 de 32 bits foi movido para o nível 2 (pacotes pré-compilados não são mais gerados). O suporte para a arquitetura ARM64 está sendo atualizado para o nível 1.
- Продолжена работа по обеспечению полноценной поддержи платформы WindowsSuporte adicionado. Windows-сокетов.
- Para macOS добавлен универсальный пакет, работающих как на устройствах с процессорами x86, так и на оборудовании с чипом Apple M1.
Fonte: opennet.ru
