Mach 시스템 언어 개요
Mach는 투명성과 유지보수성을 우선시하는 개발자를 위해 설계된 정적 타입 컴파일 시스템 프로그래밍 언어입니다. 이 언어의 핵심 목표는 "숨겨진 동작"을 제거하여, 암시적인 마법이나 자동화된 추상화 없이 작성된 코드가 컴퓨터가 실행하는 내용과 정확히 일치하도록 보장하는 것입니다.
핵심 설계 철학
Mach는 컴퓨터가 마법이 아니며 프로그래밍 언어가 그러한 환상을 조장해서는 안 된다는 원칙 위에 구축되었습니다. 이 언어는 단기적인 개발자 편의성보다 장기적인 유지보수성과 단순성을 우선시합니다.
우선순위 원칙
- 명시성 (Explicitness): Mach는 의도적으로 장황합니다. 설계는 "보는 대로 동작한다" (WYSIWYG) 방식을 따르며, 프로그래머로부터 어떠한 동작도 숨겨지지 않도록 보장합니다.
- 단순성 (Simplicity): 이 언어는 배우기, 읽기, 쓰기, 유지보수하기 쉽도록 설계되었습니다.
- 유지보수성 (Maintainability): 코드가 장기간 관리 가능한 상태로 유지될 수 있도록 의미론(semantics)이 선택되었습니다.
우선순위가 낮은 원칙
- 내장 기능 (Built-in Features): Mach는 "batteries included" 방식의 기능을 포함하지 않습니다. 기능들은 의도적으로 핵심 언어에서 제외되었습니다.
- 유연성 (Flexibility): 일관성을 유지하기 위해 동일한 결과를 얻기 위한 여러 가지 방법을 제공하는 것을 피합니다.
- 코드 감소 (Code Reduction): 장황함은 명확성을 위한 의미 있는 절충안으로 간주됩니다. 더 많은 코드가 반드시 더 나쁜 코드를 의미하지는 않습니다.
- 자동화된 안전성 (Automated Safety): 안전성은 언어에 의해 강제되는 제한이 아니라 프로그래머의 결정으로 취급됩니다. Mach는 프로그래머가 위험한 작업을 수행하는 것을 막지 않습니다.
기술적 구현 및 도구
Mach는 셀프 호스트(self-hosted) 컴파일러입니다. 즉, Mach로 작성되었으며 스스로를 빌드합니다. LLVM이나 다른 외부 의존성 없이 개발되었는데, 이는 이 프로젝트의 규모를 고려할 때 커뮤니티에서 특히 인상적이라고 평가받는 성과입니다.
명령줄 인터페이스 (CLI)
Mach는 mach 명령어를 통해 통합된 툴체인을 제공합니다:
| 명령어 | 설명 |
|---|---|
build |
현재 프로젝트를 실행 파일 또는 오브젝트 파일로 컴파일합니다 |
run |
현재 프로젝트를 빌드하고 실행합니다 |
test |
프로젝트 테스트를 빌드하고 실행합니다 |
dep |
벤더링된 의존성을 관리합니다 (list, add, remove, sync, vendor) |
init |
새로운 프로젝트의 스캐폴딩을 생성합니다 |
doc |
소스 doc-comments로부터 Markdown 참조 문서를 생성합니다 |
언어 구문 예시
Mach의 구문은 명시성을 유지하면서도 직관적으로 설계되었습니다. 아래는 기본적인 언어 구조의 예시입니다.
Hello World
use std.runtime;
use print: std.print;
$main.symbol = "main";
fun main(argc: i64, argv: **u8) i64 {
print.println("Hello, World!");
ret 0;
}
재귀적 피보나치
use std.runtime;
use print: std.print;
fun fibr(n: u64) u64 {
if (n < 2) {
ret n;
}
ret fibr(n - 1) + fibr(n - 2);
}
$main.symbol = "main";
fun main(argc: i64, argv: **u8) i64 {
print.printf("fib(%d) = %d\n", 10::i64, fibr(10));
ret 0;
}
커뮤니티 논의 및 분석
Hacker News에 소개된 이후, Mach 언어는 설계상의 절충안과 성능에 관한 논의를를 불러일으켰습니다.
성능 및 최적화
커뮤니티 구성원들은 Mach가 현재 C보다 느리며, 일부는 특정 벤치마크에서 약 4배 정도 느리다고 언급했습니다. 이는 실행 속도를 향상시키기 위한 고급 최적화 패스(optimization passes)에 대한 향후 계획에 관한 질문으로 이어졌습니다.
안전성 vs 제어권
안전성을 개발자에게 맡기는 언어의 입장은 주목을 받았습니다. 일부 사용자는 "anti-magic" 철학을 높게 평가하지만, 다른 이들은 safe/unsafe 코드 분리나 대수적 타입(algebraic types)과 같은 현대적인 안전 기능이 숨겨진 동작 없이도 투명성을 제공할 수 있는지에 대해 의문을 제기했습니다.
구현 성과
기여자들과 관찰자들은 이 프로젝트가 완전히 셀프 호스트 방식이며 LLVM과 같은 외부 의존성을 피했다는 점을 높이 평가하며, 2년의 개발 기간을 고려할 때 이 작업을 "믿을 수 없을 정도로 인상적"이라고 묘사했습니다.
"LLVM을 사용하지 않고 이만큼 개발했다는 것은 꽤 인상적입니다. 하지만 문서만으로는 왜 개발자들이 Go나 C 대신 Mach를 사용해야 하는지에 대한 가치 제안이 명확하지 않습니다."
현재 상태
Mach는 MIT License 하의 오픈 소스 프로젝트이며, 현재 macOS 백엔드가 개발 중입니다.