[Python, Программирование] Ускоряем код на Python с помощью Nim (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
20-Фев-2021 13:32
Привет, хабровчане. В преддверии старта курса "Python Developer. Basic" подготовили для вас перевод интересной статьи. Также приглашаем на открытый вебинар «Карьера для "Python Developer. 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 в приложения на PythonNim поставляется с модулем 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))
Вот и все!Пакет importer позволяет импортировать 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()».

===========
Источник:
habr.com
===========

===========
Автор оригинала: wulf
===========
Похожие новости: Теги для поиска: #_python, #_programmirovanie (Программирование), #_python, #_nim, #_coding, #_computer_science, #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
)
, #_python, #_programmirovanie (
Программирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 08:21
Часовой пояс: UTC + 5