Compilador para a Linguagem de Programação D
Arquivos comuns para Win32 e Linux
- \dmd\src\phobos\
- Fonte da biblioteca padrão
- \dmd\src\dmd\
- Fonte do front end do compilador D sob duas licenças (GPL e Artistic)
- \dmd\html\d\
- Documentação
- \dmd\samples\d\
- Programas de amostra
Compilador D para Win32
Arquivos
- \dmd\bin\dmd.exe
- Executável do compilador
- \dmd\bin\shell.exe
- Shell de linha de comando simples
- \dmd\bin\sc.ini
- Configurações globais do compilador
- \dmd\lib\phobos.lib
- Biblioteca padrão
Requisitos
- Sistema operacional Windows de 32 bits (Win32), tal como Windows XP
- dmd.zip (compilador D) para Win32
- dmc.zip (linker e utilidades) para Win32
Instalação
Abra uma janela de console. Todas as ferramentas são de linha de comando, o que significa que elas são executadas de uma janela de console. Vá para o diretório raíz. Descompacte os arquivos no diretório raíz. dmd.zip criará um diretório \dmd com todos os arquivos. dmc.zip will criará um diretório \dm com todos os arquivos.Uma sessão típica iria parecer com:
C:\Documents and Settings\Seu Nome>cd \
C:\>unzip dmd.zip
C:\>unzip dmc.zip
Exemplo
Execute:\dmd\bin\shell all.shno diretório \dmd\samples\d para vários exemplos.
Argumentos e Interruptores do Compilador
- dmd arquivos... -interruptor...
- arquivos...
-
Extensão Tipo de arquivo nenhuma Arquivos fonte D .d Arquivos fonte D .di Arquivos de Interface D .obj Arquivos objeto para linkar .lib Bibliotecas de código objeto para procurar .exe Arquivo executável de saída .def Arquivo de definição de módulo .res arquivo de recursos - -c
- só compila, não linka
- -cov
- instrumento para análise de cobertura de código
- -D
- Gera documentação do fonte.
- -Dddocdir
- escreve a documentação no diretório docdir
- -Dfarquivo
- escreve a documentação no arquivo arquivo
- -d
- permite características desaprovadas
- -debug
- compila em código de depuração
- -debug=nível
- compila em código de depuração <= nível
- -debug=ident
- compila em código de depuração identificado por ident
- -g
- adiciona informação de depuração simbólica
- -H
- gera arquivo de interface D
- -Hddir
- escreve o arquivo de interface D no diretório dir
- -Hfarquivo
- escreve arquivo de interface D no arquivo
- --help
- imprime a ajuda
- -inline
- expande funções "em linha"
- -Icaminho
- onde procurar por importações.. caminho é uma lista de caminhos separados por ; . Múltiplos -I's podem ser usados, e os caminhos são procurado na mesma ordem.
- -Llinkerflag
- passa linkerflag para o linker, por exemplo, /ma/li
- -nofloat
- Previne a emissão da referência __fltused em arquivos objeto, mesmo se código de ponto flutuante está presente. Útil para código de biblioteca. Somente Windows.
- -O
- Otimiza o código gerado.
- -o-
- Evita a geração do arquivo objeto. Útil em conjunto com -D ou -H.
- -odobjdir
- escreve arquivos objeto relativos no diretório objdir ao invés de no diretório atual
- -ofarquivo
- ajusta o nome de saída para arquivo no diretório de saída
- -op
- normalmente o caminho para arquivos fonte .d é removido quando gerando o nome de um arquivo objeto. -op evita isso.
- -profile
- profile o desempenho do código gerado
- -quiet
- evita mensagens não-essenciais do compilador
- -release
- compila versão de lançamento, o que significa não gerar código para contratos e asserções
- -run arquivo args...
- compila, linka e executa o programa arquivo com o resto da linha de comando, args..., como os argumentos para o programa. Nenhum arquivo .obj ou .exe é deixado para trás.
- -unittest
- compila em código de teste de unidade, também liga asserções
- -v
- verbose
- -version=nível
- compila em código de versão >= nível
- -version=ident
- compila em código de versão identificado por ident
- -w
- habilita advertências
Linkando
A linkagem é feita diretamente pelo compilador dmd após compilar com sucesso. Para previnir dmd de executar o linker, use o interruptor -c.Os programas dever ser linkados com a biblioteca padrão phobos.lib, seguida pela biblioteca padrão do D snn.lib. Isso é feito automaticamente logo se os diretórios das bibliotecas estiveremna variável de ambiente LIB. Um caminho típico de ajustar LIB seria:
set LIB=\dmd\lib;\dm\lib
Variáveis do Ambiente
O compilador D dmd usa as seguinte variáveis do ambiente:- DFLAGS
- O valor de DFLAGS é tratado como se ele tivesse sido adicionado à linha de comando para dmd.exe.
- LIB
- O linker usa LIB para procurar por arquivos de biblioteca. Para D, normalmente será ajustada para:
set LIB=\dmd\lib;\dm\lib
- LINKCMD
- dmd normalmente executa o linker procurando link.exe no PATH.
Para usar um linker específico no lugar, ajuste a variável do ambiente LINKCMD para ele. Por exemplo:
set LINKCMD=\dm\bin\link
- PATH
- Se o linker não for encontrado no mesmo diretório onde dmd.exe está, o PATH é buscado por ele. Nota: outros linkers chamados link.exe normalmente não funcionarão. Tenha certeza de que Digital Mars link.exe seja encontrado primeiro no PATH antes de outros link.exe's, ou use LINKCMD para identificar especificamente que linker usar.
Arquivo de Inicialização sc.ini
dmd procurará pelo arquivo de inicialização sc.ini na seguinte seqüência de diretórios:- diretório de trabalho atual
- diretório especificado pela variável de ambiente HOME
- diretório onde está dmd.exe
Variáveis do ambiente seguem a seção [Environment], em pares nome=valor. Comentários são linhas que começa ;. Por exemplo:
; arquivo sc.ini para dmd
; Nomes envolvidos por %% são buscados no ambiente existente
; e inseridos. O nome especial %@P% é substituído pelo caminho
; desse arquivo.
[Environment]
LIB="%@P%\..\lib";\dm\lib
DFLAGS="-I%@P%\..\src\phobos"
LINKCMD="%@P%\..\..\dm\bin"
DDOCFILE=mysettings.ddoc
Problemas de Instalação ComunsCommon Installation Problems
- O utilitário unzip do Cygwin é conhecido como causa estranhos problemas.
- Executar o compilador sob shell de comando do Cygwin também causa problemas. Tente fazê-lo trabalhar bob shell regular do Windowsl cmd.exe antes de tentar o do Cygwin.
- Instalar dmd e dmc em caminhos de diretório com espaços causa problemas.
Compilador D para Linux
Arquivos
- /dmd/bin/dmd
- Executável do compilador D
- /dmd/bin/dumpobj
- Elf file dumper
- /dmd/bin/obj2asm
- Elf file disassembler
- /dmd/bin/dmd.conf
- Configurações globais do compilador (copie para /etc/dmd.conf)
- /dmd/lib/libphobos.a
- Biblioteca padrão (copie para /usr/lib/libphobos.a)
Requisitos
- Sistema Operacional Linux x86 de 32 bits
- Compilador D para Linux
- Gnu C compiler (gcc)
Instalação
- Descompacte o arquivo em seu diretório home. Isso criará um diretório ~/dmd com todos os arquivos. Todas as ferramentas são de linha de comando, o que significa que elas são executadas de uma janela de console.
- Edite o arquivo ~/dmd/bin/dmd.conf para colocar o caminho onde os arquivos fontes de phobos estão.
- Copie dmd.conf para /etc:
cp dmd/bin/dmd.conf /etc
- Dê permissão de execução aos seguintes arquivos:
chmod u+x dmd/bin/dmd dmd/bin/obj2asm dmd/bin/dumpobj
- Coloque dmd/bin em seu PATH, ou copie os executáveis para Linux para /usr/local/bin
- Copie a biblioteca para /usr/lib:
cp dmd/lib/libphobos.a /usr/lib
Argumentos e Interruptores do compilador
- dmd arquivos... -interruptor...
- arquivos...
-
Extensão Tipo de Arquivo none Arquivos fonte D .d Arquivos fonte D .di Arquivos interface D .o Arquivos objeto para linkar .a Arquivos de biblioteca para linkar - -c
- só compila, não linka
- -cov
- instrumento para análise de cobertura de código
- -D
- gera documentação
- -Dddocdir
- escreve a documentação no diretório docdir
- -Dfarquivo
- escreve a documentação no arquivo arquivo
- -d
- permite características desaprovadas
- -debug
- compila em código de depuração
- -debug=nível
- compila em código de depuração <= nível
- -debug=ident
- compila em código de depuração identificado por ident
- -fPIC
- gera código independente da posição
- -g
- adiciona informação de depuração simbólica
- -gc
- adiciona informação de depuração simbólica no formato C (para gdb's mais velhor)
- -H
- gera arquivo de interface D
- -Hddir
- escreve o arquivo de interface D no diretório dir
- -Hfarquivo
- escreve arquivo de interface D no arquivo
- --help
- imprime a ajuda
- -inline
- expande funções "em linha"
- -Icaminho
- onde procurar por importações.. caminho é uma lista de caminhos separados por ; . Múltiplos -I's podem ser usados, e os caminhos são procurado na mesma ordem.
- -Llinkerflag
- passa linkerflag para o linker, por exemplo, -M
- -O
- otimiza
- -o-
- Evita a geração do arquivo objeto
- -odobjdir
- escreve arquivos objeto relativos no diretório objdir ao invés de no diretório atual
- -ofarquivo
- ajusta o nome de saída para arquivo no diretório de saída
- -op
- normalmente o caminho para arquivos fonte .d é removido quando gerando o nome de um arquivo objeto. -op evita isso.
- -quiet
- evita mensagens não-essenciais do compilador
- -profile
- profile o desempenho do código gerado
- -release
- compila versão de lançamento
- -run arquivo args...
- compila, linka e executa o programa arquivo com o resto da linha de comando, args..., como os argumentos para o programa. Nenhum arquivo .obj ou .exe é deixado para trás.
- -unittest
- compila em código de teste de unidade
- -v
- verbose
- -version=nível
- compila em código de versão >= nível
- -version=ident
- compila em código de versão identificado por ident
- -w
- habilita advertências
Linkando
A linkagem é feita direpamente pelo compilador dmd após uma compilação com sucesso. Para previnir dmd de executar o linker, use o interruptor -c.A linkagem atual é feita executando o gcc. Isso assegura compatibilidade com outros módulos compilados com o gcc.
Variáveis do Ambiente
O compilador D usa as seguintes variáveis do ambiente:- CC
- dmd normalmente executa o linker procurando pelo gcc ao longo do PATH.
Para usar um linker específico no lugar, ajuste a variável de ambiente CC para ele. Por exemplo:
set CC=gcc
- DFLAGS
- O valor de DFLAGS é tratado como se ele tivesse sido adicionado à linha de comando para dmd.
Arquivo de Inicialização dmd.conf
dmd procurará pelo arquivo de inicialização dmd.conf na seguinte seqüência de diretórios:- diretório de trabalho atual
- diretório especificado pela variável de ambiente HOME
- diretório onde está dmd
- /etc/
Variáveis do ambiente seguem a seção [Environment], em pares nome=valor. Comentários são linhas que começa ;. Por exemplo:
; arquivo dmd.conf para dmd
; Nomes envolvidos por %% são buscados no ambiente existente
; e inseridos. O nome especial %@P% é substituído pelo caminho
; desse arquivo.
[Environment]
DFLAGS="-I%@P%/../src/phobos"
Diferenças da versão para Win32
- Strings literais são somente leitura. Tentar escrever nelas causará uma violação de segmento.
- O arquivo de coniguração é /etc/dmd.conf
Linux Bugs
- -g só é implementado para números de linhas, não símbolos locais, pois eu não figurei como fazer isso ainda. gdb ainda trabalha, porém, a nível de símbolo global.
- A saída do gerador de código ainda não foi afinada, então ela pode ser inchada.
- Bibliotecas compartilhadas não podem ser geradas.
- O controle de exceção não é compatível com a jeito como g++ faz isso. Eu não ei se isso é um assunto ou não.
Geral
Arquivos de Interface D
Quando uma declaração de importação é processada em um arquivo fonte em D, o compilador, busca por arquivos font correspondentes à importação, e processa esses arquivos fonte para extrair as informações necessárias dele. Alternativamente, o compilador pode procurar por um arquivo de interface D. Um arquivo de interface D contém somente o que uma importação do módulo precisa, ao invés de toda implementação do módulo.As vantagens de urar um arquivo de interface para importações, no lugar de arquivos fonte, são:
- Arquivos de interface são freqüentemente menores e muito mais rápidos para processar que o arquivo fonte correspondente.
- Eles podem ser usados para esconder o código fonte, por exemplo, alguém pode enviar uma biblioteca de código objeto com arquivos de interface ao invés do código fonte completo.
Arquivos de interface D tem algumas semelhanças com arquivos de cabeçalho C++. Mas eles não são necessários como os arquivos de cabeçalho C++ são, e eles não são parte da linguagem D. Eles são uma característica do compilador, e servem somente como uma otimização do processo de construção.
Bugs
Esses são os principais bugs:- O compilador algumas vezes pega o número da linha errada em um erro.
- A biblioteca padrão é inadequada.
- Precisa escrever uma ferramenta para converter arquivos C .h para módulos D.
- Operações de arrays op= não estão implementadas.
- Pré-condições de entrada e pós-condições de saída para funções membro não são herdadas.
- Não pode ser executado do IDDE.