Perguntas frequentes
Respostas curtas às dúvidas mais comuns, com links para o detalhe.
Geral#
Qual é o nome da linguagem, e quais são as extensões de arquivo? A linguagem é Fenner, e o compilador é o fc. Projetos são .fxp, módulos .fxm, inclusões .fxi, formulários do RAD .fxf. Veja Projetos e arquivos.
Preciso do Delphi para usar? Não. O compilador, a RTL, a WCL e o RAD são todos Fenner, e o LLVM e o ligador vêm dentro do fc.exe.
Que plataformas ela suporta? O Windows de 64 bits é a plataforma entregável. O Windows de 32 bits gera executáveis que rodam, mas está incompleto; o Linux de 64 bits compila, liga e roda no WSL, mas depende de uma instalação externa de Linux. Veja Plataformas e modos.
A linguagem já é usada para valer? Sim: o próprio compilador, o RAD e várias ferramentas de desenvolvimento são escritos em Fenner. O projeto está em desenvolvimento ativo, e cada página diz o que ainda está em andamento. Veja Projetos escritos em Fenner.
Compilação#
Por que a primeira compilação demora tanto? O compilador lê a RTL inteira a partir do fonte a cada compilação (para um programa mínimo, ≈ 70% do tempo). Itere em -O0; use a RTL pré-compilada (RtlPackage) para compilar bem mais rápido; e deixe o -O2/-O3 para a entrega. Veja Como funciona e Packages.
O fc não acha a RTL. O que faço? Sem configuração, ele procura em ..\rtl, relativa à pasta do fc.exe. Aponte outra com Config All RtlSource <pasta> no .config, ou com a variável de ambiente FC_RTL. Veja Configuração.
Como escolho entre a RTL do compilador e a BedRock? Pela chave RtlSource. A BedRock é a dos aplicativos (WCL, bancos de dados, JSON, rede). A do compilador é a mínima e traz async/await e os meta modules. Veja Visão geral da biblioteca.
O executável abre uma janela de console. Como evito? {$config AppType GUI} no fonte, ou Config All AppType GUI no .config.
Como gero uma DLL? Com um projeto library e a cláusula exports. Para uma DLL cujos tipos (classes, genéricos) atravessam a fronteira, use um package. Veja Interoperabilidade.
Como embuto manifesto, ícone e recursos? {$config Manifest 'arquivo'}, {$config Icon 'arquivo'} e {$config Resource …}; o RAD faz isso pela janela de configurações do projeto.
Linguagem#
Por que IntToStr e Integer não existem? Porque o nome diz a largura e a codificação. Use Int32 e IntToUStr/IntToLStr/IntToU8Str. O compilador aponta o nome novo quando você escreve o antigo. Veja Tipos.
Preciso chamar Free? Em geral, não: objetos têm contagem de referências e o destrutor roda quando a última referência some, no fim do escopo. Para ciclos, use weak; para ligações dono/filho, Ref; para listas, ChainRoot. Veja Memória.
Como lido com um valor que pode não existir? Com ?T: Age: ?Int32, Age ?? -1, Age!, ?Age, X?.Idade. Veja Nulos e exceções.
Como saio de dois laços aninhados de uma vez? Dando um rótulo ao laço de fora: for [outer] I := … do, e Break(outer) onde precisar. Veja Declarações e comandos.
Dá para usar async/await? Sim, sobre TTask<T>, na RTL do compilador. A BedRock ainda não declara TTask. Veja Lambdas, eventos e async.
Como o compilador gera código por mim a partir de atributos? Com um meta module, que roda em compilação, lê o retrato do programa e acrescenta métodos. Veja Metaprogramação.
Ferramentas#
Como depuro? Compile com -g para gerar um .pdb com rotina, arquivo e linha, e use um depurador do Windows. Todo aplicativo do RAD leva o AppGuard, que mostra o erro fatal antes de o processo morrer. Veja Diagnósticos.
Posso embutir scripts no meu aplicativo? Sim, com o FennerScript: um motor tipado, compilado para bytecode, que só enxerga o que você registrar.
Existe suporte no VS Code? Existe uma extensão com realce que respeita a caixa, trechos e leitura dos erros do fc. Não há servidor de linguagem. Veja VS Code.
O RAD substitui o editor que já uso? O RAD é o único ambiente com designer de formulários. Para código, qualquer editor serve, e o fc compila de linha de comando.