CGo 없는 순수 Go Tree-sitter, 90배 빠른 성능!

by DD
3개월 전
조회수 18

CGo 의존성 제거를 통해 크로스 컴파일(Cross-compilation) 및 빌드 파이프라인(Build Pipeline) 문제를 해결

90배 빠른 증분 편집(Incremental Editing) 성능으로 에디터(Editor) 및 언어 서버(Language Server) 환경 개선

Got이라는 프로젝트명(Project Name)이 OpenBSD의 Got과 혼동될 수 있다는 의견 제기

Git과의 호환성(Compatibility) 및 CRDT(Conflict-free Replicated Data Type) 기반 병합 방식에 대한 논의

CGo 없는 순수 Go 구현의 기술적 장점

gotreesitter는 CGo를 사용하지 않고 순수 Go로 Tree-sitter 런타임을 구현하여 크로스 컴파일(Cross-compilation) 및 빌드 환경의 제약에서 벗어났다. 특히, CGo 의존성으로 인한 CI 파이프라인(CI Pipeline) 복잡성 및 사용자 빌드 실패 문제를 해결했다. 또한, WASM(WebAssembly) 지원을 통해 다양한 환경에서 활용 가능성을 높였다.

성능 향상: 증분 편집 및 벤치마크 분석

gotreesitter는 증분 편집(Incremental Editing) 작업에서 CGo 기반 구현 대비 최대 90배 빠른 성능을 보이며, 에디터 및 언어 서버의 응답 속도를 개선했다. 벤치마크 결과에 따르면, 단일 바이트 수정 시 1.38μs, 수정 없는 경우 8.6ns의 처리 시간을 기록했다. 이러한 성능 향상은 Arena 할당자(Arena Allocator)커서 기반 서브트리 재사용(Cursor-based Subtree Reuse)과 같은 기술 덕분이다.

Tree-sitter 쿼리 API 및 지원 언어

gotreesitter는 Tree-sitter의 S-expression 쿼리 언어를 지원하며, 205개의 언어에 대한 문법을 제공한다. 쿼리 컴파일 및 실행, 커서 스트리밍, 구조적 수량자, 필드 매칭 등 다양한 기능을 지원한다. 다만, DFA-partial 언어의 경우 외부 스캐너(External Scanner) 미구현으로 인해 일부 토큰이 누락될 수 있다는 제한 사항(Limitation)이 존재한다.

Got 프로젝트명 관련 커뮤니티 논의

커뮤니티에서는 gotreesitter의 프로젝트명인 'Got'이 OpenBSD의 'Got'과 혼동될 수 있다는 의견이 제기되었다. 이는 프로젝트의 인지도 및 사용자 경험에 부정적인 영향을 미칠 수 있다. 이러한 이름 충돌(Name Collision) 가능성은 프로젝트의 마케팅 및 커뮤니티 활동에 영향을 줄 수 있으며, 잠재적 사용자들에게 혼란을 야기할 수 있다.

Show HN: I ported Tree-sitter to Go