Object Pascal moderno, compilado para código nativo.
Uma linguagem de sintaxe Delphi com tipos que dizem a largura, cadeias que sabem a codificação, dinheiro exato e um compilador LLVM escrito nela mesma. E um RAD para desenhar os formulários.
program Hero;
type
TCustomer = class(TObject)
public
Name: UString;
Credit: ?Currency64; // pode não existir
end class;
var
C: TCustomer;
Amount: Currency64;
Big: Int256;
begin
C := TCustomer.Create;
C.Name := 'Ana';
WriteLn(C.Name, ': ', C.Credit ?? 0); // vazio vira 0
Amount := 19.99; // moeda exata
C.Credit := Amount;
WriteLn(C.Name, ': ', C.Credit ?? 0);
Big := 1_000_000_000_000_000_000;
WriteLn(Big * Big * Big); // Int256 nativo
end.Ana: 0.0000
Ana: 19.9900
1000000000000000000000000000000000000000000000000000000Uma linguagem que recusa cedo
A base é o Pascal que você conhece. O que a Fenner muda, muda para o compilador pegar no fc o que costumava virar defeito em produção.
Tipos que dizem a largura
De Int8 a Int4096, Float16 a Float128 e a família Currency de ponto fixo. Não existe Integer: o nome antigo é um erro que aponta o novo.
Cadeias com codificação no tipo
LString, U8String, UString e WString. A conversão entre codificações é explícita onde ela perde informação.
O valor que pode não existir
?Int32, ??, ?. e ! fazem a ausência de valor parte do tipo, não uma convenção.
Memória sem coletor
Objetos com contagem de referências, weak, ligações dono/filho com Ref e listas intrusivas com ChainRoot, tudo como forma da linguagem.
Moderna sobre a base Pascal
Genéricos com restrições, lambdas com captura, async/await, helpers e variáveis declaradas no meio do bloco.
A compilação é programável
{$if} sobre tipos, macros, late modules e meta modules que leem o programa compilado e acrescentam métodos antes do código final.
Compile em segundos, rode em nativo
O fc lê o .fxp, gera LLVM IR e liga o executável com o lld embutido. Nada de máquina virtual, nada a instalar além do próprio fc.exe e da RTL.
- Níveis
-O0a-O3: itere rápido, entregue otimizado. - Poda de código morto a partir do corpo principal, e devirtualização.
- Depuração com
-g: um.pdbcom rotina, arquivo e linha. - Verificações opcionais de faixa e de transbordo, e exceções para erros de hardware.
Escreva
Salve hello.fxp com um program e um begin..end..
Compile
fc hello.fxp e o Hello.exe sai ao lado do fonte.
Rode
Sem runtime a instalar: é um executável do Windows como outro qualquer.
O ecossistema
Da linguagem à janela na tela, tudo escrito em Fenner.
Fenner RAD
Paleta, formulário preso numa aba por módulo, inspetor de propriedades e eventos, editor de código com completar e navegação.
Conhecer o RAD →Biblioteca BedRock
Banco de dados (Firebird, PostgreSQL, MySQL, SQLite), JSON, XML, HTTP, TLS, compressão, expressões regulares e hashes.
Ver a biblioteca →WCL
Os componentes visuais: formulários, controles do Windows, grades, árvores virtuais, estilos e o editor de código.
Ver a WCL →FennerScript
Um motor de scripts embutível, tipado e compilado para bytecode, que só enxerga o que o seu aplicativo registrar.
Ver o FennerScript →Extensão do VS Code
Realce que respeita a caixa, trechos de código e os erros do compilador no painel de Problemas.
Ver a extensão →Feitos em Fenner
O próprio compilador, o RAD, um gerador de instaladores, um explorador de executáveis e um visualizador de PDF.
Ver os projetos →Participe da comunidade
Tire dúvidas, conte o que está construindo e acompanhe as novidades da linguagem e do RAD no grupo do WhatsApp.
Apoie o projeto
A Fenner é desenvolvida de forma independente. Financie o desenvolvimento no Apoia.se ou faça uma doação avulsa via PIX.