FractalPark
Linguagem FRM e compatibilidade

Entenda o FRM no FractalPark

Aprenda como Definitions FRM-like v1 canônicas alimentam fórmulas Standard publicadas e depois use os exemplos separados do Editor compatível com Classic sem confundir os dois contratos de código-fonte.

01

O que é FRM

FRM-like v1 do FractalPark é a linguagem de código-fonte canônica e tipada por trás das Definitions Standard publicadas. Uma Definition fixa sua linguagem, biblioteca padrão, NumericProfile, parâmetros, estado inicial, passo repetido da órbita e predicado de continuação da iteração.

O .frm Classic surgiu no ecossistema Fractint e continua sendo o contrato de código-fonte usado pelo Editor independente compatível com Classic e pelo pipeline de importação. O FractalPark examina e diagnostica esse dialeto separadamente; código-fonte Classic e frmSemanticsVersion 1 ou 2 não são grafias alternativas do FRM-like v1 canônico.

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

02

Suporte a FRM no FractalPark

Esta tabela de compatibilidade descreve o Editor e o caminho de importação compatíveis com Classic. As Definitions Standard canônicas publicadas usam o parser FRM-like v1 versionado separadamente, IR tipado, backend standard32 e Safety Envelope fixo.

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 referência de compatibilidade Classic testada, não uma alegação de compatibilidade completa com Fractint. Ela é distinta do registro de publicação Standard.

Compatibilidade verificada

Estas contagens de capacidade de importação Classic vêm do manifesto de compatibilidade versionado: 588 entradas-alvo abrangem 579 aprovações strict-v2 e 9 dispensas documentadas; 117 entradas separadas são excluídas com motivos estáveis. Elas não contam Definitions FRM-like v1 publicadas.

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

O FRM-like v1 canônico e os exemplos atuais do Editor Classic compartilham uma fórmula nomeada e as ideias de init, loop e bailout, mas suas gramáticas completas são diferentes. No v1, diretivas semânticas e uma seção opcional de parâmetros tipados também fazem parte da Definition.

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

As duas superfícies permanecem deliberadamente pequenas. Os resumos abaixo mostram conceitos compartilhados; use a ação Source de um Formula Record publicado para ver as diretivas canônicas e os parâmetros tipados, e use os diagnósticos do Editor para código-fonte Classic.

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 nunca cola código-fonte em um shader. O código-fonte v1 canônico passa pelo parser tipado e pelo backend CPU/GLSL; o código-fonte do Editor Classic passa pelo scanner, frontend da entrada selecionada, modelo canônico de fórmula e compilador de plugins.

  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.

Cada contrato de código-fonte tem seu próprio caminho de implementação. O runtime Standard publicado usa FRM-like v1; o Editor independente e os exemplos atuais de fórmulas personalizadas usam o caminho compatível com Classic. Nenhum deles recorre silenciosamente ao outro.

06

Tutoriais Progressivos

Estes são exemplos do Editor compatíveis com Classic, não Definitions FRM-like v1 canônicas. Eles vão de uma pequena fórmula quadrática a parâmetros e realimentação com estado; cada bloco de código-fonte vem do registro compartilhado do Editor 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 independente abre esses exemplos compatíveis com Classic, verificados pela compilação, por ID estável. O código-fonte da fórmula fica na aba atual até você salvá-lo na sua biblioteca na nuvem e nunca é incorporado à URL. Isso não ativa a importação nem os writers do v1 canônico.

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 o fluxo atual de compilação, prévia, importação e download compatível com Classic. Ele não aceita código-fonte FRM-like v1 canônico; inspecione o código-fonte v1 publicado em um Formula Record e use a ação Open ou Remix desse Record para executá-lo.

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.