#compiler
노트 4개
Frontend › JavaScript
Babel과 AST 변환Babel은 JavaScript를 파싱(parse)해 AST로 바꾸고, 플러그인이 AST를 고친 뒤(transform), 다시 코드로 찍어 내는(generate) 소스 대 소스 컴파일러다. 설정의 플러그인·프리셋 순서, preset-env와 browserslist·core-js 폴리필, 방문자(visitor) 패턴으로 플러그인 쓰는 법, 같은 AST 원리로 대규모 코드를 고치는 codemod(jscodeshift)까지, Babel 8 기준으로 정리한다.
Frontend › JavaScript
TypeScript 컴파일러 내부 구조TypeScript 컴파일러는 스캐너(토큰) → 파서(AST) → 바인더(심볼) → 체커(타입 검사) → 이미터(JS·.d.ts·소스맵) 순으로 일한다. 문법과 의미의 차이, Program·SourceFile·Node·SyntaxKind, 주석을 담는 트리비아, 심볼과 심볼 테이블·컨테이너, 지연 검사와 진단의 종류, 소스맵, Go로 옮긴 TypeScript 7에서 달라진 점을 정리한다.
Computer Science › Programming Languages
타입 시스템: 검사, 추론, 다형성, 변성, 건전성타입 시스템이 프로그램의 어떤 오류를 언제 막는지 정리한다. 정적·동적 검사와 그 한계, 타입 판단과 추론 규칙, 곱·합·함수·재귀 타입과 Option·Result, 제약 생성과 단일화로 하는 타입 추론, 매개변수·부분형·임시 다형성(정적·동적 다형성), 명목적·구조적 타입과 덕 타이핑, 공변·반공변·무공변, 패턴 매칭의 완전성 검사, 진행과 보존으로 보는 타입 건전성, 의존 타입과 선형·아핀 타입.
Computer Science › Programming Languages
프로그래밍 언어 의미론: 구문, 바인딩, 람다 계산, 평가 전략프로그래밍 언어 이론의 기초 개념을 정리한다. 구문과 의미론, 구체 구문과 AST, 작은·큰 단계 연산 의미론과 표시·공리적 의미론, 자유·바인딩 변수와 렉시컬·동적 스코프, 클로저의 환경, 람다 계산의 알파 변환·베타 축약과 변수 포획, 값·이름·필요에 의한 호출과 참조·공유에 의한 호출, 환경과 저장소와 별칭, 연속과 CPS, 프로그램 동치와 Hoare 논리, 위생적 매크로, 컴파일·해석이 구현의 성질인 이유, 의미를 보존하는 최적화.