1P by GN⁺ | ★ favorite | 댓글 1개
  • Cornell CS의 박사 수준 강좌 CS 6120은 컴파일러와 프로그래밍 언어 구현을 체계적으로 배우려는 사람에게 중간 표현, 데이터 흐름, 최적화, 병렬화, JIT, 가비지 컬렉션까지 한 흐름으로 제공함
  • 자기주도 버전은 가상의 대학에서 4학점 무성적으로 수강하는 형식이며, 영상·필기 노트·논문 읽기·구현 과제를 선형 일정으로 따라가게 되어 있음
  • 실습은 LLVM과 교육용 IR인 Bril을 사용해 추상적인 컴파일러 개념을 실제 코드 작성으로 확인하도록 설계됨
  • 실제 Cornell 수업과 달리 과제 마감일을 무시할 수 있지만 Zulip 토론에는 참여할 수 없고, 학기말 프로젝트 대신 자기주도 버전만의 마지막 과제가 주어짐
  • 강좌 자료는 GitHub에 오픈소스로 공개되어 있어 문제를 제보할 수 있으며, 수료 후 피드백 폼을 통해 개선 의견을 보낼 수 있음

강좌 구성과 수강 방식

  • CS 6120Cornell CS의 Adrian Sampson이 만든 프로그래밍 언어 구현 강좌임
  • 범용 컴파일러의 기본 주제와 연구 성격의 주제를 함께 다룸
    • 중간 표현
    • 데이터 흐름
    • 고전적 최적화
    • 병렬화
    • JIT 컴파일
    • 가비지 컬렉션
  • 학습은 논문 읽기와 오픈소스 해킹 과제로 이어짐
    • LLVM을 사용함
    • 수업용 교육 IR인 Bril을 사용함
  • 자기주도 커리큘럼은 영상 시청과 논문 읽기를 섞은 선형 일정으로 구성됨
  • 일부 레슨에는 구현 과제가 포함되어 있으며, 개방형 코드 작성으로 추상 개념을 익히게 함
  • 실제 CS 6120과 자기주도 버전에는 차이가 있음
    • 과제 마감일을 무시할 수 있음
    • Zulip 토론 스레드에는 참여할 수 없음
    • 실제 수업에는 학기말 프로젝트가 있음
    • 자기주도 버전의 학기말 과제는 “컴파일러의 마법으로 세상을 바꾸는 것”임
  • 강좌는 GitHub에 오픈소스로 공개되어 있어 문제가 있으면 버그를 제보할 수 있음
  • 수료 후 피드백 폼을 작성할 수 있음

레슨과 읽기 자료 흐름

댓글과 토론

Hacker News 의견들
  • 동적 컴파일러 부분은 거의 전부 트레이스 컴파일에 대한 내용에 가깝다. 일반적으로 트레이스 컴파일은 막다른 길이었고 여러 번 버려져 왔음
    여기서 더 중요한 개념은 타입 피드백, 추측 실행과 역최적화, 빠른 컴파일러와 계층화라고 봄
    강의 전체는 좋아 보이고, 이렇게 많은 자료가 온라인에 공개된 것도 훌륭함

    • 트레이싱은 역사적으로 조직 원리로는 실용적이지 않다는 게 드러났지만, 배워두면 사고를 넓혀주는 개념이라고 생각함
      말한 것처럼 산업계에서 실제로 잘 작동하는 것에 대한 맥락을 더 제공하고 싶음
    • PyTorch의 torch.compile 작업을 하고 있는데, 이것도 트레이싱 컴파일러임
      다만 이 영역은 꽤 좁을 수 있고, 전통적인 컴파일러와도 많이 달라서 우리가 하는 일 중 일부를 보면 꽤 불편해할지도 모름
    • JAX도 트레이싱 컴파일러
      물론 TraceMonkey나 LuaJIT와는 문제 공간이 극단적으로 다르다는 건 알고 있음
    • TraceMonkey 논문이 박사 자격시험 읽기 목록에 있었고, 마침 그 시험 시기가 TraceMonkey가 SpiderMonkey에서 제거되던 때와 겹쳤음
      당시 개발자 중 한 명, 아마 Jason Orendorff였던 사람과 이야기했는데, 트레이싱은 잘 안 풀린다고 했고, 제한적인 조건에서는 가능할 수도 있다고 봤음
      다만 그 조건이 무엇이었는지는 완전히 잊어버림
    • 트레이스 컴파일은 막다른 길이 아님
      LuaJIT는 큰 프로그램에서도, 수억 대의 서버와 기기에서도 잘 작동함
      학자들조차 이 상투적인 얘기를 계속 반복하는 게 정말 안타까움. 모르는 게 약이라는 말이 떠오름
  • 이전 관련 글들:
    CS 6120: Advanced Compilers: The Self-Guided Online Course - https://news.ycombinator.com/item?id=39577878 - 2024년 3월, 댓글 102개
    Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=35130975 - 2023년 3월, 댓글 82개
    Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=25386756 - 2020년 12월, 댓글 232개

  • 이 강의가 왜 고급인지 조금 헷갈림. 대부분의 주제, 예를 들어 죽은 코드 제거, 데이터 흐름, 지배자 분석, SSA 형식은 컴파일러 첫 강의에 들어갈 것처럼 보임

    • 강의 번호가 꽤 규칙적이라 “입문 컴파일러” 강의가 뭔지 찾아볼 수 있음: https://www.cs.cornell.edu/courses/cs4120/2026sp/?schedule
      짧게 말하면 컴파일러는 사실상 두 과목으로 나뉘고, 첫 과목은 컴파일러를 만들기 위한 최소 요소인 어휘 분석, 구문 분석, 코드 생성, 레지스터 할당을 다룸
      두 번째 과목은 최적화 컴파일러를 만드는 방법에 해당함
    • 관련 자료를 엄청 많이 읽었지만, 그런 내용은 대부분에 포함되지 않았음
      실제로 컴파일러든 인터프리터든 백엔드는 거의 항상 “독자에게 맡기는 연습문제”로 남겨짐
      클로저를 만드는 법, 환경을 추적하는 법, 패턴 매칭, 메모리 표현 등 아직 찾아내야 할 게 얼마나 많은지 상상하기 어려울 정도임
      흥미로운 모든 것은 직접 찾아봐야 함
      추신: 이건 그중 한 해 분량일 뿐임: https://gist.githubusercontent.com/mamcx/e1743571b9a1ea163a7...
    • 비전문가들은 대개 구문 분석부터 시작하고 백엔드를 접하지 못하는 경우가 많다고 봄
      인터프리터와 컴파일러 책을 두 권 읽었는데, 백엔드는 많이 다루지 않았음
      아마 백엔드 입문 강의에 가까운 것 아닐까 싶음
    • 그럼 무엇이 고급인지 궁금함. 죽은 코드 제거, 데이터 흐름, SSA, 명령어 선택, 레지스터 할당을 제대로 다루면 사실상 백엔드의 98% 에 가깝다
  • 이런 식의 자기 주도형 온라인 대학 수준 컴퓨터과학 강의가 또 있을까?

    • 수십 개는 있음. “mooc”로 검색하면 됨
      어떤 교수들은 “mooc” 프레임워크 밖에서도 강의와 과제를 공개함
      댓글로 질문했을 때 답해준 교수도 있었음. 인터넷은 아직 꽤 멋질 때가 있음
  • Nora Sandler의 Writing a C compiler와 비교했을 때, 독자가 얻을 수 있는 이득은 어떻게 다를까?

    • 그 책은 학부 수준 컴파일러 강의에서 얻는 내용에 더 가깝고, 이 강의는 그보다 더 고급 내용을 다룸
      초보자나 취미로 파보는 사람이라면 그 책이나 비슷한 수준의 자료로 시작한 뒤, 이 강의를 시도하면서 빈틈을 채우는 편이 좋음
  • 고급 단계로 들어가기 전에 볼 수 있는 기초 컴파일러 자기 주도형 강의도 있을까?

  • Rust 컴파일러를 다룬 팟캐스트를 봤는데, 시스템을 크래시시킬 수 있는 코드인지 판단하는 데 어떤 지점에서는 기계학습 알고리즘이 들어간다고 했던 것 같음

    • 그런 얘기는 들어본 적이 없고 거의 틀렸다고 확신함. 물론 “기계학습”이라는 말이 넓긴 함
      출처가 있을까?
  • alexia massalin이 요즘 microunity 특허 로열티를 받는 것 말고 뭘 하고 있는지 정말 궁금함