FractalPark
Linguagem de fórmulas FRM

Escreva Fractais com FRM

Aprenda o subconjunto FRM testado do FractalPark, entenda como o código-fonte vira um shader de GPU e construa três fórmulas funcionais a partir dos mesmos exemplos usados pelo editor.

01

O que é FRM

FRM é uma forma compacta e baseada em texto de descrever um fractal iterativo. Uma fórmula define seu estado inicial, o cálculo repetido para cada órbita e a condição que decide se a iteração continua.

O formato nasceu do ecossistema Fractint, onde arquivos de fórmula permitiam trocar experimentos sem recompilar o programa de renderização. O FractalPark leva essa ideia de autoria para um fluxo de trabalho no navegador, documentando seu próprio subconjunto testado em vez de reivindicar compatibilidade completa.

Para as origens e a história do projeto em geral, veja o site do projeto Fractint.

02

Suporte a FRM no FractalPark

O FractalPark tokeniza, analisa, valida e compila um subconjunto deliberado de FRM. A tabela separa construções que funcionam diretamente, construções com semântica documentada do FractalPark e construções que o fluxo de trabalho atual não consegue preservar.

NívelSignificadoÂmbito verificado
SuportadoCoberto pelos testes do compilador e utilizável sem ressalva semântica.
  • Uma declaração de fórmula por documento de código-fonte
  • seções init, loop e bailout
  • Atribuições e variáveis do usuário
  • Literais reais e complexos; expressões aritméticas, de comparação, lógicas, unárias e de magnitude
  • ramificações if / elseif / else / endif
  • z, c, pixel, zPrev, p1–p5, constantes e funções integradas testadas
  • comentários FRM
  • Diagnósticos estruturados e mapeamento de código-fonte de FRM para GLSL
AdaptadoAceito com uma diferença semântica documentada ou como extensão do FractalPark.
  • ismand é mapeado para o modo de execução Mandelbrot/Julia atual do FractalPark
  • fn1–fn4 usam despacho de funções em tempo de compilação
  • @mode: native, @default-view e @default-coloring são extensões do FractalPark; as diretivas de padrão se aplicam apenas no modo nativo
Não suportadoNão preservado pelo compilador atual nem pelo fluxo de arquivos; rejeitado em vez de reescrito silenciosamente.
  • Selecionar entre várias fórmulas em um único arquivo
  • Conversão automática de dialetos clássicos do Fractint
  • Diretivas de código-fonte arbitrárias
  • Identificadores não ASCII
  • Funções ou macros definidas pelo usuário
  • Recursos de pré-processador
  • Qualquer construção rejeitada pelo pipeline de compilação atual

Esta é uma linha de base de compatibilidade testada, não uma afirmação de compatibilidade total com o Fractint. Quando o compilador mudar, esta matriz e seus testes devem mudar juntos.

Compatibilidade verificada

Essas contagens de capacidades vêm do manifesto versionado: 588 entradas-alvo compreendem 579 aprovações strict-v2 e 9 dispensas documentadas; 117 entradas separadas são excluídas com motivos estáveis.

Entradas-alvo
588
Aprovações strict-v2
579
Dispensas documentadas
9
Excluídas com justificativa
117
Tipos de descritor de bailout
4
Funções integradas
20

Descritores de bailout

  • C1
  • C2
  • C4R
  • C5

Motivos de rejeição estáveis

  • unknown-predicate
  • unknown-magnitude-form
  • threshold-not-loop-invariant
  • chained-logical

Funções integradas

  • sin
  • cos
  • tan
  • sinh
  • cosh
  • tanh
  • exp
  • log
  • sqrt
  • abs
  • sqr
  • conj
  • flip
  • recip
  • cabs
  • real
  • imag
  • atan2
  • cosxx
  • cotanh

Parâmetros: p1, p2, p3, p4, p5 · Slots de função: fn1, fn2, fn3, fn4

Manifesto de capacidades v1 · Semântica estrita v2

03

Anatomia da Fórmula

Uma fórmula FRM do FractalPark tem uma declaração nomeada e três seções explícitas. Juntas, elas definem a transição de estado para cada pixel.

01

init:

Executa uma vez por pixel. Defina aqui o valor inicial da órbita e as variáveis auxiliares.

02

loop:

Executa uma vez por iteração. Atualize z e qualquer estado de que a próxima iteração precise.

03

bailout:

Retorna a condição para continuar a órbita. Quando ela se torna falsa, o ponto escapou.

Os nomes das seções são estruturais, não comentários: omitir ou escrever errado um deles gera um diagnóstico.

04

Guia de Sintaxe

A linguagem permanece intencionalmente pequena: expressões descrevem aritmética complexa, instruções atualizam o estado da órbita e o fluxo de controle seleciona entre atualizações.

Declaração e seções
Envolva uma fórmula nomeada em chaves e depois escreva init:, loop: e bailout:, nessa ordem.
Valores e variáveis
Use números reais como 0.15, pares complexos como (0.05, -0.02), valores de órbita integrados ou suas próprias variáveis atribuídas.
Expressões
Aritmética, potências, comparações, operadores lógicos, operadores unários, a sintaxe de magnitude |z| e funções complexas testadas podem ser combinados.
Fluxo de controle
Use if, elseif, else e endif quando uma atualização de órbita depender de uma condição. Os blocos devem estar balanceados.
Integrados
Os nomes principais incluem z, c, pixel, zPrev, p1–p5, pi, e, maxit, ismand, fn1–fn4 e as funções cobertas pelos testes do compilador.
Comentários e diretivas
Comentários com ponto e vírgula documentam o código-fonte. Diretivas @ reconhecidas configuram o comportamento nativo do FractalPark; diretivas desconhecidas não são ignoradas silenciosamente.
05

Pipeline de FRM para AST para GLSL

O FractalPark não cola texto FRM em um shader. Ele passa o código-fonte por um compilador em etapas para que sintaxe, significado, código gerado e diagnósticos permaneçam conectados.

  1. 1

    Código-fonte FRM

    O texto exato do editor, da colagem ou do arquivo local é a entrada autoritativa.

  2. 2

    Tokens do lexer

    O lexer reconhece nomes, números, operadores, marcadores de seção, comentários e diretivas, mantendo as localizações no código-fonte.

  3. 3

    AST analisado

    O parser constrói uma árvore estruturada da fórmula e reporta declarações, expressões e blocos de fluxo de controle malformados.

  4. 4

    Validação e forma canônica

    O validador verifica nomes, tipos, seções e semântica suportada antes de uma fórmula canônica ser criada.

  5. 5

    GLSL e mapa de código-fonte

    A geração de código emite funções de shader e registra mapeamentos do GLSL gerado de volta ao código-fonte FRM.

  6. 6

    Plugin de fórmula

    Uma compilação bem-sucedida se torna o mesmo contrato de plugin de fórmula usado pelo renderizador e pelo sistema de montagem de shaders.

O contrato compartilhado do compilador mantém o Explorar, o Editor autônomo, as fórmulas personalizadas salvas, os exemplos e os testes em um único caminho de implementação.

06

Tutoriais Progressivos

Estes exemplos avançam da menor fórmula quadrática até parâmetros e realimentação com estado. Cada bloco de código-fonte vem diretamente do registro compartilhado de exemplos e é compilado durante os testes.

Lição 1

Starter Mandelbrot

A menor fórmula de tempo de escape, útil para aprender primeiro a estrutura init / loop / bailout.

Foco: a declaração e a estrutura init / loop / bailout. Altere o expoente ou o limite de escape somente depois que esta versão compilar.

starter-brot.frm
StarterBrot {
init:
  z = 0
loop:
  z = z^2 + c
bailout:
  |z| < 4
}

Lição 2

Parameter Drift

parameter-driftAbrir no Editor FRM

Demonstra os slots de parâmetro p1 / p2 e a diferença entre cabs e |z|.

Foco: os slots de parâmetro p1 e p2, um literal complexo e cabs(z) como função explícita de magnitude.

parameter-drift.frm
ParameterDrift {
init:
  z = 0
loop:
  z = z^2 + c + p1 * 0.15 + p2 * (0.05, -0.02)
bailout:
  cabs(z) < 8
}

Lição 3

Orbit Echo

Usa zPrev como memória de realimentação e combina bem com a coloração orbitEcho para envoltórias de órbita.

Foco: zPrev como o estado anterior da órbita. A realimentação adiciona memória sem introduzir uma segunda variável de estado gerenciada manualmente.

orbit-echo.frm
OrbitEcho {
init:
  z = pixel
loop:
  z = sqr(z) + zPrev * (0.30, -0.12) + pixel * (0.85, 0.0)
bailout:
  |z| < 48
}

O Editor FRM abre esses mesmos exemplos verificados pela compilação por ID estável. O código-fonte da fórmula permanece na aba atual até você salvá-lo na sua biblioteca de fórmulas na nuvem e nunca é incorporado à URL.

07

Erros e Diagnósticos

A compilação para no estágio inseguro mais precoce e reporta mensagens orientadas ao código-fonte. Uma construção rejeitada nunca é reescrita em algo que apenas se parece com ela.

Erros lexicais

Caracteres inesperados e identificadores não suportados são reportados com sua linha e coluna.

Erros de análise

Seções, expressões ou blocos de fluxo de controle malformados são diagnosticados antes da validação semântica.

Erros de validação

Variáveis desconhecidas, atribuições inválidas, incompatibilidades de tipo e semântica não suportada impedem a geração de código.

Mapeamento de código-fonte do shader

O GLSL gerado mantém mapeamentos que podem apontar uma falha de compilação do shader de volta à localização FRM de origem.

Ao corrigir um erro, comece pela primeira mensagem reportada: diagnósticos posteriores podem ser consequências do mesmo token ausente ou da mesma expressão inválida.

08

Compartilhamento e publicação

Uma fórmula que você escreve é privada até você decidir o contrário. Há três formas de ela viajar — todas explícitas, nenhuma silenciosa.

  • Privada por padrão

    As fórmulas ficam na sua biblioteca na nuvem, visíveis apenas para você. As obras que você salva carregam uma cópia do código-fonte da fórmula dentro do rascunho, então sempre abrem do jeito que você as deixou.

  • Baixe o arquivo .frm

    Sua fórmula é texto simples. Baixe-a de Minhas Fórmulas a qualquer momento e guarde sua própria cópia — sem solicitação de exportação, sem espera.

  • Publique uma obra, compartilhe o código-fonte

    Publicar uma obra que usa sua fórmula torna o código-fonte da fórmula público sob a Licença MIT: qualquer pessoa pode lê-lo, copiá-lo e desenvolver em cima dele. A página da comunidade exibe o nome da fórmula a partir de seus metadados e oferece o código-fonte como download. Isso não pode ser desfeito para aquela publicação.

O texto completo da Licença MIT está em opensource.org.

09

Exemplos, Próximos Passos e Referências

Veja o renderizador em contexto

Abra o Explorar para comparar o comportamento das fórmulas integradas, coloração, transformações, animação e controles de exportação antes de escrever uma fórmula personalizada.

Abrir o Explorar

Use o Editor FRM dedicado para compilar, visualizar, importar e baixar fórmulas; faça login para salvar uma na sua biblioteca de fórmulas na nuvem antes de encaminhá-la ao Explorar.

Referências

O contexto histórico e os detalhes de implementação são linkados separadamente para que o guia possa distinguir a linhagem do Fractint do contrato atual do compilador do FractalPark.