NimでPythonコードを高速化

こんにちは、Khabrovites。「PythonDeveloper。Basic」コースの開始を見越して、興味深い記事の翻訳を用意しました。また、オープンウェビナー「Careerfor」PythonDeveloper.Basic「」にもご招待します






Python — , . , , Python.  , , . Nim.





Nim?

Nim – , , - . Nim , Python, , Lisp. Python, Nim , C .





Nim

Nim, . nim-lang.org.





, Nim. -, , hello.nim, . :





static:
    echo("Hello, world!")
      
      



, :





nim compile hello.nim
      
      



! «Hello, World!». Nim .





Nim Python

Nim nimpy



nimporter



, Python.  pip install nimporter



. .





Nim, , , n- .





Benchmark 3 : 





  • main.py



    — ,





  • nmath.nim



    fib



    Nim





  • pmath.py



    fib



    Python





fib Python:





def fib(n):
    if n == 0:
        return 0
    elif n < 3:
        return 1
    return fib(n - 1) + fib(n - 2)
      
      



nmath.nim



. nimpy



:





import nimpy
      
      



Python, ? :





import nimpy

proc fib(n: int): int {.exportpy.} =
    if n == 0:
        return 0
    elif n < 3:
        return 1
    return fib(n-1) + fib(n-2)
      
      



fib



proc



. , (, ?) {.exportpy.}



Nim, Python. , Python.





main.py :





import nimporter
from time import perf_counter
import nmath  # Nim imports!
import pmath
print('Measuring Python...')
start_py = perf_counter()
for i in range(0, 40):
    print(pmath.fib(i))
end_py = perf_counter()

print('Measuring Nim...')
start_nim = perf_counter()
for i in range(0, 40):
    print(nmath.fib(i))
end_nim = perf_counter()

print('---------')
print('Python Elapsed: {:.2f}'.format(end_py - start_py))
print('Nim Elapsed: {:.2f}'.format(end_nim - start_nim))
      
      



!

nimporter



Nim Python, , . , ?





, python main.py



, !





Python Elapsed: 33.60
Nim Elapsed: 1.05
      
      



, , Nim Python. Nim 30 , , . Nim, .





, ! , . , .






"Python Developer. Basic".



demo- « : map(), filter() zip()».








All Articles