Industrial-strength implementaiton of Aheui written in RPython with JIT
English: README.en.md
Working log (English): LOG.md
빌드 및 실행 영상: Youtube
2015 한국 파이콘: PyPy/RPython으로 20배 빨라지는 JIT 아희 인터프리터
알파희썬(RPython)은 PyPy를 개발하기 위해 개발/사용된 python의 방언으로서 정적 언어로 컴파일되고 tracing-JIT를 지원하기 위한 라이브러리를 내장하고 있습니다. 알파희썬으로 개발한 언어는 손쉽게 파이썬으로 실행하거나 바이너리로 빌드할 수 있고, JIT를 적용하기도 쉽습니다.
이 프로젝트는 RPython으로 JIT 인터프리터를 개발하는 예제로 활용할 수 있습니다. 위의 링크에서 LOG.md를 확인해 더 알아보세요.
아직 파이썬을 모르세요? 알파희 개발자가 번역한 책으로 파이썬을 공부해 봅시다.
git clone https://github.com/aheui/rpaheui
make # RPYTHON 환경변수 설정 필요. rpython은 pypy 소스코드를 내려받으면 포함되어 있습니다. 버전은 github actions 설정을 참고해 주세요.
./bin/aheui-c <아희 코드 파일>
./bin/aheui-bigint-c <큰 정수가 필요한 아희 코드 파일>
PyPy 기술은 PyPy를 CPython보다 빠르게 동작하게 만듭니다. (http://speed.pypy.org/ 참고)
알파희도 이 기술을 이용해 JIT로 빨라지고 있습니다. 벤치마크에 널리 쓰이는 로고 실행이 caheui보다 30배 이상 더 빠릅니다!
$ time ./rpaheui-c snippets/logo/logo.aheui > /dev/null
real 0m0.915s
user 0m0.640s
sys 0m0.269s
$ time ../caheui/aheui snippets/logo/logo.aheui > /dev/null
real 0m26.026s
user 0m25.970s
sys 0m0.035s
-
면 표준 입력입니다.1
입니다. 0
과 2
사이의 정수를 쓸 수 있습니다.
--opt=0
, -O1
or -O 2
auto
입니다. auto
, bytecode
, asm
, text
가운데 하나를 쓸 수 있습니다.
auto
: 소스 유형을 추측합니다. 파일이름이 .aheuic
이거나 바이트코드 종료 패턴이 담겨 있으면 bytecode
로 추측합니다. 파일이름이 .aheuis
이면 asm
으로 추측합니다. 파일이름이 .aheui
이면 text
로 추정합니다. 추정할 수 없으면 text
로 추정합니다.bytecode
: 아희 바이트코드. (앟셈블리
의 바이트코드 표현형)asm
: 앟셈블리
참고--source=asm
, -Sbytecode
or -S text
run
입니다. run
, bytecode
, asm
가운데 하나를 쓸 수 있습니다.
run
: 주어진 코드를 실행합니다.bytecode
: 아희 바이트코드. (앟셈블리
의 바이트코드 표현형)asm
: 앟셈블리
참고--target=asm
, -Tbytecode
or -T run
-
이면 표준 출력입니다.
.aheuic
파일입니다..aheuis
파일입니다.asm
에 주석이 추가됩니다..aheuic
파일을 자동으로 생성하지 않습니다.
.aheuic
파일은 왜 생성되나요?: https://github.com/aheui/snippets/commit/cbb5a12e7cd2db771538ab28dfbc9ad1ada86f35
ahsembler
는 ./aheui-c --source=asm --output=-
와 같은 명령입니다.앟셈블러로 아희 코드를 컴파일해 직렬화 된 앟셈블리로 만드세요! 아희 코드를 선형으로 디버그할 수 있습니다!
원시 명령
확장 명령 (선형 코드는 위치 정보를 잃고 일부 명령이 스택 크기 점검을 하지 않으므로 추가 명령이 필요합니다)
사용법
git clone https://github.com/aheui/rpaheui
python ahsembler.py <your-aheui-code>