Fenner
Ferramentas

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:

ProgramaO que é
FSetupC.exeo compilador: lê um script .fis e gera o Setup.exe
FSetupStub.exeo 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
texto
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.