Últimos compiladores D

A equipe de desenvolvimento do LDC fechou no ano passado com a versão 1.19.0 do compilador D usando LLVM , e a equipe principal iniciou o novo ano com a versão 2.090.0 do compilador de referência DMD . E se você não ouviu, há pouco tempo, houve notícias importantes sobre o compilador D baseado no GCC, GDC . Maquiagem!

LDC 1.19.0


Esta versão contém uma atualização para o compilador LDC para a versão D do front-end 2.089.1, que era a versão atual no momento do lançamento, imediatamente após o Natal católico. Montagens montadas são baseadas no LLVM 9.01 .

Entre os destaques deste lançamento, há alguma simpatia pelo Android. A biblioteca DRuntime / Phobos já está disponível para todos os destinos do Android. Esta versão pode ser usada em conjunto com o Projeto Android D de Adam Ruppe , uma compilação de programas e interfaces assistidas, agora em beta quase concluída , para desenvolvimento no Android D com LDC.

Os usuários do Windows descobrirão que as bibliotecas de links baseadas em MinGW foram atualizadas. Agora eles são derivados dos arquivos .def do pacote MinGW-w64 7.0.0 . Essas bibliotecas permitem que você use as bibliotecas do sistema Windows sem precisar instalar o Windows SDK.

DMD 2.090.0


A versão mais recente do DMD foi anunciada em 7 de janeiro . Ela apresentou 10 grandes mudanças e 71 bugs fechados, gentilmente fornecidos por 48 co-autores .

Com esta versão, agora é possível mais com parâmetros preguiçosos. D há muito suporta opções preguiçosas :
O argumento do parâmetro lento não é avaliado até que a função seja chamada. O argumento é processado apenas se / quando o parâmetro for avaliado dentro da função.
Portanto, o argumento lento pode ser executado 0 ou mais vezes.
Sob o capô, eles são implementados como delegados. Agora você pode chegar ao delegado de base usando o endereço do parâmetro, que anteriormente era proibido.

import std.stdio; void chillax(lazy int x) { auto dg = &x; assert(dg() == 10); writeln(x); } void main() { chillax(2 * 5); } 

Esta versão também obsoleta o idioma D usado por quem precisa distinguir entre finalização (destruição não determinística de objetos, geralmente iniciada pelo coletor de lixo) e destruição normal (destruição determinística de objetos) do interior de um destruidor de classe ou estrutura.

No estado atual do GC, são proibidas quaisquer operações do GC durante a finalização. No entanto, D não fornece finalizadores e destruidores separados. Existe apenas isso , que é chamado de destruidor, apesar de desempenhar os dois papéis. Às vezes, isso cria dificuldades ao implementar destruidores para tipos projetados para alocadores de GC e não-GC. Qualquer chamada para o GC durante a limpeza pode resultar em um erro InvalidMemoryOperationError. Isso implica a necessidade da solução alternativa mencionada.

Agora você pode chamar a função estática do GC, core.memory.GC.inFinalizer, para obter seu estado no destruidor. Ele retornará true se o encadeamento atual estiver finalizando; nesse caso, você não deseja executar nenhuma ação que envolva operações com o GC. (Eu esperava algo assim antes de escrever o próximo artigo da minha série GC ).

Gdc


Graças ao trabalho árduo de Jena Bucklau, Johannes Pfau e todos os voluntários que apoiaram e contribuíram ao longo dos anos, o GDC foi admitido no GCC 9 no final de 2018 e ficou disponível como parte do kit do GCC 9.1 lançado em maio passado. O GCC 9.2 foi lançado em agosto passado. Esta versão do GDC implementa a versão 2.076 do front end D. Você pode compilá-lo ou instalá-lo no mesmo local em que geralmente obtém o GCC 9.x.

Do tradutor


Esta edição do blog bloqueou quase completamente o bloco do próximo artigo sobre programação confiável, incluindo D, bem, com exceção das críticas e do estado das coisas com o IDE, portanto, o resultado foi extremamente bem-sucedido.

Source: https://habr.com/ru/post/pt483440/


All Articles