FractalPark
Langage FRM et compatibilité

Comprendre FRM dans FractalPark

Découvre comment les Definitions FRM-like v1 canoniques alimentent les formules Standard publiées, puis utilise les exemples distincts de l’Éditeur compatible Classic sans confondre les deux contrats de source.

01

Qu'est-ce que le FRM

FractalPark FRM-like v1 est le langage source canonique et typé qui sous-tend les Definitions Standard publiées. Une Definition épingle son langage, sa bibliothèque standard, son NumericProfile, ses paramètres, son état initial, son étape d’orbite répétée et son prédicat de continuation des itérations.

Classic .frm est issu de l’écosystème Fractint et reste le contrat de source utilisé par l’Éditeur autonome compatible Classic et le pipeline d’importation. FractalPark analyse et diagnostique ce dialecte séparément ; la source Classic et frmSemanticsVersion 1 ou 2 ne sont pas des écritures alternatives de FRM-like v1 canonique.

Pour les origines et l'histoire du projet au sens large, voir le site du projet Fractint.

02

Prise en charge du FRM dans FractalPark

Ce tableau de compatibilité décrit l’Éditeur compatible Classic et le parcours d’importation. Les Definitions Standard canoniques publiées utilisent l’analyseur FRM-like v1 versionné séparément, l’IR typé, le backend standard32 et l’enveloppe de sécurité fixe.

NiveauSignificationPérimètre vérifié
Pris en chargeCouvert par les tests du compilateur et utilisable sans qualification sémantique.
  • Une déclaration de formule par document source
  • les sections init, loop et bailout
  • les affectations et les variables utilisateur
  • les littéraux réels et complexes ; les expressions arithmétiques, de comparaison, logiques, unaires et de magnitude
  • les branches if / elseif / else / endif
  • z, c, pixel, zPrev, p1–p5, les constantes et les fonctions intégrées testées
  • les commentaires FRM
  • les diagnostics structurés et le mappage de source FRM vers GLSL
AdaptéAccepté avec une différence sémantique documentée ou en tant qu'extension FractalPark.
  • ismand correspond au mode d'exécution Mandelbrot/Julia actuel de FractalPark
  • fn1–fn4 utilisent la répartition des fonctions au moment de la compilation
  • @mode: native, @default-view et @default-coloring sont des extensions FractalPark ; les directives par défaut ne s'appliquent qu'en mode natif
Non pris en chargeNon préservé par le compilateur actuel ou le flux de travail de fichiers ; rejeté plutôt que réécrit silencieusement.
  • la sélection parmi plusieurs formules dans un même fichier
  • la conversion automatique des dialectes Fractint classiques
  • les directives de source arbitraires
  • les identifiants non ASCII
  • les fonctions ou macros définies par l'utilisateur
  • les fonctionnalités de préprocesseur
  • toute construction rejetée par le pipeline de compilation actuel

Il s’agit d’une base de compatibilité Classic testée, et non d’une revendication de compatibilité complète avec Fractint. Elle est distincte du registre de publication Standard.

Compatibilité vérifiée

Ces décomptes de capacités d’importation Classic proviennent du manifeste de compatibilité versionné : 588 entrées cibles comprennent 579 réussites strict-v2 et 9 dérogations documentées ; 117 entrées distinctes sont exclues avec des raisons stables. Ils ne comptent pas les Definitions FRM-like v1 publiées.

Entrées cibles
588
Validations strict-v2
579
Dérogations documentées
9
Exclues avec justification
117
Types de descripteurs de bailout
4
Fonctions intégrées
20

Descripteurs de bailout

  • C1
  • C2
  • C4R
  • C5

Motifs de rejet stables

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

Fonctions intégrées

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

Paramètres : p1, p2, p3, p4, p5 · Emplacements de fonction : fn1, fn2, fn3, fn4

Manifeste de capacités v1 · Sémantique stricte v2

03

Anatomie d'une formule

FRM-like v1 canonique et les exemples actuels de l’Éditeur Classic partagent une formule nommée et les notions de init, loop et bailout, mais leurs grammaires complètes sont différentes. En v1, des directives sémantiques et une section parameters typée facultative font aussi partie de la Definition.

01

init:

S'exécute une fois par pixel. Définis ici la valeur d'orbite initiale et les éventuelles variables auxiliaires.

02

loop:

S'exécute une fois par itération. Mets à jour z et tout état nécessaire à la prochaine itération.

03

bailout:

Renvoie la condition pour continuer l'orbite. Lorsqu'elle devient fausse, le point s'est échappé.

Les noms de sections sont structurels, pas des commentaires : en omettre un ou l'écorcher produit un diagnostic.

04

Guide de syntaxe

Les deux surfaces restent volontairement réduites. Les résumés ci-dessous présentent des concepts communs ; utilise l’action Source d’un Formula Record publié pour les directives canoniques et les paramètres typés, et les diagnostics de l’Éditeur pour la source Classic.

Déclaration et sections
Enveloppe une formule nommée entre accolades, puis écris init:, loop: et bailout: dans cet ordre.
Valeurs et variables
Utilise des nombres réels comme 0.15, des paires complexes comme (0.05, -0.02), des valeurs d'orbite intégrées ou tes propres variables affectées.
Expressions
L'arithmétique, les puissances, les comparaisons, les opérateurs logiques, les opérateurs unaires, la syntaxe de magnitude |z| et les fonctions complexes testées peuvent être combinés.
Flux de contrôle
Utilise if, elseif, else et endif lorsqu'une mise à jour d'orbite dépend d'une condition. Les blocs doivent être équilibrés.
Fonctions intégrées
Les noms de base incluent z, c, pixel, zPrev, p1–p5, pi, e, maxit, ismand, fn1–fn4 et les fonctions couvertes par les tests du compilateur.
Commentaires et directives
Les commentaires commençant par un point-virgule documentent la source. Les directives @ reconnues configurent le comportement natif de FractalPark ; les directives inconnues ne sont pas ignorées silencieusement.
05

Pipeline de FRM vers AST vers GLSL

FractalPark ne colle jamais le texte source dans un shader. La source v1 canonique passe par son analyseur typé et son backend CPU/GLSL ; la source de l’Éditeur Classic passe par son analyseur lexical, son frontal d’entrée sélectionnée, son modèle de formule canonique et son compilateur de plugins.

  1. 1

    Source FRM

    Le texte exact provenant de l'éditeur, d'un collage ou d'un fichier local est l'entrée faisant autorité.

  2. 2

    Jetons du lexer

    Le lexer reconnaît les noms, les nombres, les opérateurs, les marqueurs de section, les commentaires et les directives tout en conservant les emplacements source.

  3. 3

    AST analysé

    L'analyseur construit un arbre de formule structuré et signale les déclarations, expressions et blocs de flux de contrôle mal formés.

  4. 4

    Validation et forme canonique

    Le validateur vérifie les noms, les types, les sections et la sémantique prise en charge avant qu'une formule canonique soit créée.

  5. 5

    GLSL et carte de source

    La génération de code émet des fonctions de shader et enregistre les correspondances du GLSL généré vers la source FRM.

  6. 6

    Plugin de formule

    Une compilation réussie devient le même contrat de plugin de formule utilisé par le moteur de rendu et le système d'assemblage de shaders.

Chaque contrat de source possède son propre parcours d’implémentation. L’exécution Standard publiée utilise FRM-like v1 ; l’Éditeur autonome et les exemples actuels de formules personnalisées utilisent le parcours compatible Classic. Aucun ne bascule silencieusement vers l’autre.

06

Tutoriels progressifs

Ce sont des exemples de l’Éditeur compatibles Classic, pas des Definitions FRM-like v1 canoniques. Ils progressent d’une petite formule quadratique aux paramètres et à une rétroaction avec état ; chaque bloc source vient du registre partagé de l’Éditeur et compile pendant les tests.

Leçon 1

Mandelbrot de départ

La plus petite formule à temps d'échappement, idéale pour apprendre d'abord la structure init / boucle / sortie.

Objectif : la déclaration et la structure init / loop / bailout. Ne modifie l'exposant ou le seuil d'échappement qu'une fois cette version compilée.

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

Leçon 2

Dérive de paramètres

Montre les emplacements de paramètres p1 / p2 et la différence entre cabs et |z|.

Objectif : les emplacements de paramètres p1 et p2, un littéral complexe et cabs(z) comme fonction de magnitude explicite.

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

Leçon 3

Écho d'orbite

Utilise zPrev comme mémoire de rétroaction et se marie bien avec la colorisation orbitEcho pour les enveloppes d'orbite.

Objectif : zPrev comme état d'orbite précédent. La rétroaction ajoute de la mémoire sans introduire une seconde variable d'état gérée manuellement.

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

L’Éditeur FRM autonome ouvre ces exemples compatibles Classic, vérifiés à la compilation, par ID stable. La source de formule reste dans l’onglet actuel jusqu’à ce que tu l’enregistres dans ta bibliothèque cloud et n’est jamais incorporée à l’URL. Cela n’active ni l’importation ni les writers v1 canoniques.

07

Erreurs et diagnostics

La compilation s'arrête au premier stade non sûr et signale des messages orientés source. Une construction rejetée n'est jamais réécrite en quelque chose qui lui ressemble simplement.

Erreurs lexicales

Les caractères inattendus et les identifiants non pris en charge sont signalés avec leur ligne et leur colonne.

Erreurs d'analyse

Les sections, expressions ou blocs de flux de contrôle mal formés sont diagnostiqués avant la validation sémantique.

Erreurs de validation

Les variables inconnues, les affectations invalides, les incompatibilités de types et la sémantique non prise en charge empêchent la génération de code.

Mappage de source du shader

Le GLSL généré conserve des correspondances qui peuvent ramener un échec de compilation du shader à l'emplacement FRM d'origine.

Lorsque tu corriges une erreur, commence par le premier message signalé : les diagnostics suivants peuvent être les conséquences du même jeton manquant ou de la même expression invalide.

08

Partage et publication

Une formule que tu écris est privée jusqu'à ce que tu choisisses autrement. Il existe trois façons de la faire circuler — chacune explicite, aucune silencieuse.

  • Privé par défaut

    Les formules vivent dans ta bibliothèque cloud, visibles uniquement par toi. Les œuvres que tu enregistres contiennent une copie de la source de la formule dans le brouillon, afin qu'elles s'ouvrent toujours telles que tu les as laissées.

  • Télécharger le fichier .frm

    Ta formule est du texte brut. Télécharge-la depuis Mes formules à tout moment et conserve ta propre copie — aucune demande d'export, aucune attente.

  • Publier une œuvre, partager la source

    Publier une œuvre qui utilise ta formule rend la source de la formule publique sous licence MIT : chacun peut la lire, la copier et s'en inspirer. La page communautaire affiche le nom de la formule d'après ses métadonnées et propose la source en téléchargement. Cela ne peut pas être annulé pour cette publication.

Le texte intégral de la licence MIT se trouve sur opensource.org.

09

Exemples, prochaines étapes et références

Voir le moteur de rendu en contexte

Ouvre l'Explorateur pour comparer le comportement des formules intégrées, la colorisation, les transformations, l'animation et les contrôles d'export avant d'écrire une formule personnalisée.

Ouvrir l'Explorateur

Utilise l’Éditeur FRM dédié pour le flux actuel de compilation, aperçu, importation et téléchargement compatibles Classic. Il n’accepte pas la source FRM-like v1 canonique ; examine la source v1 publiée depuis un Formula Record et utilise l’action Open ou Remix de ce Record pour l’exécuter.

Références

Le contexte historique et les détails d'implémentation sont liés séparément afin que le guide puisse distinguer la lignée Fractint du contrat de compilateur actuel de FractalPark.