Рубрики
Без рубрики

Ржавчины Python: Основной эксперимент

Думаю ржавчину наслаждайся питоном. Теги от ржавчины, Windassembly, Python.

Некоторые биты

Привязки Python от/к C и C ++, вероятно, являются одной из самых горячей темы для промежуточного/продвинутого инженера Python, пытаясь получить некоторую обработку на профилирование и оптимизацию, а также внутренние возможности виртуальной машины Python. Эти системы низкоуровневой системы, вероятно, являются ребятами, чтобы идти к пониманию стека Python и более широкого С-семейство языка .

Последнее самое известное дополнение к этой семье, вероятно, Rust, Mozilla, поддерживаемый язык, который обеспечивает стабильный API с 2015 года : вокруг его принятия много энтузиазма, и в этой статье я пробую эксперимент, который может предложить одному причинами; Помимо многих других преимуществ, о которых вы уже можете прочитать в Многие другие статьи вокруг Отказ Основные причины, по которым я нахожу мотивацию для изучения ржавчины:

  • Это Multi-Paradigm по дизайну :

(C-подобные конструкции, но и функциональные инструменты рядом с статическими наборами и более) наиболее популярными языками вокруг, предназначены для одной парадигмы в качестве ссылки и пытались справиться, добавив поддержку других парадигм через дополнения к соответствующим стандартным библиотекам. Это, к сожалению, в конечном итоге вступает в смеси, который делает много инженеров неудовлетворенным; Результаты конструкции одной парадигмы обычно являются ограничениями в возможностях экспрессии.

  • Разработано с учетом пользовательский опыт Для всего рабочего процесса/жизненного цикла:

(от установки к выпуску, через тестирование, документация, пакеты управления) большинство языков выросли в своих основных возможностях, прежде чем достичь критической массы, чтобы оправдать разработку инструментов автоматизации/производительности; Это реализовано в пробелы, конфликты и различия в качестве ценных различий между инструментами, используемыми на разных этапах развивающегося опыта.

  • Это обеспечивает лучший уровень интеграции с WebAssembly (WASM) На данный момент и, возможно, в перспективе:

Webassembly достиг стабильного интерфейса, и теперь он является стандартом; Это будет платформа в верхней части которой будет построен веб-программное обеспечение. RUST обеспечивает простым доступом к Wasm, так же просто, как мы собираемся показать в этом эксперименте.

Давайте посмотрим, насколько просто начать проект, создать функцию в Rust, компилируйте библиотеку в Webassembly и, наконец, вызовите эту функцию из Python (YEA! Нет работы над C-привязками со всеми ловушками безопасности памяти и компиляции! Python позвонит родным модулям WASM).

Простым, что имеет значение

Вы можете попробовать этот эксперимент, установив:

  • Рустина : Менеджер цепи на инструментах для навигации по многообразию экосистемы ржавчины
  • груз : Менеджер пакета
  • Rustc : компилятор, работающий вместе с остальной частью стабильной инструментальной инструментарии для вашей машины.

рустик Установите все это для вас!

Давайте начнем:

.1. Добавьте Wasm Tool-цепочку:

 rustup target add wasm32-unknown-unknown

.2. Создайте новый каталог проекта и изменить:

cargo new medium-xp && cd medium-xp 

.3. Создать lib.rs Файл в SRC каталог. Вся код идет SRC , lib.rs где ржавчина держит код корневого библиотека.

.4. Cargo.toml Ваш файл конфигурации пакета, добавьте этот раздел на Cargo.toml файл:

[lib]
crate-type = ["cdylib"]

Это необходимо определить проект как динамическую библиотеку

.5. main.rs Это ваш модуль входа, мы не собираемся использовать его на этот раз, так как мы создаем библиотеку, а не двоичную. В lib.rs Добавьте этот код для нашей функции:

#[no_mangle]
pub extern fn simple_add(a: i32, b: i32) -> i32 { a + b}

.6. Составьте библиотеку для WASM:

cargo build --release --target wasm32-unknown-unknown

Теперь вы найдете свою библиотеку в Цель/WASM32-Unknown-Unknown/Release составлен как модуль WASM!

.7. На стороне Python:

  • Установить Васмер Расширение для Python (проверено на Python 3.6):
 python3.6 -m pip install wasmer
  • Создать Run-wasm-from-python.py Файл с этим скриптом:
from wasmer import Instance
path = ''
with open(path, 'rb') as bytecode:
    wasm_bytes = bytecode.read()
    instance = Instance(wasm_bytes)
    result = instance.exports.simple_add(12, 12)
    print('Modules exported from Rust: ')
    print(instance.exports)  # this will print function's name
    print('call simple_add(12, 12): ')
    print(result)  # 24
  • Запустите этот скрипт с: Python3.6 Run-wasm-from-Python.py.

Если вы сделали все правильно …

Modules exported from Rust: 
["simple_add"]
call simple_add(12, 12): 
24

Это демонстрирует, как это технически возможно сделать Python Inter работает с составленной ржавчиной, используя WASM Отказ Это невероятно просто благодаря мощной конструкции ржавчины и невероятной работы, выполненной на каждом этапе цепочки для инструментов. Как вы могли видеть, все плавно бежит с высоким уровнем повышения производительности. Я оставляю вам соображения о преимуществах и недостатках пытаться оптимизировать тяжелые нагрузки вычислений с ржавчиной, сохраняя динамический подход Python на более высоком уровне. Это было возможно только недавно, так как все интерфейсы и включенные инструменты стабилизировались благодаря большой работе, выполненной разработчиками с открытым исходным кодом по всему миру.

использованная литература

В той же серии

  • Новый эпизод —> Некоторые примеры – 1
  • Новый эпизод —> Флэк-эксперимент

Оригинал: “https://dev.to/tuned/rust-scales-python-basic-experiment-49h0”