Projetos escritos em Fenner
O compilador, o RAD e as ferramentas de desenvolvimento que a própria linguagem sustenta.
Fenner é usada para escrever as ferramentas em volta dela. Esta página reúne as ferramentas de desenvolvimento; cada uma é um aplicativo Fenner sobre a BedRock e a WCL, e cada uma exercita a linguagem num domínio diferente.
O compilador fc#
O próprio compilador é escrito em Fenner e compila a si mesmo, em bootstrap de várias gerações. É um programa de dezenas de milhares de linhas (só o parser e analisador semântico passa de 35 mil), com o analisador léxico, o gerador de LLVM IR, a ponte para o LLVM, o formato .fxd e a ligação. Veja Como o compilador funciona.
O Fenner RAD#
O ambiente de desenvolvimento: designer de formulários, inspetor, editor de código com completar e navegação, e o ciclo compilar/executar. Veja o guia do RAD.
FSetup: gerador de instaladores#
Um instalador no estilo do InnoSetup, feito em fc + BedRock/WCL, em dois programas sem DLL ao lado:
| Programa | O que é |
|---|---|
FSetupC.exe | o compilador: lê um script .fis e gera o Setup.exe |
FSetupStub.exe | o instalador base: o FSetupC o copia para o Setup.exe e anexa o pacote; copiado para {app}\unins000.exe (sem pacote), ele vira o desinstalador |
FSetupC <script.fis> [/O<pasta>] [/F<nome>] [/D<nome>[=<valor>]] [/STUB=<exe>] [/Q]PE Explorer#
Um visualizador de arquivos executáveis, refeito em Fenner a partir de uma ferramenta em Delphi. Abre PE (inclusive .winmd) e também ELF, Mach-O, WebAssembly, .jar, .class, .res, .dfm, .obj, .lib, .cab, .msi, .iso e .tar. É um executável só, sem DLL ao lado, e mostra, entre outras coisas:
- cabeçalhos com cada campo decodificado (valor, decimal, significado, deslocamento), exportações, importações (inclusive carga atrasada), recursos (imagens, manifest, VERSIONINFO, menus, diálogos, DFM binário convertido em texto) e segurança (certificados X.509 e Authenticode, carimbos de tempo, verificação pelo
WinVerifyTrust); - num assembly .NET, as 45 tabelas de metadados lidas à mão, sem carregar o CLR, com o C# descompilado ou o IL;
- num executável Delphi, as units, os formulários, as classes reconstruídas a partir do RTTI e da VMT.
Visualizador de PDF#
Um aplicativo de janelas com motor próprio: análise do PDF, fontes, rasterização. Nada de GDI+, WIC ou bibliotecas externas no motor: o desenho sai num bitmap BGRA que a janela só exibe. Abre PDF 1.0 a 2.0 (tabelas e fluxos de xref, híbridos, fluxos de objetos; arquivos danificados são reconstruídos por varredura), com cifras RC4 e AES, fontes TrueType, OpenType-CFF, Type1, CID e Type3, e imagens Flate, LZW, JPEG (baseline e progressivo), CCITT, JPEG 2000 e JBIG2.
FennerScript#
O motor de scripts embutível. Veja FennerScript.
Por que isso importa#
Cada um desses programas é um teste de estresse da linguagem e da RTL: o PE Explorer e o visualizador de PDF mexem em formatos binários e em muita aritmética de bits; o FSetup, em arquivos, compressão e instalação; o RAD e o fc, em milhares de classes, genéricos e grandes volumes de texto. Os defeitos que eles acharam viraram correções e testes do compilador.