
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.