ABOUT ME

-

Total
-
  • RustPython: Rust로 작성된 파이썬 인터프리터
    컴퓨터/Rust 2021. 2. 7. 20:01
    728x90
    반응형

    RustPython

     

    RustPython/RustPython

    A Python Interpreter written in Rust. Contribute to RustPython/RustPython development by creating an account on GitHub.

    github.com

     

    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을 한 번에 배울 수도 있을 것 같은 느낌

     

    RustPython/RustPython

    A Python Interpreter written in Rust. Contribute to RustPython/RustPython development by creating an account on GitHub.

    github.com

     

    728x90

    '컴퓨터 > Rust' 카테고리의 다른 글

    Rust 문법: dyn, trait, polymorphism  (0) 2021.05.02
    Rust 문법: Ownership (소유권)  (0) 2021.04.24
    Rust: PyO3 파이썬 모듈 Rust 언어로 만들기  (0) 2021.04.24

    댓글