Micron, 모듈 수준 규칙으로 커널의 힙 의존성 제한
Micron은 모듈마다 언어 수준을 지정하고, 각 모듈이 같은 수준 이하의 모듈만 가져오게 합니다. 이에 따라 level 1 커널이 힙을 쓰는 level 3 모듈에 의존하는 경로를 제한합니다. 컴파일러와 인터프리터는 구현됐고 C99 변환기와 네이티브 백엔드는 개발 중이며, 교재는 Project Oberon 이식체를 에뮬레이트한 RISC-V 기계에서 부팅하는 과정을 소개합니다.
Micron 저장소는 이 언어를 Oberon+와 비슷한 문법을 쓰는 시스템 프로그래밍 언어로 소개합니다. Pascal에서 옮기기 쉽도록 Pascal 연산자도 지원합니다. 부트 코드, 드라이버, 운영체제 커널과 일반 애플리케이션을 같은 언어로 작성하고 C와 래퍼 없이 연결하는 것이 프로젝트의 목표입니다. micc 컴파일러와 인터프리터는 명세에 맞게 구현됐으며 IDE 통합과 도구 개발은 계속되고 있습니다.
Micron의 핵심 규칙은 모듈마다 필요한 언어 수준을 지정하는 것입니다. 수준은 0부터 5까지이며, 모듈은 자신과 같거나 낮은 수준의 모듈만 가져올 수 있습니다. 따라서 level 1 커널은 힙을 사용하는 level 3 모듈에 의존하지 않습니다. 수준을 지정하지 않으면 level 3이 적용됩니다. 이 규칙은 실행 중 기능을 끄는 설정이 아니라 모듈 간 의존성을 제한합니다.
각 수준은 사용할 수 있는 기능 범위를 나눕니다. level 0은 하드웨어 초기화용 인라인 코드와 스택 없는 실행을, level 1은 스택 프레임·재귀·C 외부 프로시저를 다룹니다. level 3에는 힙과 포인터, 예외 처리가 들어가고, level 4는 형식 확장과 동적 디스패치를, level 5는 가비지 컬렉션을 더합니다. 모듈이 필요한 수준을 선언하면 저수준 코드가 더 높은 수준의 기능을 쓰는 모듈에 의존하는 경로를 막을 수 있습니다.
C 연결 예제에서 level 1 모듈은 extern C로 abs, toupper, write를 선언한 뒤 Micron 코드에서 호출합니다. 별도의 C 래퍼 대신 외부 프로시저를 언어 경계로 사용하는 방식입니다. level 2의 Shape 예제는 area와 print 연산을 요구하는 인터페이스를 정의합니다. Rect와 Circle은 각 연산을 제공해 이 인터페이스를 구조적으로 충족하며, 공통 describe 프로시저가 두 자료형을 같은 방식으로 다룹니다.
Micron은 제네릭 프로그래밍, 인라이닝, 컴파일 시 실행하는 프로시저를 언어 기능으로 제공해 C 전처리기의 기능을 상당 부분 대체하려 합니다. 예제의 제네릭 Stack 모듈은 형식과 용량을 매개변수로 받아 정수형·문자형 스택으로 사용됩니다. INVAR로 표시한 width 프로시저는 상수 입력에 대해 컴파일 시 계산되며, 그 결과를 배열 크기에 활용합니다.
저장소는 예제 Bits.mic를 ./micc Bits.mic --run 명령으로 실행하도록 안내합니다. C99 변환기와 네이티브 백엔드는 개발 중입니다. 현재 백엔드는 단순성을 위해 대부분 스택 기반이며, README는 버그가 남아 있을 수 있다고 설명합니다.
교재 3부는 Wirth와 Gutknecht의 Project Oberon 운영체제를 Micron으로 옮긴 Micron System을 에뮬레이트한 RISC-V 기계에서 컴파일하고 링크해 부팅하는 과정을 다룹니다. 저장소는 Linux x86_64용 사전 빌드본도 제공하며, 이 실행 파일에는 SDL2가 필요합니다. 별도의 Oberon System 3 이식도 에뮬레이트한 RISC-V 기계에서 실행 중이고, Raspberry Pi Zero 2 지원은 진행 중입니다.