init:
Выполняется один раз для пикселя. Здесь задайте начальное значение орбиты и вспомогательные переменные.
Узнайте, как канонические Definition FRM-like v1 обеспечивают опубликованные формулы Standard, а затем используйте отдельные примеры Editor, совместимые с Classic, не смешивая два контракта исходного кода.
FractalPark FRM-like v1 — канонический типизированный язык исходного кода для опубликованных Standard Definition. Definition закрепляет язык, стандартную библиотеку, NumericProfile, параметры, начальное состояние, повторяющийся шаг орбиты и предикат продолжения итерации.
Classic .frm вырос из экосистемы Fractint и остаётся контрактом исходного кода для отдельного Editor, совместимого с Classic, и конвейера import. FractalPark отдельно сканирует и диагностирует этот диалект; исходный код Classic и frmSemanticsVersion 1 или 2 не являются альтернативной записью канонического FRM-like v1.
Об истоках и истории более широкого проекта см. сайт проекта Fractint.
Эта таблица совместимости описывает Editor и путь import, совместимые с Classic. Канонические опубликованные Standard Definition используют отдельно версионируемые parser FRM-like v1, типизированный IR, backend standard32 и фиксированную Safety Envelope.
| Уровень | Значение | Проверенный охват |
|---|---|---|
| Поддерживается | Покрыто тестами компилятора и пригодно к использованию без семантических оговорок. |
|
| Адаптировано | Принимается с документированным семантическим отличием или как расширение FractalPark. |
|
| Не поддерживается | Не сохраняется текущим компилятором или файловым рабочим процессом; отклоняется, а не молча переписывается. |
|
Это проверенная базовая совместимость Classic, а не заявление о полной совместимости с Fractint. Её следует отличать от реестра публикаций Standard.
Эти показатели возможностей Classic-import взяты из версионированного манифеста совместимости: 588 целевых записей состоят из 579 прохождений strict-v2 и 9 документированных исключений; 117 отдельных записей исключены по стабильным причинам. В эти числа не входят опубликованные Definition FRM-like v1.
Параметры: p1, p2, p3, p4, p5 · Слоты функций: fn1, fn2, fn3, fn4
Манифест возможностей v1 · Строгая семантика v2
Канонический FRM-like v1 и текущие примеры Classic Editor разделяют именованную формулу и идеи init, loop и bailout, но их полные грамматики различаются. В v1 семантические директивы и необязательный типизированный раздел parameters также являются частью Definition.
Выполняется один раз для пикселя. Здесь задайте начальное значение орбиты и вспомогательные переменные.
Выполняется один раз за итерацию. Обновите z и любое состояние, необходимое следующей итерации.
Возвращает условие продолжения орбиты. Когда оно становится ложным, точка вышла за пределы.
Названия секций структурны, а не являются комментариями: пропуск или опечатка в них приводит к диагностическому сообщению.
Обе поверхности намеренно остаются небольшими. Приведённые ниже сводки описывают общие понятия; для канонических директив и типизированных параметров используйте действие Source опубликованного Formula Record, а для исходного кода Classic — диагностику Editor.
FractalPark никогда не вставляет исходный текст в шейдер. Канонический исходный код v1 проходит через типизированный parser и backend CPU/GLSL; исходный код Classic Editor проходит через scanner, frontend выбранной записи, каноническую модель формулы и plugin compiler.
Точный текст из редактора, вставки или локального файла является авторитетными входными данными.
Лексер распознаёт имена, числа, операторы, маркеры секций, комментарии и директивы, сохраняя позиции в исходном коде.
Парсер строит структурированное дерево формулы и сообщает о некорректных объявлениях, выражениях и блоках управления.
Валидатор проверяет имена, типы, секции и поддерживаемую семантику перед созданием канонической формулы.
Генерация кода создаёт шейдерные функции и фиксирует сопоставления сгенерированного GLSL с исходным кодом FRM.
Успешная компиляция превращается в тот же контракт плагина формулы, который используют рендерер и система сборки шейдеров.
У каждого контракта исходного кода есть собственный путь реализации. Опубликованная среда выполнения Standard использует FRM-like v1; отдельный Editor и текущие примеры пользовательских формул используют путь, совместимый с Classic. Ни один из них не переключается на другой незаметно.
Это примеры Editor, совместимые с Classic, а не канонические Definition FRM-like v1. Они переходят от небольшой квадратичной формулы к параметрам и обратной связи с состоянием; каждый блок исходного кода взят из общего реестра Editor и компилируется во время тестов.
Урок 1
Простейшая формула времени убегания — удобна для первого знакомства со структурой init / loop / bailout.
В центре внимания: объявление и структура init / loop / bailout. Меняйте показатель степени или порог убегания только после того, как эта версия скомпилируется.
StarterBrot {
init:
z = 0
loop:
z = z^2 + c
bailout:
|z| < 4
}Урок 2
Демонстрирует слоты параметров p1 / p2 и разницу между cabs и |z|.
В центре внимания: слоты параметров p1 и p2, комплексный литерал и cabs(z) как явная функция величины.
ParameterDrift {
init:
z = 0
loop:
z = z^2 + c + p1 * 0.15 + p2 * (0.05, -0.02)
bailout:
cabs(z) < 8
}Урок 3
Использует zPrev как память обратной связи и хорошо сочетается с раскраской orbitEcho для огибающих орбиты.
В центре внимания: zPrev как предыдущее состояние орбиты. Обратная связь добавляет память без введения второй вручную управляемой переменной состояния.
OrbitEcho {
init:
z = pixel
loop:
z = sqr(z) + zPrev * (0.30, -0.12) + pixel * (0.85, 0.0)
bailout:
|z| < 48
}Отдельный FRM Editor открывает эти примеры, совместимые с Classic и проверенные компиляцией, по стабильному ID. Исходный код формулы остаётся на текущей вкладке, пока вы не сохраните его в облачной библиотеке, и никогда не встраивается в URL. Это не активирует import или writers канонического v1.
Компиляция останавливается на самой ранней небезопасной стадии и сообщает сообщения, привязанные к исходному коду. Отклонённая конструкция никогда не переписывается во что-то лишь похожее.
Неожиданные символы и неподдерживаемые идентификаторы сообщаются с указанием строки и столбца.
Некорректные секции, выражения или блоки управления диагностируются до семантической проверки.
Неизвестные переменные, недопустимые присваивания, несоответствие типов и неподдерживаемая семантика не позволяют генерировать код.
Сгенерированный GLSL сохраняет сопоставления, позволяющие связать сбой компиляции шейдера с исходной позицией FRM.
Исправляя ошибку, начните с первого сообщения: более поздняя диагностика может быть следствием того же отсутствующего токена или недопустимого выражения.
Написанная вами формула приватна, пока вы не решите иначе. Есть три способа её распространения — каждый явный, ни один не молчаливый.
Приватно по умолчанию
Формулы хранятся в вашей облачной библиотеке и видны только вам. Сохранённые работы содержат копию исходного кода формулы внутри черновика, поэтому они всегда открываются в том виде, в котором вы их оставили.
Скачайте файл .frm
Ваша формула — это обычный текст. Скачайте её из раздела «Мои формулы» в любое время и храните собственную копию — без запросов на экспорт и ожидания.
Опубликуйте работу, поделитесь исходным кодом
Публикация работы, использующей вашу формулу, делает исходный код формулы общедоступным по лицензии MIT: любой может читать, копировать и развивать его. Страница сообщества показывает имя формулы из её метаданных и предлагает исходный код для скачивания. Для этой публикации действие необратимо.
Полный текст лицензии MIT находится на opensource.org.
Откройте Обзор, чтобы сравнить поведение встроенных формул, раскраску, трансформации, анимацию и элементы управления экспортом, прежде чем писать собственную формулу.
Открыть ОбзорИспользуйте специальный FRM Editor для текущего рабочего процесса компиляции, предпросмотра, импорта и загрузки, совместимого с Classic. Он не принимает канонический исходный код FRM-like v1; изучайте опубликованный исходный код v1 через Formula Record и используйте действия Open или Remix этого Record, чтобы его запустить.
Исторический контекст и детали реализации указаны отдельными ссылками, чтобы руководство могло отличать наследие Fractint от текущего контракта компилятора FractalPark.