원문 캡처 · jointhefreeworld.org
원문 캡처 · jointhefreeworld.org

Guile 라이브러리 OrgWebAlchemy가 Org 문서를 HTML, Markdown, SXML로 변환하는 기능을 넓히고 파서를 최적화했다. 프로젝트 측 측정에서 58KB 문서의 파싱 시간은 32.2ms에서 5.07ms로 줄었고, 할당량은 30.3MB에서 3.89MB로 감소했다.

개선은 문법의 빠른 경로를 정리하고, 구분 문자까지의 텍스트를 한 번에 읽는 스캐너를 도입한 뒤, Guile의 문자열 병합 과정에서 확인한 제곱 시간 복잡도의 병목을 선형 처리로 바꾸는 방식으로 이뤄졌다. 80KB짜리 한 줄 문서의 파싱 시간은 8.18초에서 0.37ms로 줄었다. 프로젝트 측은 이 극단적인 사례보다 실제 문서에 가까운 README 측정값인 6.4배 향상을 대표 수치로 제시한다.

새로 지원하는 기능에는 Markdown 렌더러, 그림과 이름 있는 요소, 상호 참조, 빈 셀을 처리하는 표 판독, 서로 다른 종류가 섞인 중첩 목록이 포함된다. 다만 Org 전체를 구현한 것은 아니다. 표·소스 블록·인용 블록의 캡션, 중괄호 없는 위첨자와 아래첨자, Babel과 agenda, Org의 내보내기 기능은 지원하지 않으며, 문서에 나열된 일부 구문은 일반 텍스트로 남는다.

성능 측정은 Guile 3.0.9를 실행한 Ryzen 5 7640U 노트북에서 작업별로 다섯 차례 수행해 가장 빠른 값을 보고했다. 프로젝트 측은 벽시계 시간은 세션마다 10~20% 달라질 수 있다고 설명하며, 측정 결과가 다른 Org 구현과의 비교나 증분 파싱 성능을 보여주지는 않는다고 밝혔다.

정확성 검증에는 이전 파서와 새 파서의 결과를 비교하는 약 7만 건의 입력 테스트가 포함됐다. 별도로 약 39만 개 위치를 훑어 스캐너가 구문 시작 문자를 놓치지 않는지도 확인했다. 테스트 모음에는 155개 테스트 정의와 281개 단언이 있다. 라이브러리는 GNU LGPL 버전 3 이상으로 배포된다.

부록: 원문 예시

text
<img src="images/diagram.svg" alt="..." />