2021년 2월 28일 작업일지

타입 체커: 룰 추가 구현 언제나 그렇지만, 많은 작업을 했다. Union 할당 관련 룰 A | B | C = C | A가 작동하도록 변경한 것이다. Enum 멤버 할당 관련 룰 Switch 관련 Type fact never 타입을 제대로 계산하지 못하는 버그가 있었다. 타입 파라미터 처리 룰 타입 파라미터 간의 할당 로직과 Union에서 제외하는 로직을 손봤다. swc#1436: ts_resolver 버그 수정 PR 링크

2021년 2월 27일 작업일지

rweb#49 병합 PR 링크 다른 것들 작업하느라 바빠서 rweb에는 신경을 거의 못 썼는데, @ddboline이 고맙게도 PR을 보내줬다. 의존성들 버전 업그레이드 하는 것이라 변화가 많지 않아서 리뷰가 쉬웠다. swc minifier#1302: 추가 작업 (WIP) PR 링크 더 빠르게 끝낼 방법을 고민해봤지만 마땅한 방법이 떠오르지 않았다. 그래서 테스트 하나씩 확인해보면서 무시 목록에 올렸다. 근데 타입 체커가 더 재밌어서 그만뒀다. 타입 체커: class static 처리 우선 클래스 정의에 할당하는 코드를 고쳤다. class A {} interface I {} var a: typeof A; var i: typeof I; a = i; 위 코드가 클래스 정의에 할당하는 코드다.

2021년 2월 26일 작업일지

swc 번들러#1427: 버그 수정 PR 링크 테스트 관리를 간단하게 하기 위해 dce용 fixture 테스트 시스템을 만들었다. 이에 필요한 건 testing crate와 testing_macros에 이미 구현이 되어있었기에 fixture 테스팅 시스템은 30줄도 되지 않는다. swc는 fixture 테스팅을 많이 쓰는데, 경험상 300줄 ~ 500줄 정도는 필요했다. 근데 공통 부분을 어떻게 잘 분리해내서 crate로 만들었고 그 덕분에 30줄 정도로 구현할 수 있었다. 테스트 돌려보니까 dce엔 문제가 없었다. 근데 생각해보니까 dce는 여러 번 적용되도록 설계된 패스였고, 번들러는 1번만 적용하고 있었다.

2021년 2월 25일 작업일지

swc 번들러#1427: 버그 수정 (WIP) PR 링크 아이디어는 생각났는데, 실제로 이게 문제를 다 해결해줄지는 좀 더 생각해봐야할 것 같아서 잤다. 자고 일어나서 생각났던 아이디어대로 구현하니까 버그가 고쳐졌고, 코드도 훨씬 논리적이고 깔끔해졌다. 처음에도 이 방법이 생각났었긴 한데 그 당시엔 변화를 줄이려다가 이상한 방식을 택했고, 결국 해결하기 힘든 버그들을 만들어냈다. 그리고 재보진 않았지만 많은 레거시 코드를 지웠으니 deno 바이너리 사이즈나 컴파일 시간도 줄어들 것이다. swc minifier#1302: 추가 작업 (WIP) PR 링크 번들러 관런 이슈 중 하나가 dce에 관한 것이었어서 이게 생각이 났다.

2021년 2월 24일 작업일지

swc#1431 머지 PR 링크 libc 버전 문제에 관련 버그가 있었는데, 이를 해결해주는 PR이다. swc v1.2.49 배포 호환성 문제에 대한 패치 떄문에 빠르게 새 버전 배포했다. swc 번들러#1427: 번들러 버그 분석 (WIP) PR 링크 번들러 버그들을 분석해봤는데 이거 수정할 게 꽤 될 것 같다. 사실 버그만 고치려면 별 것 아니지만 디자인을 개선할 방법이 생각나서 그렇다. 현재는 ExportNamed와 VarDecl을 여러 군데에서 확인하고 생성하는데 이를 한 곳에서만 하도록 바꾸는 게 내 계획이다. 근데 이거 작업할 기분이 아니라서 미뤘다.

2021년 2월 23일 작업일지

swc-website#32 병합 PR 링크 간단한 작업이라 적을지 말지 고민했는데 전에도 머지한 것 적었으니 이번에도 적었다. swc#1419 병합 PR 링크 리뷰는 어제 했는데, 머지는 오늘 했다. 윈도우 사용자도 swc에 기여할 수 있게 해주는 패치인데, 솔직히 의미가 있나 싶다. 기여자 자체가 많지 않아서 그렇다. 타입 체커: 타입 추론 버그 수정 in 연산자로 변수의 타입을 바꿀 수 있게 변경했다. 이는 아래와 같은 코드를 처리하기 위해 필요하다. declare const obj: { test: string } | {}; if ("test" in obj) { obj.

2021년 2월 22일 작업일지

타입 체커: 테스트 추가 및 룰 구현 오늘은 잠이 안 와서 잠을 못 잤다. 새벽동안 테스트 실패하는 것들 잘게 쪼개서 타입 추론용 유닛 테스트 만드는 걸 했다. 난 잠 못자면 머리를 못 쓴다. 그래서 머리 안 돌아가도 할 수 있는 걸 했다. 그래도 테스트만 추가한 건 아니고 쉬운 룰 몇개는 구현했다. swc #1382: 번들러 버그 수정 PR 링크 수강신청을 망치고나서야 잠이 왔다. 그래서 한참 자고 일어나서 번들러 작업 시작했다. 그리고 오랜 작업 끝에 드디어 끝냈다.

2021년 2월 21일 작업일지

swc #1382: 번들러 버그 수정 (WIP) PR 링크 어제 한던 작업의 연장선이다. circular import의 순서 문제는 해결했는데, 테스트 돌려보니까 또 무한 루프를 돌았다. 그래서 꽤 오래 작업해서 고쳤는데 또 다른 버그가 생겼다. 파이썬 알고리즘 수업 오늘이 마지막이었다. 어쩌다보니 알고리즘 강의를 하고 있긴 하지만 사실 난 알고리즘을 공부해본 적이 아예 없다. 그리고 PS가 개발할 때 중요하다고 생각하지도 않는다. 알고리즘은 필요할 때 만들 수 있는 수준이면 된다고 본다. swc가 상당히 복잡한 프로젝트인데 러스트라서 기존 방식은 쓸 수 없었고, 난 아예 새로운 개념의 알고리즘을 만들어서 swc를 만들었다.

2021년 2월 20일 작업일지

어제는 작업 일지 드래프트 해제하는 걸 까먹었다. 근데 안 까먹을 자신이 없어서 오늘부턴 그냥 작업 끝날 때마다 업데이트 하려고 한다. 타입 체커: assignment type narrowing 타입스크립트에서는 한 변수에 타입이 2개 존재한다. 하나는 선언할 때 사용된 타입이고 하나는 실제로 저장된 타입이다. 좀 이상하게 들리겠지만 그렇게 처리해야 아래와 같은 코드가 정상적으로 검증된다. export let x: string | number; x = 1000; do { x; // number x = ""; } while ((x = x.

2021년 2월 19일 작업일지

is-macro #8 병합 PR 링크 러스트에서 enum 타입 사용할 때 상당히 유용한 라이브러리인데, 누가 PR을 보내서 리뷰하고 머지한 뒤 새 버전 배포했다. swc #1408: new jsx transform 마무리 PR 링크 마무리하는데 걸리는 시간이 가장 적을 것 같아서 이걸 우선 하기로 했다. 작업하는데 별로 어려운 건 없었다. 그나마 어려웠던 거라면, 옵션 처리 방식이다. 바벨에서는 options.json이 상속되는데 그 사실을 까먹고 옵션이 같은데 왜 동작이 다른가 고민했다. 그러다 상위 폴더의 옵션을 상속한다는 게 생각나서 관련 옵션을 직접 옮겨줬다.