FractalPark
FRM 언어와 호환성

FractalPark에서 FRM 이해하기

정식 FRM-like v1 Definition이 공개된 Standard 수식을 구동하는 방식을 배운 뒤, 두 소스 계약을 혼동하지 않고 별도의 Classic-compatible Editor 예제를 사용하세요.

01

FRM이란 무엇인가요?

FractalPark FRM-like v1은 공개된 Standard Definition의 기반이 되는 정식 타입 소스 언어예요. Definition은 언어, 표준 라이브러리, NumericProfile, 매개변수, 초기 상태, 반복 궤도 단계, 반복 계속 조건을 고정해요.

Classic .frm은 Fractint 생태계에서 발전했으며 Classic-compatible 독립형 Editor와 가져오기 파이프라인이 사용하는 소스 계약으로 남아 있어요. FractalPark은 그 방언을 별도로 스캔하고 진단해요. Classic 소스와 frmSemanticsVersion 1 또는 2는 정식 FRM-like v1의 다른 표기가 아니에요.

더 넓은 프로젝트의 기원과 역사에 대해서는 다음을 참조하세요: Fractint 프로젝트 사이트.

02

FractalPark의 FRM 지원

이 호환성 표는 Classic-compatible Editor와 가져오기 경로를 설명해요. 정식으로 공개된 Standard Definition은 별도로 버전이 지정된 FRM-like v1 파서, 타입 IR, standard32 백엔드, 고정된 Safety Envelope를 사용해요.

수준의미검증된 범위
지원됨컴파일러 테스트로 검증되며 의미론적 제약 없이 사용할 수 있어요.
  • 소스 문서당 수식 선언 하나
  • init, loop, bailout 섹션
  • 할당 및 사용자 변수
  • 실수·복소수 리터럴; 산술, 비교, 논리, 단항, 크기(magnitude) 표현식
  • if / elseif / else / endif 분기
  • z, c, pixel, zPrev, p1–p5, 상수, 검증된 내장 함수
  • FRM 주석
  • 구조화된 진단 및 FRM-to-GLSL 소스 매핑
변형 지원문서화된 의미론적 차이를 두고, 또는 FractalPark 확장으로 수용돼요.
  • ismand는 FractalPark의 현재 만델브로/줄리아 런타임 모드에 매핑돼요
  • fn1–fn4는 컴파일 타임 함수 디스패치를 사용해요
  • @mode: native, @default-view, @default-coloring은 FractalPark 확장이며, 기본값 지시어는 네이티브 모드에서만 적용돼요
지원 안 됨현재 컴파일러나 파일 워크플로우가 보존하지 못해요. 조용히 다시 쓰는 대신 거부돼요.
  • 한 파일의 여러 수식 중 선택
  • 클래식 Fractint 방언의 자동 변환
  • 임의의 소스 지시어
  • 비-ASCII 식별자
  • 사용자 정의 함수 또는 매크로
  • 전처리기 기능
  • 현재 컴파일 파이프라인이 거부하는 모든 구성

이는 검증된 Classic 호환성 기준선이며, 완전한 Fractint 호환성을 주장하는 것은 아니에요. Standard 공개 원장과는 별개예요.

검증된 호환성

이 Classic 가져오기 기능 수는 버전이 지정된 호환성 매니페스트에서 왔어요. 대상 항목 588개는 strict-v2 통과 579개와 문서화된 면제 9개로 구성되고, 별도 항목 117개는 안정적인 사유로 제외돼요. 이 수에는 공개된 FRM-like v1 Definition이 포함되지 않아요.

대상 항목
588
strict-v2 통과
579
문서화된 면제
9
사유와 함께 제외됨
117
bailout 디스크립터 종류
4
내장 함수
20

bailout 디스크립터

  • C1
  • C2
  • C4R
  • C5

안정적 거부 사유

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

내장 함수

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

매개변수: p1, p2, p3, p4, p5 · 함수 슬롯: fn1, fn2, fn3, fn4

기능 매니페스트 v1 · 엄격한 의미론 v2

03

수식 구조

정식 FRM-like v1과 현재 Classic Editor 예제는 이름 있는 수식 및 init, loop, bailout 개념을 공유하지만, 완전한 문법은 달라요. v1에서는 의미론 지시문과 선택적 타입 매개변수 섹션도 Definition의 일부예요.

01

init:

픽셀당 한 번 실행돼요. 초기 오빗 값과 보조 변수를 여기서 설정하세요.

02

loop:

반복마다 한 번 실행돼요. z와 다음 반복에 필요한 상태를 업데이트하세요.

03

bailout:

오빗을 계속할 조건을 반환해요. 조건이 거짓이 되면 그 점은 이탈한 거예요.

섹션 이름은 주석이 아닌 구조적 요소예요: 빠뜨리거나 잘못 쓰면 진단이 생성돼요.

04

문법 가이드

두 표면 모두 의도적으로 작게 유지돼요. 아래 요약은 공유 개념이며, 정식 지시문과 타입 매개변수는 공개된 Formula Record의 Source 동작을 사용하고 Classic 소스에는 Editor 진단을 사용하세요.

선언과 섹션
이름 있는 수식 하나를 중괄호로 감싼 다음 init:, loop:, bailout: 순서로 작성하세요.
값과 변수
0.15 같은 실수, (0.05, -0.02) 같은 복소수 쌍, 내장 오빗 값, 또는 직접 할당한 변수를 사용하세요.
표현식
산술, 거듭제곱, 비교, 논리 연산자, 단항 연산자, |z| 크기 문법, 검증된 복소 함수를 조합할 수 있어요.
제어 흐름
오빗 업데이트가 조건에 따라 달라질 때 if, elseif, else, endif를 사용하세요. 블록은 균형을 맞춰야 해요.
내장 요소
핵심 이름에는 z, c, pixel, zPrev, p1–p5, pi, e, maxit, ismand, fn1–fn4와 컴파일러 테스트가 검증한 함수들이 포함돼요.
주석과 지시어
세미콜론 주석은 소스를 문서화해요. 인식된 @ 지시어는 FractalPark 네이티브 동작을 설정하며, 알 수 없는 지시어는 조용히 무시되지 않아요.
05

FRM → AST → GLSL 파이프라인

FractalPark은 소스 텍스트를 셰이더에 그대로 붙여넣지 않아요. 정식 v1 소스는 타입 파서와 CPU/GLSL 백엔드를 거치고, Classic Editor 소스는 스캐너, 선택 항목 프런트엔드, 정식 수식 모델, 플러그인 컴파일러를 거쳐요.

  1. 1

    FRM 소스

    에디터, 붙여넣기, 또는 로컬 파일의 정확한 텍스트가 권위 있는 입력이에요.

  2. 2

    렉서 토큰

    렉서는 이름, 숫자, 연산자, 섹션 표시자, 주석, 지시어를 소스 위치와 함께 인식해요.

  3. 3

    파싱된 AST

    파서는 구조화된 수식 트리를 만들고 잘못된 선언, 표현식, 제어 흐름 블록을 보고해요.

  4. 4

    검증과 표준 형식

    검증기는 표준 수식이 생성되기 전에 이름, 타입, 섹션, 지원되는 의미론을 확인해요.

  5. 5

    GLSL과 소스 맵

    코드 생성은 셰이더 함수를 출력하고 생성된 GLSL에서 FRM 소스로의 매핑을 기록해요.

  6. 6

    수식 플러그인

    컴파일이 성공하면 렌더러와 셰이더 조립 시스템이 사용하는 동일한 수식 플러그인 계약이 돼요.

각 소스 계약에는 각각 하나의 구현 경로가 있어요. 공개된 Standard 런타임은 FRM-like v1을 사용하고, 독립형 Editor와 현재 사용자 수식 예제는 Classic-compatible 경로를 사용해요. 어느 쪽도 다른 쪽으로 조용히 대체되지 않아요.

06

단계별 튜토리얼

이 예제들은 정식 FRM-like v1 Definition이 아니라 Classic-compatible Editor 예제예요. 작은 이차 수식에서 매개변수와 상태 기반 피드백으로 진행하며, 모든 소스 블록은 공유 Editor 레지스트리에서 오고 테스트 중 컴파일돼요.

레슨 1

스타터 만델브로

가장 작은 이탈 시간(escape-time) 수식으로, init / loop / bailout 구조를 먼저 배우기에 좋아요.

초점: 선언과 init / loop / bailout 구조. 이 버전이 컴파일된 후에만 지수나 이탈 임계값을 변경하세요.

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

레슨 2

파라미터 드리프트

p1 / p2 파라미터 슬롯과 cabs와 |z|의 차이를 보여줘요.

초점: p1과 p2 파라미터 슬롯, 복소수 리터럴, 명시적 크기 함수로서의 cabs(z).

parameter-drift.frm
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. 피드백은 수동으로 관리하는 두 번째 상태 변수를 도입하지 않고 메모리를 추가해요.

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

독립형 FRM Editor는 안정적인 ID로 이 Classic-compatible 컴파일 검사 예제를 열어요. 수식 소스는 클라우드 라이브러리에 저장할 때까지 현재 탭에만 남고 URL에 포함되지 않아요. 이것은 정식 v1 가져오기나 작성기를 활성화하지 않아요.

07

오류와 진단

컴파일은 가장 이른 안전하지 않은 단계에서 멈추고 소스 중심 메시지를 보고해요. 거부된 구성은 비슷해 보이는 것으로 다시 쓰여지지 않아요.

어휘 오류

예상치 못한 문자와 지원되지 않는 식별자는 행과 열과 함께 보고돼요.

파싱 오류

잘못된 섹션, 표현식, 제어 흐름 블록은 의미론적 검증 전에 진단돼요.

검증 오류

알 수 없는 변수, 잘못된 할당, 타입 불일치, 지원되지 않는 의미론은 코드 생성을 차단해요.

셰이더 소스 매핑

생성된 GLSL은 셰이더 컴파일 실패를 원래 FRM 위치로 가리킬 수 있는 매핑을 유지해요.

오류를 고칠 때는 첫 번째 보고 메시지부터 시작하세요: 이후의 진단은 동일한 누락 토큰이나 잘못된 표현식의 결과일 수 있어요.

08

공유와 게시

작성한 수식은 직접 선택하기 전까지 비공개예요. 수식이 이동할 수 있는 방법은 세 가지이며, 각각 명시적이고 어떤 것도 조용히 이루어지지 않아요.

  • 기본적으로 비공개

    수식은 클라우드 라이브러리에 있으며 나만 볼 수 있어요. 저장한 작품은 초안 안에 수식 소스 사본을 담고 있어서, 항상 마지막으로 둔 상태 그대로 열려요.

  • .frm 파일 다운로드

    수식은 일반 텍스트예요. 내 수식에서 언제든 다운로드하여 직접 사본을 보관하세요 — 내보내기 요청도, 대기도 필요 없어요.

  • 작품을 게시하고 소스 공유하기

    내 수식을 사용하는 작품을 게시하면 수식 소스가 MIT 라이선스로 공개돼요: 누구나 읽고, 복사하고, 그 위에 만들 수 있어요. 커뮤니티 페이지에는 메타데이터의 수식 이름이 표시되고 소스를 다운로드할 수 있어요. 해당 게시에 대해서는 되돌릴 수 없어요.

전체 MIT 라이선스 전문은 opensource.org에 있어요.

09

예제, 다음 단계, 참고 자료

렌더러를 실제 맥락에서 보기

커스텀 수식을 작성하기 전에 탐색기를 열어 내장 수식의 동작, 컬러링, 변환, 애니메이션, 내보내기 컨트롤을 비교해 보세요.

탐색기 열기

현재 Classic-compatible 컴파일, 미리보기, 가져오기, 다운로드 워크플로에는 전용 FRM Editor를 사용하세요. 이 Editor는 정식 FRM-like v1 소스를 받지 않아요. 공개된 v1 소스는 Formula Record에서 확인하고 해당 Record의 Open 또는 Remix 동작으로 실행하세요.

참고 자료

역사적 맥락과 구현 세부 사항은 별도로 링크되어, 가이드가 Fractint 계보와 FractalPark의 현재 컴파일러 계약을 구분할 수 있어요.