Franz
Franz é uma linguagem funcional e orientada a protótipos, com sintaxe concisa e escopo lexical. Suporta compilação nativa via LLVM IR.
O que é Franz?
Franz é uma linguagem de programação de alto nível, funcional, interpretada, tipada dinamicamente e de propósito geral, com sintaxe concisa e uma biblioteca padrão extensa. Seu objetivo principal é suportar padrões de programação funcional, ao mesmo tempo que oferece ferramentas para gerenciar efeitos e garantir execução previsível.
O projeto é apresentado como uma linguagem orientada a protótipos com efeitos seguros por capacidades e replay determinístico, incluindo “estritamente sem efeitos colaterais” (com uma exceção explícita para IO). Também inclui um caminho do código-fonte até executáveis nativos via LLVM IR.
Principais Recursos
- Núcleo funcional com objetos orientados a protótipos: Utiliza uma base funcional pequena combinada com objetos orientados a protótipos para modelar comportamento, mantendo o foco da linguagem em construções funcionais.
- Efeitos seguros por capacidades com replay determinístico: Projetada para ajudar a localizar e controlar efeitos provenientes de arquivos Franz importados.
- Estritamente sem efeitos colaterais (com exceção da tabela IO): O modelo da linguagem é descrito como evitando efeitos colaterais, exceto por um mecanismo de IO explicitamente mencionado.
- Compilação nativa via LLVM IR: Suporta compilação direta para executáveis nativos usando LLVM IR.
- Literais de lista e operações de lista LLVM: Inclui sintaxe de literais de lista como
[1, "hello", 3.14]e listas aninhadas, além de operações comohead,tail,cons,empty?,length,ntheis_list. - Primitivas de comparação e matemática compiladas para tipos comuns: Fornece operadores de igualdade/ordem (
is,less_than,greater_than) para inteiros, floats e strings, além de funções matemáticas comoremainder,power,random,floor,ceil,round,abs,min,maxesqrt. - Fluxo de controle e condicionais com padrão: Disponibiliza construções
if/when/unlesse “cadeias cond” para ramificações de múltiplos caminhos com estilo de correspondência de padrões. - Escopo lexical com closures baseados em snapshot: Implementa escopo lexical onde os closures capturam variáveis do ambiente no momento da definição; suporta closures aninhados de profundidade arbitrária.
- Sandboxing baseado em capacidades para código importado: Utiliza padrões de execução sandbox via
use_with()e localização de efeitos viause_as()e notação de ponto (como descrito no texto do repositório).
Como Usar Franz
- Clone ou abra o repositório Franz e inspecione o
README.mde os arquivos de exemplo incluídos (por exemplo,examples/mult-table.franzeexamples/game-of-life.franz). - Revise os módulos da biblioteca padrão mencionados na documentação (String, Math, List, Func) para ver as funções built-in e as operações de lista/list-combinator disponíveis.
- Siga os padrões de escopo lexical e closure mostrados no texto do repositório para verificar como os closures capturam variáveis e como os closures aninhados se comportam.
- Execute os scripts fornecidos do repositório para exercitar a implementação e os smoke tests (o repositório menciona scripts bash como
scripts/run-comparison.she smoke tests automatizados).
Casos de Uso
- Construir código de transformação de dados com processamento funcional de listas: Use literais de lista e operações de lista (ex.: padrões estilo
mapmostrados no texto do repositório, plushead/tail/nthe outros auxiliares de lista) para manipular dados estruturados. - Implementar lógica de múltiplos ramos com cadeias condicionais: Use
condchains para ramificações estilo padrão quando precisar rotear lógica baseado em comparações de inteiros/floats/strings ou guards. - Escrever código de ordem superior com closures: Use os combinadores do “módulo Func” (como
compose2,applyeapply_twice) junto com closures baseados em snapshot para construir componentes funcional reutilizáveis. - Demonstrar escopo previsível em pequenos programas: Use escopo lexical e closures aninhados de profundidade arbitrária to build programs onde as variáveis capturadas devem permanecer estável across calls.
- Prototipar comportamento de linguagem com compilação nativa: Compile código Franz através do pipeline LLVM IR para produzir executáveis nativos, incluindo caminhos de código que exercitam operações de lista, matemática, comparações e fluxo de controle.
FAQ
-
Franz é livre de efeitos colaterais? O texto do repositório diz “Strictly no side effects,” com uma exceção explícita para uma tabela IO.
-
Franz compila para executáveis nativos? Sim. A descrição do projeto afirma “Direct compilation to native executables via LLVM IR.”
-
Qual modelo de tipagem Franz usa? Franz descrito como tipado dinamicamente e garbage collected.
-
Como funciona a captura de closure em Franz? A documentação descreve escopo lexical onde closures capturam variáveis do ambiente no momento da definição (closures baseados em snapshot), e suporta closures aninhados de profundidade arbitrária.
-
Quais ferramentas são incluídas no repositório? O repositório inclui exemplos under
examples/, testes (incluindo “smoke tests”), e scripts para running comparisons e checks (como referenciado no conteúdo da página).
Alternativas
- Linguagens de programação funcional com sistemas de tipos fortes (por exemplo, linguagens da família ML): Se você busca principalmente uma sintaxe funcional com escopo e closures previsíveis, mas não precisa de compilação nativa baseada em LLVM como foco declarado.
- Linguagens baseadas em protótipos (por exemplo, JavaScript com padrões funcionais): Útil quando o interesse está na modelagem orientada a protótipos, embora o fluxo de trabalho e o modelo de efeitos descrito para Franz sejam diferentes.
- Linguagens de propósito geral compiladas com recursos funcionais (por exemplo, linguagens que compilam via LLVM): Se você deseja compilação por LLVM IR e construções funcionais, mas prefere um ecossistema com sintaxe e convenções de runtime diferentes.
- Linguagens de script usadas para prototipagem com abordagens de sandbox: Se sua prioridade é experimentar rapidamente com execução controlada (o repositório discute padrões de segurança baseados em capacidades), você pode escolher um runtime diferente que ofereça seus próprios mecanismos de sandbox.
Alternativas
AakarDev AI
AakarDev AI é uma plataforma poderosa que simplifica o desenvolvimento de aplicações de IA com integração perfeita de banco de dados vetorial, permitindo implantação rápida e escalabilidade.
Arduino VENTUNO Q
Arduino VENTUNO Q é um computador edge AI para robótica, unindo inferência e microcontrolador para controle determinístico. Desenvolva no Arduino App Lab.
Devin
Devin é um agente de IA para codificação que ajuda equipes de software em migrações e grandes refatorações, executando subtarefas em paralelo.
BenchSpan
BenchSpan executa benchmarks de agentes de IA em paralelo, registra scores e falhas em um histórico organizado e facilita reprodutibilidade por commit.
open-codex-computer-use
open-codex-computer-use: serviço open-source “Computer Use” em formato MCP, para agentes executarem ações de GUI na área de trabalho no macOS, Linux e Windows.
Codex Plugins
Use Codex Plugins para combinar skills, integrações de apps e servidores MCP em fluxos reutilizáveis, ampliando o acesso do Codex a Gmail, Drive e Slack.