AheuiJIT
AheuiJIT copied to clipboard
Aheui JIT compiler for PC and web
Brief English introduction
AheuiJIT is a just in time compiler for Aheui language built from scratch. Its design is inspired by LLVM and dynarmic project. It's about 10 times faster than the previously fastest implementations of Aheui language.
아희짓
개요
아희짓은 아희 언어를 위한 JIT (Just in Time) 컴파일러입니다. 어셈블러와 유틸 라이브러리외에 외부 라이브러리에 전혀 의존하지 않고 JIT을 바닥부터 구현합니다.
지원 환경
- 64비트 windows, mac, linux (x86 아키텍쳐)
- 웹어셈블리를 지원하는 웹 브라우저 및 nodejs (웹 데모)
- 안드로이드 (arm 64비트)
완성도
-
아희 테스트 케이스 중 64 비트 정수 최대값 출력을 제외한 모든 테스트를 통과합니다.
- 특히 저장소의 원소를 모두 소모하면 반대로 가는 스펙을 제대로 구현합니다.
- 아희아희를 원할하게 구동합니다. (quine과 logo가 작동하는 것을 확인했습니다.)
- 빠릅니다.
- logo 아희 테스트를 0.21초 안에 완료합니다. (JIT 컴파일 시간 0.05초 포함)
- 아희아희 + quine 테스트를 0.7초안에 완료합니다. (기존 jit 컴파일러인 rpaheui보다 8배 빠른 결과입니다.)
- 웹버전도 꽤나 빠릅니다.
- logo 아희 테스트를 JIT 컴파일 시간을 제외하면 0.23초 안에 완료합니다.
사용법
PC 버전
릴리즈 페이즈에 가서 운영체제에 맞는 압축파일을 다운받고 압축을 푸세요.
bin/AheuiJITCli 아희파일
로 아희 프로그램을 실행해볼 수 있습니다.
inlcude와 lib폴더에는 정적 라이브러리로 빌드된 AheuiJIT이 있습니다.
웹 버전
npm install aheui-jit
하신 다음
import AheuiJIT from 'aheui-jit';
AheuiJIT.callbacks.printChar = msg => {
console.log(msg);
};
AheuiJIT.callbacks.printNum = num => {
console.log(num.toString());
};
AheuiJIT.config.logIR = true;
AheuiJIT.ready.then(() => {
return AheuiJIT.run("밤밣따빠밣밟따뿌\n빠맣파빨받밤뚜뭏\n돋밬탕빠맣붏두붇\n볻뫃박발뚷투뭏붖\n뫃도뫃희멓뭏뭏붘\n뫃봌토범더벌뿌뚜\n뽑뽀멓멓더벓뻐뚠\n뽀덩벐멓뻐덕더벅");
}).then(() => {
console.log("finish");
});
이런식으로 쓰실 수 있습니다.
빌드
C++17을 지원하는 컴파일러와 cmake을 깔고 아래 명령어를 실행하면 됩니다.
git submodul update --init
mkdir build
cd build
cmake ..
웹어셈블리 버전은 cmake .. 대신 emcmake cmake .. 을 사용하시면 됩니다.