Skip to main content

Command Palette

Search for a command to run...

플러그인 관련 삽질기

Updated
2 min read

귀찮으니 각각 간단하게 적겠다.

문제의 시작: rkyv 버그: Arc<"">

  • https://github.com/swc-project/swc/issues/5325

Arc<""> 를 직렬화했다가 비직렬화하면 이상한 값이 들어가있는 버그가 있었다. 리포트는 했는데 재현이 안 된다고 했다. 근데 이 직렬화 버그가 플러그인이 없는 경우에도 발생했다.

해결책: Atom 직렬화 커스터마이징

  • https://github.com/swc-project/swc/pull/5323

그래서 일단 두가지 패치를 했는데, 첫번째는 Arc<str>의 직렬화/비직렬화를 커스터마이징하는 것이고 두번째는 플러그인이 없는 경우 직렬화/비직렬화를 건너뛰게 하는 것이었다.


플러그인 삽질의 시작: m1 mac에서 heap_get_oob

  • https://github.com/swc-project/swc/issues/5406

위의 버그를 잡고 나서는 플러그인들이 어느 정도 동작했는데, m1 mac을 포함한 일부 플랫폼에서 heap_get_oob가 났다. 팀원분께서 bisect를 하신 결과, #5062에서 bytecheck을 추가하고 나서부터 그런 에러가 발생한다고 하셨다.

해결책: bytecheck 비활성화

  • https://github.com/swc-project/swc/pull/5414
  • https://github.com/swc-project/swc/pull/5437

그래서 일단 bytecheck를 비활성화했다.


새로운 문제: rkyv: unreachable!()

  • https://github.com/swc-project/plugins/issues/60
  • https://github.com/swc-project/plugins/issues/69

어이없게도 그랬더니 unreachable을 밟았다. 이것도 한참 디버깅했다.

해결책: rustc 다운그레이드

  • https://github.com/swc-project/swc/pull/5476

근데 이 문제는 내 실수였다. CI 스크립트가 rustc 버전 문제 때문에 깨졌길래 별 생각 없이 rustc의 버전을 올렸는데 그게 원인이었다. 아마 rkyv의 잘못된 코드가 최적화가 개선되면서 깨진 것 같다.


rkyv@0.7.39: 숫자를 날리다.

위 문제 해결하고 나서 테스트하다가 rkyv@0.7.39에서 직렬화/비직렬화를 하면 숫자가 다 날아간다는 걸 알게 됐다.

해결책: 다운그레이드

  • https://github.com/swc-project/swc/pull/5459
  • https://github.com/swc-project/plugins/pull/72

그래서 바로 rkyv 다운그레이드 했다.


rkyv@0.7.37: Serialize 구현 무시

duplicate shared pointer이라는 에러가 났다.

https://docs.rs/rkyv/0.7.37/src/rkyv/ser/serializers/alloc.rs.html

소스코드를 보니까 ArcRc 가 없으면 절대 날 수 없는 버그였고, 백트레이스 보면서 한참 디버깅하다가 이게 swc_ecma_ast::Program을 비직렬화할 때 생기는 문제라는 걸 알았다. 근데 ProgramArc/Rc 계열의 타입은 Atom 뿐이었다. rkyv 소스코드 보면서 디버깅하다보니까 내 구현 무시하고 Arc의 구현을 호출하고 있었다.

해결책: Archive 타입 직접 구현

  • https://github.com/swc-project/swc/pull/5479

그래서 Arc의 구현 대신 내 걸 쓰도록 패치했다.


segfault

희한하게 git이나 path로 의존하면 작동하고 배포된 swc_core을 이용하면 에러가 났다.

해결책: 배포된 swc_core 버전 사용

  • https://github.com/swc-project/swc/pull/5481
  • https://github.com/swc-project/swc/pull/5482

이 문제는 배포된 swc_core을 이용해서 npm의 @swc/core을 배포하니까 해결됐다.

?????

cargo 워크스페이스 버그였던 걸로 추정중이다.


많은 삽질을 한 덕분에 이젠 플러그인들이 잘 작동하는 것 같더라.


추가 삽질: wasmer@3, rkyv 0.7.39

  • https://github.com/swc-project/swc/pull/5507
  • https://github.com/swc-project/swc/pull/5456
  • https://github.com/swc-project/swc/pull/5510

8월 16일 ~ 8월 17에 wasmer 3 업데이트 때문에 추가 삽질을 했다. PR 머지 안 하고 쌓아두면서 플러그인 관련 PR만 넣어서 테스트해봤는데 플러그인들이 깨지더라.

wasmer 3이 rkyv ^0.7.38에 의존해서 어쩔 수 없이 rkyv도 같이 올렸다. 그런데 실패하더라.

시도: rkyv 0.7.38

  • https://github.com/swc-project/swc/pull/5517
  • https://github.com/swc-project/swc/pull/5518

그래서 일단 rkyv 버전을 0.7.39 대신 0.7.38로 바꿔봤다. 그런데도 실패했다.

해결책: Revert

  • https://github.com/swc-project/swc/pull/5521
  • https://github.com/swc-project/swc/pull/5525

검증된 코드로 되돌렸다.

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