X 디자인 노트: OCaml 모듈 통합

2025-09-09

저자는 PolySubML의 형식 추론 및 구조적 하위 형식화와 OCaml의 대부분 기능을 결합하는 것을 목표로 하는 새로운 프로그래밍 언어 X를 설계하고 있습니다. 특히 OCaml의 모듈 시스템과 일반적인 값 사이의 구문적 및 개념적 차이점을 해결하는 데 중점을 두고 있습니다. 이 게시물에서는 레코드의 별칭 멤버, struct 및 sig 구문, 모듈 열기 및 포함, 모듈 확장 및 존재적 형식을 사용한 추상화 등 X에서 OCaml 모듈을 통합하는 방법을 자세히 설명합니다. 와일드카드 가져오기 방지 등 OCaml 모듈 시스템의 개선 사항도 제안합니다. 최종 목표는 더 간단하고 이해하기 쉽고 강력한 프로그래밍 언어를 만드는 것입니다.

더 보기
개발

Hindley-Milner을 넘어서: 대수적 부분형 추론을 사용한 Cubiml 컴파일러 튜토리얼

2025-06-13

이 블로그 게시물 시리즈에서는 "cubic biunification"이라는 새로운 형식 추론 시스템을 기반으로 한 Cubiml 컴파일러 튜토리얼을 소개합니다. 이는 대수적 부분형 추론의 개선된 버전입니다. Hindley-Milner 시스템의 부분형 지원 부족이라는 한계를 해결하여 더욱 강력하고 직관적인 형식 추론을 제공합니다. 튜토리얼에서는 자세한 코드 예시를 사용하여 Cubiml의 구현을 단계적으로 설명하며, 불리언, 조건문, 레코드, 함수, let 바인딩, 재귀적인 let 바인딩, 상호 재귀, 그리고 case 형식 매칭 등을 다룹니다. 최종 목표는 수동으로 형식 주석을 추가할 필요 없이 형식 검사를 수행하는 컴파일러를 만드는 것입니다.

더 보기
개발

신비로운 타입 에러와 작별: PolySubML이 타입 추론 에러 메시지를 개선하는 방법

2025-05-23

PolySubML은 전역 타입 추론, 서브타이핑, 고급 다형성을 결합한 프로그래밍 언어입니다. 이 글에서는 PolySubML이 어떻게 좋은 타입 에러 메시지를 설계하는지 살펴보고, 기존 언어들이 타입 추론 에러 메시지 개선에 있어 종종 부족한 이유를 설명합니다. 저자는 다섯 가지 규칙을 제안합니다. 1. 추측하거나 백트래킹하지 마세요. 2. 성급한 결론을 내리지 마세요. 3. 사용자에게 의도를 명확히 해달라고 요청하세요. 4. 사용자가 명시적인 타입 주석을 작성할 수 있도록 허용하세요. 5. 런타임 실행 모델에 정적 타입 추론을 포함하지 마세요. 이러한 규칙을 따름으로써 PolySubML은 타입 추론과 관련된 많은 일반적인 문제를 해결하고 코드 디버깅 가능성을 크게 향상시킵니다.

더 보기

객체 지향을 넘어: 프로그래밍 언어에서의 서브타이핑의 진화

2025-03-29

본 글에서는 프로그래밍 언어 설계에서 서브타이핑의 중요한 역할을 탐구합니다. 저자는 여러 프로그래밍 언어 개발 경험을 바탕으로 서브타이핑이 객체 지향 프로그래밍의 클래스 상속에만 국한되지 않고 훨씬 더 기본적인 개념임을 설명합니다. 즉, 타입 X가 타입 Y의 서브타입이라는 것은 타입 X의 값을 타입 Y가 예상되는 곳 어디에서든 사용할 수 있다는 것을 의미합니다. 본 글에서는 성능 중심의 저수준 언어에서도 서브타이핑이 필수적인 이유를 명확히 설명합니다. 서브타이핑을 통해 컴파일러는 null 값, 별칭 등의 문제를 정적으로 검사하여 코드의 신뢰성을 높이고, 궁극적으로 프로그래밍 언어의 진화를 촉진합니다.

더 보기

Rust의 빌려주기 검사기의 네 가지 놀라운 제한 사항

2024-12-24

이 글에서는 경험이 많은 Rust 프로그래머조차도 마주칠 수 있는 Rust의 빌려주기 검사기의 네 가지 놀라운 제한 사항을 자세히 살펴봅니다. 첫 번째 제한 사항은 빌려주기 검사기가 match 및 return 문을 완전히 고려하지 못한다는 점으로, HashMap을 사용할 때 중복된 검사로 이어집니다. 두 번째 제한 사항은 비동기 프로그래밍과 관련이 있으며, Rust는 현재 특정 비동기 콜백의 형식 서명을 표현할 수 없습니다. 세 번째는 FnMut 클로저가 캡처된 변수의 재빌림을 허용하지 않는다는 점으로, 비동기 작업에서 가변 상태에 대한 액세스를 제한합니다. 마지막으로, Send 검사기의 제어 흐름 인식 부족으로 인해 Send여야 하는 일부 Future가 잘못해서 비 Send로 플래그가 지정됩니다. 저자는 구체적인 코드 예와 해결 방법을 사용하여 이러한 제한 사항과 과제를 보여주고 개발자의 생산성을 높이기 위해 Rust의 형식 시스템 개선을 주장합니다.

더 보기