Skip to main content

Command Palette

Search for a command to run...

swc 설계 철학

Updated
2 min read

누가 깃허브 디스커션으로 swc의 html 모듈이 general purpose인지와 설계 철학이 무엇인지 물어봤는데, 답변한 김에 블로그에도 정리해두기로 했다.

https://github.com/swc-project/swc/discussions/7695

이는 html 모듈에만 적용되는 게 아니고, swc 전체에 적용되는 설계 철학이다. 내가 중요시하는 건 순서대로

  1. 정확성 (표준 준수)
  2. 빠른 스펙 업데이트
  3. 범용성
  4. 쉬운 사용성

이디. 순서대로 설명하겠다.

설계 철학

1. 정확성

swc는 컴파일러고, 나는 모든 컴파일러는 표준을 최우선으로 따라야한다고 생각한다.

그래서 bun을 굉장히 싫어한다. 원래 좋은 시도라고 보고 있었는데, 표준화 과정을 거치지 않고 jsx 문법을 건드려서 극혐하게 됐다.

2. 빠른 스펙 업데이트

swc는 차세대 문법을 바로 사용할 수 있게 해주는 게 목적인 프로젝트이다. 그런만큼 스펙이 업데이트 되었을 때 바로바로 반영하는 게 중요하다고 생각한다. 물론 자원이 그리 풍부하지 않기에 한계가 있지만 말이다.

3. 범용성

swc의 모든 AST 정의는 범용이다. swc 프로젝트만을 위한 필드가 단 하나도 없다. 나도 swc를 다 직접 구현하기 전에 적당히 라이브러리 써서 날로 먹고 싶었는데, 범용 라이브러리가 하나도 없어서 결국 다 새로 구현해야했다. 남들은 같은 고생 안 했으면 좋겠어서 swc는 범용 라이브러리로 만들었다.

esbuild 같은 경우 파서에서 최신 문법을 옛날 문법으로 바꿔버리고, 타입스크립트 타입을 날린다. 그렇게 구현하면 매우 빠르다는 건 나도 안다. 근데 그래버리면 트랜스파일링을 사용할 수 있는 시점이 제한되고, 타입스크립트 타입 정보를 가져올 방법이 없다. 그래서 성능을 어느 정도 포기했다.

4. 쉬운 사용성

지나치게 쉬운 API는 성능 저하를 가져온다. 하지만 나는 CowRcStr 같은 걸 원하지 않았다. 러스트는 충분히 어려운 언어고 swc는 처음부터 범용 러스트 라이브러리로 설계되었기에 API 난이도 역시 고려사항이었다. 그래서 swc의 AST에는 라이프타임이 없다. 당연히 성능은 좀 떨어지지만, 라이프타임이 들어가기 시작하면 모듈로 가져가서 쓰기 훨씬 어려웠을 것이다.

P.S.

의외로 성능은 설계할 때 그다지 중요시하지 않았다. 솔직히 러스트로 짜면 그냥 빠르다. 구현이 더럽게 어려워서 문제일 뿐이다.

More from this blog

한국의 학벌에 대한 생각

내 블로그의 제목이 kdy1: The way I think 인만큼 앞으로는 내 생각을 더 자주 올리려고 한다. 한국 기준으로, 학벌은 사람을 볼 때 꽤나 유용한 지표이지만, 절대적이지는 않다. 경험적인 얘기일 뿐이지만, 성균관대학교 자퇴생으로서 느낀 것들이 몇 가지 있다. 대학까지 간 사람의 학벌은 학습 능력 x 성실함 에 대체로 비례한다. 그래서 의미가

Apr 3, 20261 min read

인간 지능에 대한 메모장

최종 업데이트: 2026/03/15 지능의 유전 현재 인류 기준으로, 고지능자는 고지능 유전자가 많이 겹친 사람이다. 지능의 유전엔 X 염색체가 매우 중요한 역할을 한다. 그리고 이게 남자와 여자의 지능 분포 차이를 만든다. 극상위권에 여자가 거의 없는 이유가 이것이다. 고지능 X 염색체가 여자한테서 발현되려면 2개가 있어야 한다. 이는 인간의 생

Mar 15, 20262 min read

Ai 코딩 팁 2 (한국어)

발표 자료: https://gamma.app/docs/AI--2a52e7tk3eb1ch1 AI 활용법 관련해서 간단하게 발표를 했다. 발표 자료 앞쪽은 전에 블로그에 올린 글이랑 같은 내용이다. 이 글에서는 기존 글에서 다루지 않은 내용들을 다루겠다. 에러 메시지 및 로깅 구체적 타입 및 스키마 활용 any 타입은 사람에게도 위험하지만, AI에게는 더 위험하다. 마찬가지로, JSON.parse처럼 아무 제약 없는 파싱 느슨한 인터페이스 ...

Jan 30, 20265 min read

kdy1: The way I think

233 posts