Articles of compiler construction

Leitura do GHC Core

Core é a linguagem intermediária do GHC. O Reading Core pode ajudá-lo a entender melhor o desempenho do seu programa. Alguém me pediu documentação ou tutoriais sobre a leitura do Core, mas não consegui encontrar muita coisa. Qual documentação está disponível para leitura do GHC Core? Aqui está o que eu encontrei até agora: Escreva […]

opção javac para compilar todos os arquivos java sob um determinado diretório recursivamente

Eu estou usando o compilador javac para compilar arquivos java no meu projeto. Os arquivos são distribuídos em vários pacotes como este: com.vistas.util , com.vistas.converter , com.vistas.LineHelper , com.current.mdcontect . Cada um desses pacotes tem vários arquivos java. Eu estou usando o javac assim: javac com/vistas/util/*.java com/vistas/converter/*.java com.vistas.LineHelper/*.java com/current/mdcontect/*.java (em uma linha) Em vez de […]

O que é uma interface binária de aplicativo (ABI)?

Eu nunca entendi claramente o que é uma ABI. Por favor, não me aponte para um artigo da Wikipedia. Se eu pudesse entender, não estaria aqui postando um post tão longo. Esta é a minha mentalidade sobre diferentes interfaces: Um controle remoto da TV é uma interface entre o usuário e a TV. É uma […]

Quais são todas as funções-membro criadas pelo compilador para uma class? Isso acontece o tempo todo?

Quais são todas as funções-membro criadas pelo compilador para uma class? Isso acontece o tempo todo? como destruidor. Minha preocupação é se ela é criada para todas as classs e por que o construtor padrão é necessário?

O que faz um compilador just-in-time (JIT)?

O que um compilador JIT faz especificamente em oposição a um compilador não-JIT? Alguém pode dar uma descrição sucinta e fácil de entender?

O que significa sublinhado duplo (__const) em C?

extern int ether_hostton (__const char *__hostname, struct ether_addr *__addr) __THROW; Eu encontrei a definição da function acima em /usr/include/netinet/ether.h em uma checkbox Linux. Alguém pode explicar o que os sublinhados duplos significam na frente de const (palavra-chave), addr (identificador) e, por fim, __THROW.

Como as macros provável () e improvável () no kernel do Linux funcionam e qual é o benefício delas?

Eu estive procurando por algumas partes do kernel Linux e encontrei chamadas assim: if (unlikely(fd < 0)) { /* Do something */ } ou if (likely(!err)) { /* Do something */ } Eu encontrei a definição deles: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) Eu sei que eles são para otimização, mas como eles funcionam? E […]

Vantagem de mudar a declaração if-else

Qual é a melhor prática para usar uma instrução switch vs usando uma instrução if para 30 enumerações unsigned onde cerca de 10 têm uma ação esperada (que atualmente é a mesma ação). Desempenho e espaço precisam ser considerados, mas não são críticos. Eu abstraí o trecho, então não me odeie pelas convenções de nomenclatura. […]

Qual é a diferença entre o javac e o compilador Eclipse?

O compilador Java do Eclipse é apenas um wrapper em torno do mesmo núcleo em que o programa javac está contido ou é um compilador separado? Se o último, por que eles reinventam a roda?

Por que o stream do final de uma function não vazia sem retornar um valor não produz um erro do compilador?

Desde que percebi há muitos anos que isso não produz um erro por padrão (no GCC, pelo menos), sempre me perguntei por quê? Eu entendo que você pode emitir sinalizadores de compilador para produzir um aviso, mas não deve ser sempre um erro? Por que faz sentido para uma function não nula não retornar um […]