-
RustPython: Rust로 작성된 파이썬 인터프리터컴퓨터/Rust 2021. 2. 7. 20:01728x90반응형
RustPython
1. 소개
Microsoft, Google 등 여러 회사로부터 점점 사랑받고 있는 메모리 안정성 좋은 Rust
이 Rust로 작성된 파이썬 인터프리터가 있어서 얼마나 빠를지 테스트해볼 것이다. (개발 단계라 많이 느림)
2. 설치
Git으로 clone한 다음 cargo로 실행하면 바로 target/debug/rustpython.exe가 생긴다.
$ git clone https://github.com/RustPython/RustPython $ cd RustPython $ powershell scripts\symlinks-to-hardlinks.ps1 # 파워쉘로 일단 symlink 후 (아니면 오류 생김) # --release로 main stack overflow를 방지 $ cargo run --release demo.py # demo.py 실행 Hello, RustPython!
pyenv
3.8버전으로 제작되어서 cargo bench를 실행할 때
이미 설치된 파이썬 버전이 3.8보다 낮을 경우 오류가 생긴다. (ex. io.open_code)
그러면 이 폴더에서만 3.8 버전을 사용할 수 있게 pyenv를 사용하면 해결할 순 있다.
아래를 powershell에서 실행시켜 준다.
pip install pyenv-win --target $HOME\\.pyenv [System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User") [System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User") [System.Environment]::SetEnvironmentVariable('path', $HOME + "\.pyenv\pyenv-win\bin;" + $HOME + "\.pyenv\pyenv-win\shims;" + $env:Path,"User")
파이썬 local 3.8.2 설치
local 옵션으로 현재 폴더에서만 3.8.2가 실행되게 할 수 있다.
pyenv install 3.8.2 pyenv local 3.8.2
3. 벤치마크
cargo bench
결과
time은 +일수록 안좋고 thrpt (throughput)은 -일수록 안 좋다.
nBody
기본 cpython 보다 느림
parse_to_ast/rustpython/nbody.py time: [482.28 us 483.94 us 485.85 us] thrpt: [6.5620 MiB/s 6.5879 MiB/s 6.6105 MiB/s] change: time: [+6.1554% +6.7642% +7.3597%] (p = 0.00 < 0.05) thrpt: [-6.8552% -6.3357% -5.7985%] Performance has regressed.
Mandel Brot
기본 cpython 보다 느림
parse_to_ast/rustpython/mandelbrot.py time: [97.415 us 97.799 us 98.258 us] thrpt: [4.4647 MiB/s 4.4856 MiB/s 4.5033 MiB/s] change: time: [+0.1466% +1.4077% +2.5664%] (p = 0.02 < 0.05) thrpt: [-2.5021% -1.3882% -0.1464%]
List Comprehension
기본 cpython 보다 느림
# CPython microbenchmarks/cpython/comprehension_list.py time: [20.186 us 20.264 us 20.350 us] thrpt: [4.9139 Melem/s 4.9350 Melem/s 4.9539 Melem/s] # RustPython microbenchmarks/rustpython/comprehension_list.py time: [59.066 us 59.195 us 59.338 us] thrpt: [1.6853 Melem/s 1.6893 Melem/s 1.6930 Melem/s]
연산
기본 cpython 보다 느림
# CPython microbenchmarks/cpython/addition.py time: [25.115 us 25.449 us 25.814 us] thrpt: [3.8738 Melem/s 3.9295 Melem/s 3.9818 Melem/s] # RustPython microbenchmarks/rustpython/addition.py time: [137.75 us 138.16 us 138.62 us] thrpt: [721.38 Kelem/s 723.80 Kelem/s 725.93 Kelem/s]
아직은 CPython이랑 비슷하게 작동하면서 느린데, JIT까지 개발 중이어서 충분히 빨라질 가능성이 있을 것 같다.
WASI, 웹 어셈블리로 변환 기능도 있어서 웹에서 파이썬을 실행할 수 있게 해주는 기능도 있다.
(rust의 미니멀 런타임 기술)
def foo(): a = 5 return 10 + a foo.__jit__() # this will compile foo to native code and subsequent calls will execute that native code assert foo() == 15
RustPython Github 링크
Rust랑 Python을 한 번에 배울 수도 있을 것 같은 느낌
728x90'컴퓨터 > Rust' 카테고리의 다른 글
Rust 문법: dyn, trait, polymorphism (0) 2021.05.02 Rust 문법: Ownership (소유권) (0) 2021.04.24 Rust: PyO3 파이썬 모듈 Rust 언어로 만들기 (0) 2021.04.24