Skip to content

Compiler

  • Published on
    Clang 22.1.0(2026-02-24)은 MSVC ABI를 타깃할 때의 소멸자 코드 생성을 두 군데 바꿨습니다. 하나는 ::delete 처리를 MSVC와 맞춘 것이고, 다른 하나는 2014년에 열린 이슈를 11년 7개월 만에 닫은 vector deleting destructor 지원입니다. 둘 다 진짜 버그를 고치는 변경이지만, vftable 슬롯에 들어가는 심볼이 바뀌는 ABI 변경이라 clang 21 이하로 빌드한 오브젝트와 섞으면 메모리가 깨집니다. 그리고 릴리스 다음 날 delete[] 힙 손상 이슈가 올라왔습니다 — 그중 하나는 22.1.2에 백포트됐지만, 다른 하나는 2026-07-16 현재 최신인 22.1.8까지도 들어가 있지 않습니다. 이 글은 MSVC ABI의 소멸자 3종과 숨은 플래그 파라미터, 이 기능이 네 번 랜딩되고 세 번 되돌려진 이유(두 번은 Chromium이 막았습니다), 링크는 되는데 런타임에 힙이 깨지는 정확한 메커니즘, 그리고 지금 clang-cl을 쓰는 사람이 확인해야 할 것을 정리합니다.
  • Published on
    2026년 6월 3일 나온 Elixir v1.20은 2022년에 시작한 집합론적 타입 시스템의 첫 번째 마일스톤을 끝냈습니다. 이제 모든 Elixir 프로그램이 타입 어노테이션 한 줄 없이 점진적으로 타입 체크되고, 컴파일러가 가드·함수 본문·절 사이에서 타입을 추론해 "실행되면 반드시 런타임에 터지는" 위반과 죽은 코드를 찾아냅니다. 핵심은 dynamic() 타입인데, 다른 언어의 any()가 타입 정보를 버리는 것과 달리 Elixir의 dynamic()은 범위로 동작해 좁혀지며, 공급 타입과 허용 타입이 서로소일 때만 경고합니다. 다만 발표문이 내세운 "If-T 벤치마크 13개 중 12개 통과"는 링크된 상류 결과표에 Elixir 열이 아예 없는 자체 측정치이고, 컴파일 속도 1위 주장도 저자 본인의 합성 벤치마크에서 0.1초 남짓의 차이입니다. 이 글은 1.20이 실제로 무엇을 하는지, 문서화된 트레이드오프는 무엇인지, 업그레이드 전에 알아야 할 CVE와 하드 디프리케이션, 그리고 타입 시그니처가 왜 아직 1년 넘게 남았는지를 원본 소스로 확인해 정리합니다.
  • Published on
    Kotlin Multiplatform이 iOS에서 치러 온 가장 큰 세금은 Objective-C 다리였습니다. Kotlin 코드가 Swift로 넘어가려면 반드시 Objective-C 헤더를 거쳐야 했고, 그 과정에서 Int?는 KotlinInt로 박싱되고, 제네릭은 클래스에만 남고, suspend 함수는 컴플리션 핸들러가 됐습니다. Swift export는 그 중간 다리를 없애고 Kotlin을 Swift로 직접 내보내는 기능이고, 2026년 6월 3일 나온 Kotlin 2.4.0에서 Experimental에서 Alpha로 승격되면서 suspend 함수가 Swift의 async로, Flow가 AsyncSequence로 나가기 시작했습니다. 하지만 JetBrains 자신의 정의에 따르면 Alpha는 "이게 프로덕션 레디가 되어야 하는지를 시험하는 중"이고 "가설이 틀리면 크게 바꾸거나 중단할 수 있다"는 뜻입니다. 이 글은 Objective-C 다리가 실제로 무엇을 부수는지, Swift export가 그중 무엇을 고쳤고 무엇을 아직 못 하는지(제네릭 소거, 크로스 언어 상속 불가, direct integration 전용), 그리고 지금 이걸 프로덕션에 넣으면 안 되는 이유를 1차 문서 기준으로 정리합니다.
  • Published on
    2026년 6월 9일, React Compiler를 Rust로 포팅한 PR #36173이 facebook/react main에 머지됐습니다. 461개 파일에 12만 줄이 넘는 코드가 들어왔고, "Babel 플러그인으로 3배, 변환 로직 자체는 약 10배 빠르다"는 숫자가 곧바로 생태계를 돌기 시작했습니다. 그런데 정작 PR 본문에서 저자 Joseph Savona 본인은 그 숫자에 대해 "성능 수치는 AI가 낸 것이고 벤치마크 설정을 검증하는 데 시간을 별로 쓰지 않았다"고 못 박아 뒀습니다. 이 글은 실제로 머지된 것이 무엇인지(실험적 WIP, 빌드 없음), 그 숫자가 어디서 왔고 왜 이미 낡았는지, 아키텍처는 사람이 잡고 코드는 대부분 AI가 썼다는 말의 실제 의미, 진짜 볼 만한 부분인 패스 단위 IR 대조 검증, 머지 이후 한 달간 계획이 바뀐 지점, 그리고 npm을 열어 보면 알 수 있는 "지금 당신이 할 일은 없다"는 결론까지 1차 출처만으로 정리합니다.
  • Published on
    Rust 1.97(2026년 7월 9일)은 nvptx64-nvidia-cuda 타깃의 최소 사양을 PTX ISA 7.0(CUDA 11 드라이버 이상)과 SM 7.0(Volta 이상)으로 올렸습니다. Maxwell·Pascal 세대 GPU와 CUDA 10 이하 드라이버는 이제 대상이 아닙니다. 이 글은 실제로 바뀐 숫자, 컴파일러 팀이 근거로 든 세 개의 구체적인 결함(디버그 심볼·아토믹 순서·target-feature 메커니즘), 누가 깨지고 무엇을 해야 하는지, 그리고 이 조용한 한 줄이 왜 2026년 Rust-on-GPU 지형에서 의미가 있는지를 정리합니다. 정직한 결론도 담았습니다 — nvptx64는 여전히 Tier 2에 nightly가 필요한 no_std 타깃이고, NVIDIA가 내놓은 cuda-oxide조차 스스로를 알파라고 부릅니다. 대부분의 사람은 아직 Rust로 GPU 커널을 짤 때가 아닙니다.
  • Published on
    Gluon은 Triton과 같은 컴파일러 스택 위에 올라간 하위 레벨 GPU 언어로, Triton이 감춰 두던 레이아웃·공유 메모리·워프 특수화를 커널 작성자에게 그대로 넘깁니다. 존재 이유는 명확합니다 — Triton 컴파일러가 잘 못 뽑는 코드를 만났을 때, 지금까지는 손쓸 방법이 없었기 때문입니다. 이 글은 Gluon이 무엇을 노출하는지, BlockedLayout이 실제로 무엇을 뜻하는지, 그리고 상류 튜토리얼이 GB200에서 기록한 측정치(같은 memcpy가 레이아웃 하나 때문에 0.774 TB/s에서 6.590 TB/s로 갈리는 과정)를 따라갑니다. AMD gfx950 지원과 ROCm 블로그의 벤더 자체 측정치도 함께 봅니다. 다만 Gluon은 아직 triton.experimental 아래에 있고, 요구하는 하드웨어 지식의 양이 Triton과 자릿수가 다릅니다 — 대부분의 커널에는 여전히 과잉입니다.
  • Published on
    2026년 7월 8일, TypeScript 7.0이 GA됐습니다. Go로 다시 쓴 네이티브 포트가 더 이상 별도 바이너리가 아니라 그냥 tsc입니다 — npm install -D typescript을 하면 그게 들어옵니다. Microsoft가 보고한 전체 빌드 속도 향상은 8~12배이고, VS Code 코드베이스 기준 125.7초에서 10.6초로 떨어졌습니다. 하지만 헤드라인이 가리는 두 가지 비용이 있습니다. 첫째, TypeScript 6에서 폐기 예고된 것들이 전부 하드 에러가 됐습니다 — baseUrl, target es5, moduleResolution node가 사라지고 strict와 types 기본값이 바뀝니다. 둘째, 7.0은 프로그래밍 API를 아예 출하하지 않아서 Volar를 쓰는 Vue·MDX·Astro·Svelte 워크플로와 Angular 템플릿 체크는 당분간 TypeScript 6에 남아야 합니다. 이 글은 GA에서 실제로 무엇이 바뀌었는지, 10배라는 숫자가 어떤 조건에서 나온 것인지, 6과 7을 같이 두는 방법, 그리고 오늘 옮길 수 있는 사람과 없는 사람을 정리합니다.
  • Published on
    2026년 4월 14일 발표된 Zig 0.16.0은 표준 라이브러리의 모든 입출력이 Io 인스턴스를 인자로 받도록 바꿨습니다. Allocator를 인자로 넘기던 Zig의 오래된 습관을 I/O에 그대로 적용한 것으로, 같은 소스 코드가 스레드 기반 구현 위에서도 이벤트 루프 위에서도 돌아가게 하려는 설계입니다. 하지만 릴리스 노트를 실제로 읽어 보면 완성된 구현체는 Io.Threaded 하나뿐이고, io_uring 백엔드는 네트워킹과 에러 처리와 테스트 커버리지가 빠진 개념 증명 상태이며, aarch64 백엔드는 이 변경의 여파로 아예 진행이 멈춰 있습니다. 증분 컴파일은 크게 좋아졌지만 오컴파일 버그 때문에 여전히 기본값이 꺼져 있고, 새 ELF 링커는 재링크를 66% 줄이는 대신 DWARF 정보를 만들지 않습니다. 이 글은 공식 릴리스 노트에 적힌 숫자와 단서를 그대로 따라가며, 이 설계가 무엇을 약속하고 무엇을 약속하지 않는지, 그리고 "함수 색깔 문제를 풀었다"는 흔한 요약이 왜 릴리스 노트에는 한 번도 등장하지 않는지를 정리합니다.
  • Published on
    Ruby 4.0은 2025년 12월 25일에 ZJIT을 실었지만, 켜지지 않은 채로 실었습니다 — 바이너리에 컴파일돼 있을 뿐 기본 JIT은 여전히 YJIT입니다. 공식 릴리스 노트의 문장은 "ZJIT은 인터프리터보다 빠르지만 아직 YJIT만큼 빠르지는 않다"였고, 바로 다음 문장이 "Ruby 4.1 ZJIT을 기대해 달라"였습니다. 그 4.1을 겨냥한 작업의 중심에 Lightweight Frames가 있습니다 — 메서드 호출마다 인터프리터 프레임에 pc, iseq, block_code를 쓰는 대신 포인터 하나만 쓰고, 나머지는 백트레이스나 예외처럼 실제로 읽힐 때 되살리는 설계입니다. 흥미로운 건 같은 아이디어가 2023년에 이미 한 번 실패했다는 점입니다. 그때는 인터프리터가 느려져서 폐기됐고, 이번 설계는 정확히 그 지점을 피하려고 다시 그려졌습니다. 이 글은 Lightweight Frames가 무엇을 지우는지, 첫 PR이 왜 거의 빨라지지 않았는지(저자 본인이 그렇게 썼습니다), 그 뒤 넉 달 동안 인라이너와 스택 스필과 버전 수 상한이 어떻게 붙었는지, 그리고 오늘 기준으로 ZJIT이 아직 기본이 아니라는 사실을 정리합니다.
  • Published on
    2026년 추론 워크로드를 두고 벌어지는 GPU·TPU·ASIC의 경쟁을 비교합니다. Google TPU v6 Trillium과 Ironwood, 급성장하는 클라우드 자체 추론 ASIC, 처리량·지연·비용·전력 트레이드오프, 그리고 CUDA와 XLA로 갈라지는 컴파일러 스택까지 다룹니다.
  • Published on
    "hello.c"가 실행 파일이 되는 여정을 원자 단위로 추적한다. 전처리 / 컴파일 / 어셈블 / 링크의 4단계, ELF 파일 레이아웃, 심볼 테이블과 재배치, 정적 라이브러리의 아카이브 구조, 동적 링커 ld.so의 GOT/PLT 트릭, C++ 이름 맹글링의 혼돈, LTO가 왜 "전체 프로그램 최적화"인지, 그리고 Rust/Go가 왜 고전적 링킹과 다른 길을 갔는지 — 오늘도 우리가 `gcc hello.c -o hello` 라고 칠 때 실제로 벌어지는 일들.
  • Published on
    코드 한 줄이 CPU에서 실행되기까지 벌어지는 모든 일. LLVM의 지배, V8의 4계층 JIT, Hidden Class와 Inline Caching, Escape Analysis, Mark & Sweep부터 ZGC까지 GC 계보, Go work-stealing 스케줄러, Rust Monomorphization, Python 3.13 Specializing Interpreter, WASM 런타임 비교까지. 언어가 '어떻게' 빨라지는가.
  • Published on
    Rust, Swift, Clang, Julia, Kotlin Native, WebAssembly. 이 모두의 공통점은 LLVM을 백엔드로 사용한다는 것입니다. 이 글은 LLVM의 내부를 처음부터 해부합니다. 3단 아키텍처(프론트엔드 → IR → 백엔드), SSA 기반 LLVM IR의 구조, 수백 개의 옵티마이저 패스들(InstCombine, GVN, LICM, 인라이너), SelectionDAG와 GlobalISel, LTO와 PGO, Clang 프론트엔드, 그리고 MLIR의 dialect 기반 멀티레벨 IR — 현대 컴파일러가 어떻게 동작하는지 제대로 이해하고 싶은 엔지니어를 위한 종합 가이드입니다.
  • Published on
    Rust 소유권 시스템의 모든 것 — 1999년 Cyclone에서 출발한 affine type 이론, 소유권 이전과 move semantics, 공유/가변 borrow의 XOR 규칙, lifetime annotation과 elision, Non-Lexical Lifetimes(NLL)과 Polonius 차세대 체커, RAII와 Drop trait, Box/Rc/Arc/RefCell 같은 smart pointer, Send/Sync로 표현하는 thread safety, Pin과 self-referential 자료구조, unsafe의 역할까지 1,300줄로 정리한 컴파일 타임 메모리 안전 딥다이브.
  • Published on
    컴파일러/인터프리터 설계의 모든 것! Lexer(토큰화), Parser(구문 분석/재귀 하강/Pratt), AST(추상 구문 트리), 의미 분석(타입 체크), IR(중간 표현), 코드 생성(LLVM/WebAssembly), 최적화(상수 폴딩/인라이닝/루프), 실전 미니 언어 구현.