Factor 0.102 now available
Factor 0.102 출시
스택 기반 언어 Factor 0.102가 1,068개 커밋을 포함해 출시됐습니다. ARM64 네이티브 지원과 Linux용 GTK4 기본 백엔드, RISC-V 포트가 추가됐으며 컴파일러와 VM, 라이브러리의 기능과 안정성도 폭넓게 개선됐습니다.
- 주제
에디터 노트
ARM64 지원은 발표의 범위와 실제 배포물을 구분해서 읽어야 합니다. 릴리스 표에는 macOS ARM64 바이너리만 나오고 Linux와 Windows ARM64 바이너리는 없습니다. 반면 본문은 세 운영체제의 네이티브 지원을 강조합니다. 댓글의 jbe_는 Linux에서 직접 빌드해 사용했다고 전하지만, Windows에 대해서는 추정이라고 밝혔습니다. 따라서 이 릴리스가 ARM64를 지원한다는 사실과 각 플랫폼에서 바로 받을 바이너리가 있는지는 별개의 정보입니다. 이번 버전의 변화는 플랫폼 지원에 그치지 않습니다. 새 레지스터 할당기와 여러 최적화는 실험적이거나 기본 비활성 상태이고, SQLite WAL 및 트랜잭션 동작처럼 기존 프로그램의 운영 방식에 영향을 주는 변경도 포함합니다. 방대한 릴리스 노트는 기능 추가와 호환성 변경을 함께 담았으므로, Factor를 쓰는 프로젝트라면 지원 아키텍처와 기본값 변경을 확인한 뒤 업그레이드 범위를 정하는 편이 실질적입니다.
AI 요약
Factor 0.102가 출시됐습니다. 이번 버전에는 14명의 기여자가 참여한 1,068개 커밋이 들어갔습니다. ARM64 네이티브 지원을 macOS, Linux, Windows로 확대했고, 64비트 Linux의 기본 UI 백엔드를 GTK4로 바꿨습니다. 32비트 Linux는 GTK3를 계속 사용합니다. RISC-V Linux용 RV32GC와 RV64GC 포트도 추가했으며 두 포트는 최적화 컴파일러 백엔드와 외부 함수 호출을 지원합니다. C++ VM과 Zig VM 모두에서 사용할 수 있습니다.
플랫폼과 UI
Windows 텍스트 렌더링은 기본적으로 DirectWrite를 사용합니다. 컬러 글리프와 타이포그래피 제어를 지원하고, 큰 텍스트와 복잡한 문자 스크립트 렌더링을 개선했습니다. 여러 플랫폼에서 긴 텍스트의 렌더링과 선택 동작을 다듬었고, 디스플레이 배율과 스크롤, 인접한 텍스트 배경 처리도 수정했습니다. Linux에서는 GTK4 파일 대화상자와 입력 처리를 추가했습니다. 프로세스 실행을 빠르게 하고 Linux의 pidfd, BSD의 kqueue, Windows의 완료 패킷 등을 이용해 프로세스 종료 알림을 받습니다. 지원되지 않는 경우 폴링으로 대체합니다.
컴파일러와 VM
스택 효과 추론과 오류 보고를 개선하고, 매크로 확장과 중첩 컴파일 뒤 의존성 추적 및 재컴파일 오류를 수정했습니다. ARM64 코드 생성과 외부 함수 호출을 보완했으며 RISC-V 호출과 콜백도 지원합니다. 가비지 컬렉션 루트와 파생 포인터 추적을 보강하고 코드 힙, 스택 프레임, 객체 초기화 등에 경계 검사를 추가했습니다.
선형 스캔은 기본 레지스터 할당기로 유지합니다. 백트래킹, 그래프 색칠 기반 chordal, greedy 할당기는 실험 기능으로 추가했습니다. 전역 값 번호 매기기, 상수 재생성, 루프 불변 코드 이동, 슬롯 로드 재사용, SIMD 벡터화도 선택적 최적화로 들어갔으며 기본값은 비활성화입니다. 컴파일러 단계별 측정 도구와 SSA, 레지스터 할당, GC 루트 검사기도 추가했습니다. Zig VM은 GC 루트와 메모리 경계, JIT 오류 정리 등에서 C++ VM과의 동작 차이를 줄였고 32비트 포터빌리티도 개선했습니다.
라이브러리와 호환성
Unicode 데이터는 18.0.0, 시간대 데이터는 2026c로 갱신했습니다. SQLite 바인딩은 3.53.4, Raylib은 6.0, Lua는 5.5에 맞췄습니다. gzip 응답은 문자 디코딩 전에 압축을 해제하며, 지원하지 않는 콘텐츠 인코딩은 거부합니다. HTTP 파서와 TLS 인증서 신원 확인, 협력적 대기, 자원 정리, 시그널 처리에도 수정이 들어갔습니다. ChaCha20과 Poly1305, raw DEFLATE, 이름 및 번호 기반 정규식 캡처, 셸 인자 파서 등의 라이브러리도 추가했습니다.
호환성 변경도 있습니다. 64비트 Linux에서 GTK3를 쓰려면 부트스트랩 시 -ui-backend=gtk3를 지정해야 합니다. callable은 이제 quotation을 포함하는 믹스인이고, 시퀀스 프로토콜을 전제로 한 코드는 quotation-like를 사용해야 합니다. PEG 반복 및 리스트 파서는 숨김 값을 결과에서 제외합니다. SQLite 연결은 영속 WAL 모드를 사용하며 로컬 파일시스템이 필요합니다. with-transaction은 읽기 전용 작업에서도 시작 시 쓰기 잠금을 얻고, 같은 프로세스 안의 쓰기는 직렬화합니다.
Lobsters 반응
- @toastal — 제가 제기한 shebang 버그가 빠져 있어 조금 아쉽네요.
- @mrjbq7 — 어떤 shebang 버그인가요? 제가 놓쳤나요?
- @incanus — OS와 아키텍처 표에는 macOS만 ARM64로 표시되어 있는데, 첫 번째 항목에는 macOS, Linux, Windows에서 ARM64를 네이티브로 지원한다고 되어 있네요.
- @toastal — Linux용 바이너리는 아직 없지만 직접 빌드하는 지원은 준비됐다는 뜻이길 바랍니다. 나중에 확인해 보려고 합니다. 내일 Nixpkgs 리뷰를 돕는 일도 알아보겠습니다.
- @jbe_ — 네, 직접 ARM64용으로 빌드할 수 있습니다. 적어도 Linux에서는 Asahi에서 몇 달 전부터 작동했습니다. Windows도 같을 거라고 봅니다. Factor 정식 릴리스가 나온 지 오래됐다고 며칠 전 생각했는데 시점이 재미있네요.
원문: Factor 블로그 / 번역·요약: Trawling