본문으로 건너뛰기
피드

비전공자를 위한 1ML 타입 시스템 입문

backend 약 4분
vote
0
댓글
북마크

Andreas Rossberg의 1ML 타입 시스템을 컴파일러 제작자 관점에서 해설하는 시리즈 첫 편. System Fw 기반 구조, 의미론적 타입 체계, 구현 권장사항을 다룸

  • 1

    1ML은 System Fw에 대한 정교한 문법적 설탕으로, ML 스타일 모듈 시스템 통합에 최적

  • 2

    Large/Small 타입은 Fw 타입의 부분 문법이며 싱글톤과 순수성 주석 함수 타입이 추가됨

  • 3

    구현 시 Fw 타입과 Large 타입을 통합하고, Xi는 별도 데이터 타입으로 분리할 것을 권장

1ML이란

  • Andreas Rossberg가 설계한 타입 시스템으로, ML 스타일 모듈 시스템을 언어에 통합하는 데 현재 가장 좋은 접근법을 제공함
  • 문제는 논문이 너무 학술적이라 컴파일러 제작자들과의 소통 장벽이 존재한다는 것임. 저자는 수개월간 1ML을 연구하며 프로토타입 구현을 진행 중임
  • 온라인에서 1ML을 "언급"하는 글은 많지만, 깊이 이해하고 논의하는 글은 드묾

핵심 구조: System Fw 위의 문법적 설탕

  • 1ML의 본질은 System Fw(하스켈의 핵심 타입 시스템으로, 고차 카인드 타입 생성자와 명시적 다형성을 포함)에 대한 정교한 문법적 설탕(syntactic sugar)임
  • 표면 타입 T는 즉시 Fw 타입 Xi로 변환되고, 이후 규칙들은 T를 완전히 잊어버림
  • Fw 타입 표현식은 기본 "타입"이 Omega(타입의 카인드)인 단순 타입 람다 대수의 항으로 볼 수 있음. 타입 수준에서 계산을 호출할 수 있다는 게 핵심적인 힘이자, 구현자에게는 STLC 인터프리터를 타입 체커에 내장해야 하는 부담이 됨

의미론적 타입 체계

  • Large(Sigma)와 Small(sigma) 타입은 새로운 문법이 아니라 Fw 타입의 부분 문법임. {sigma} ⊆ {Sigma} ⊆ {Xi} ⊆ {tau} 관계가 성립함
  • 새로운 타입 생성자로 싱글톤 [=Xi]와 순수성 주석이 달린 함수 타입 Sigma →η Xi가 추가됨
  • Path(pi = alpha | pi sigma)는 타입이 대략 정규형임을 강제하는 역할인데, "경로"라는 이름은 사실 오해를 부르는 명칭임

ℹ️참고

> 추상화 타입 Xi = ∃alpha.Sigma에서 ∃를 진짜 존재 양화로 생각하면 직관이 틀어짐. 자유 변수와 그 카인드 정보를 가진 바인더로 이해하는 게 맞음.

구현 권장사항

  • Fw 타입과 Large 타입을 별도 데이터 타입으로 분리하지 말 것 — Large 타입 하나로 통합할 것
  • Small 타입도 별도 데이터 타입으로 만들면 코드 중복이 심해지니, 불변 조건으로만 관리할 것
  • Xi(추상화 타입)는 별도 데이터 타입으로 만들 것: type signat = (type_variable * kind) list * large_type
  • 싱글톤 [=Xi]와 함수 타입에 대해서는 전용 생성자를 도입할 것
  • 시리즈 다음 편에서는 표면 문법, 디슈가링, 위상 분리를 다룰 예정임

학술 논문과 실제 컴파일러 구현 사이의 간극을 메우려는 실용적 해설

댓글

댓글

댓글을 불러오는 중...

backend

Go에서 Rust로 옮길 때 진짜로 바뀌는 것들

이 글은 Go 백엔드 서비스를 Rust로 옮길 때 속도보다 컴파일 타임 보장, 런타임 트레이드오프, 개발자 경험이 더 중요하다고 설명한다. nil 패닉, 데이터 레이스, 에러 처리, 제네릭, 비동기 모델, 마이그레이션 전략까지 실무 관점에서 Go와 Rust를 길게 비교한다.

backend

Python 3.15에서 헤드라인은 못 탔지만 꽤 쓸만한 기능들

Python 3.15에는 lazy imports나 Tachyon profiler 같은 큰 기능 말고도 실무에서 바로 체감될 만한 작은 개선들이 들어가. TaskGroup 취소, 컨텍스트 매니저 데코레이터 개선, 스레드 안전 이터레이터처럼 평소 애매하게 불편했던 지점들이 꽤 깔끔해졌어.

backend

심평원, DUR부터 의료영상 심사까지 클라우드로 갈아엎는다

심평원이 정보시스템 클라우드 전환과 함께 병·의원 업무에 직접 닿는 DUR, 의료영상 AI 심사, 요양급여내역 조회 시스템을 고도화한다. 핵심은 설치형 프로그램 중심이던 연계를 웹과 API 기반으로 넓히고, 진료·청구 과정에서 실시간 확인과 자동 판독을 강화하는 쪽이다.

backend

윈도우 에러 코드 7번 ‘ERROR_ARENA_TRASHED’는 어디서 왔을까

ERROR_ARENA_TRASHED는 Win32에서 실제로 쓰이는 현대적 에러라기보다 MS-DOS 시절 메모리 관리 구조에서 넘어온 잔재야. MS-DOS가 메모리 블록 앞의 arena 시그니처를 훑다가 예상한 값이 아니면 ‘arena가 망가졌다’고 보고 이 에러를 냈다는 이야기야.

backend

C/C++ 컴파일러의 느슨한 메모리 동시성 버그를 자동으로 잡는 박사논문

C와 C++ 컴파일러에서 relaxed memory 동시성 버그를 찾는 자동 테스트 프레임워크를 다룬 박사논문이 공개됐어. Téléchat, Atomic-mixer 같은 도구로 소스 수준 동작과 컴파일된 프로그램 동작을 비교하고, LLVM과 GCC 툴체인에서 실제 버그를 찾아낸 내용이 핵심이야.