www.digitalmars.com
Last update Sun Aug 20 17:04:33 2006

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

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.sh
no 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:
  1. diretório de trabalho atual
  2. diretório especificado pela variável de ambiente HOME
  3. diretório onde está dmd.exe
Se encontrado, configurações de variáveis do ambiente no arquivo anularão quaisquer configurações existentes. Isso é controlado para fazer dmd independente de programas com uso de variáveis do ambiente em conflito.

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


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

Instalação

  1. 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.
  2. Edite o arquivo ~/dmd/bin/dmd.conf para colocar o caminho onde os arquivos fontes de  phobos estão.
  3. Copie dmd.conf para /etc:
    cp dmd/bin/dmd.conf /etc
  4. Dê permissão de execução aos seguintes arquivos:
    chmod u+x dmd/bin/dmd dmd/bin/obj2asm dmd/bin/dumpobj
  5. Coloque dmd/bin em seu PATH, ou copie os executáveis para Linux para /usr/local/bin
  6. 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:
  1. diretório de trabalho atual
  2. diretório especificado pela variável de ambiente HOME
  3. diretório onde está dmd
  4. /etc/
Se encontrado, configurações de variáveis do ambiente no arquivo anularão quaisquer configurações existentes. Isso é controlado para fazer dmd independente de programas com uso de variáveis do ambiente em conflito.

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

Linux Bugs


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 podem ser criados pelo compilador a partir de um arquivo fonte usando o interruptor -H. Arquivos de interface tem a extensão .di. Quando o compilador resolve uma declaração de importação, ele primeiro procura por um arquivo de interface .di, então ele procura por um arquivo fonte.

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:

Questões?

Agradecemos todos os comuntários, sugestões, chingamentos, bugs, dicas, e especialmente código doado! Junte-se a rixa no D forum.