Versão da linguagem de programação Rust 1.47

publicado versão 1.47 da linguagem de programação do sistema Ferrugem, fundado pelo projeto Mozilla. A linguagem se concentra na segurança da memória, fornece gerenciamento automático de memória e fornece um meio de alcançar alto paralelismo de tarefas sem usar coletor de lixo и tempo de execução (o tempo de execução se resume à inicialização básica e manutenção da biblioteca padrão).

O gerenciamento automático de memória do Rust elimina erros ao manipular ponteiros e protege contra problemas decorrentes da manipulação de memória de baixo nível, como acesso a uma região de memória após ela ter sido liberada, desreferências de ponteiro nulo, saturação de buffer, etc. Está sendo desenvolvido um gerenciador de pacotes para distribuir bibliotecas, garantir a montagem e gerenciar dependências pelo projeto. Carga. Um repositório é suportado para hospedar bibliotecas caixas.io.

O principal inovações:

  • Suporte implementado para tipos matrizes qualquer tamanho. Anteriormente, devido à incapacidade de definir funções genéricas para todos os valores inteiros, a biblioteca padrão fornecia suporte integrado a características apenas para matrizes de até 32 elementos de tamanho (as características para cada tamanho eram definidas estaticamente). Graças à criação da funcionalidade de genéricos constantes (“const generics”), tornou-se possível definir funções genéricas para qualquer tamanho de array, mas elas ainda não estão incluídas nos recursos da linguagem estável, embora sejam implementadas no compilador e sejam agora envolvido na biblioteca padrão para características de array de qualquer tamanho.

    Por exemplo, a seguinte construção em Rust 1.47 imprimirá o conteúdo de um array, embora anteriormente teria resultado em um erro:

    fn principal() {
    seja xs = [0; 34];

    println!("{:?}", xs);
    }

  • Fornece saída de traços mais curtos (backtrace), saída em situações de emergência. Elementos que não são de interesse na maioria das situações, mas que confundem a saída e desviam a atenção das causas primárias do problema, são excluídos do rastreamento. Para retornar um rastreamento completo, você pode usar a variável de ambiente "RUST_BACKTRACE=full". Por exemplo, para o código

    fn principal() {
    pânico!();
    }

    Anteriormente, o rastreamento era gerado em 23 estágios, mas agora será reduzido para
    3 passos que permitem captar imediatamente a essência:

    thread 'main' entrou em pânico em 'pânico explícito', src/main.rs:2:5
    rastreamento de pilha:
    0: std::panicking::begin_panic
    em /rustc/d…d75a/library/std/src/panicking.rs:497
    1: playground::principal
    em ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    em /rustc/d…d75a/library/core/src/ops/function.rs:227

  • O compilador Rustc foi atualizado para construir usando LLVM 11 (Ferrugem usa LLVM como back-end para geração de código). Ao mesmo tempo, a capacidade de construir com LLVMs mais antigos, até a versão 8, é mantida, mas por padrão (em ferrugem-lang/llvm-project) agora está usando o LLVM 11. Espera-se que o LLVM 11 seja lançado nos próximos dias.
  • Na plataforma Windows, o compilador Rustc fornece suporte para habilitar verificações de integridade do fluxo de controle (Control Flow Guard), ativadas usando o sinalizador “-C control-flow-guard”. Em outras plataformas este sinalizador é ignorado por enquanto.
  • Uma nova parcela de APIs foi transferida para a categoria estável, incluindo estabilizadas
    Ident::new_raw,
    Intervalo::está_vazio,
    RangeInclusive::is_empty,
    Resultado::as_deref,
    Resultado::as_deref_mut,
    Vec::vazamento,
    ponteiro::offset_from,
    f32::TAU e
    f64::TAU.

  • O atributo “const”, que determina a possibilidade de utilização em qualquer contexto ao invés de constantes, é utilizado nos métodos:
    • novo para todos os números inteiros diferentes de zero;
    • verificado_add, verificado_sub, verificado_mul, verificado_neg, verificado_shl, verificado_shr, saturating_add, saturating_sub e saturating_mul para todos os números inteiros;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace e is_ascii_control para os tipos char e u8.
  • Para FreeBSD envolvido kit de ferramentas do FreeBSD 11.4 (o FreeBSD 10 não suporta LLVM 11).

Fonte: opennet.ru

Adicionar um comentário