프로젝트 소개
Xag는 고성능, 도움이 되는 오류 메시지, 그리고 러스트 스타일 메모리 관리를 중심으로 구축된 컴파일 언어입니다. 모든 크기는 명시적으로 선언되어야 하며, `int`와 같은 기본 타입은 없습니다. 프로그램은 LLVM을 통해 네이티브 코드로 미리 컴파일되거나 두 개의 AOT 인터프리터 중 하나로 실행됩니다.
컴파일러는 LLVM의 네이티브 C++ API를 기반으로 C++20으로 작성되었으며, LLVM 23 이상, CMake, Ninja가 필요합니다. 소스 파일은 `.xag` 확장자를 사용합니다. 툴체인에는 어휘 분석, 파싱, 타입 체크, IR 검사 명령이 포함되어 있습니다.
실행 엔진은 세 가지가 존재합니다: 테스트용 인터프리터(명확히 정확하지만 느림), 빠른 인터프리터(플랫 코드 최적화), 그리고 AOT 네이티브 백엔드입니다. 세 엔진 모두 공유 런타임을 호출하므로 런타임 동작에 대해 일치합니다. 엔진 간 불일치가 발생하면 프로젝트는 어느 것이 잘못되었는지 식별합니다.
십진수 산술은 철저하게 검증됩니다: 소프트웨어 구현은 400,000개의 사례에서 파이썬의 `decimal` (libmpdec)과 교차 확인되고, 추가로 20,000개의 사례는 QEMU 에뮬레이션을 통해 POWER 하드웨어 십진수 유닛과 비교됩니다.
유니코드 지원은 UAX #29를 완전히 따르며, 유니코드 17.0.0 표를 기반으로 그래핌 클러스터 계산을 포함합니다. 테스트 스위트에서는 모든 766개의 유니코드 호환성 사례를 실행합니다.
오라클 생성기(`generator/`)는 무작위 Xag 프로그램을 작성하고 모든 엔진에서 테스트하여 불일치를 찾습니다. 이 생성기는 외부 종속성이 없는 Rust로 작성되었습니다.
라이선스: Apache-2.0 WITH LLVM-exception. 사용은 무료이며, 컴파일러나 런타임을 수정할 경우 Apache 조건에 따라 저작권 표기를 해야 합니다.
참고: 이는 초기 개발 단계의 작업으로, 아직 모든 것이 안정되지 않았습니다. 저장소 내 대부분의 코드는 언어 설계자의 지시 아래 AI에 의해 생성되었습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.