Комментарии 14
Если уж ускорять, то с mojo?
Почему такое отличие Си от Си++ ?
А почему в вариантах нет Cython?
хорошая статья, не знал что га ниме действительно так просто сделать биндинги на питон. кстати, вопрос про биндинги к биндингам: есть ли возможность сделать ffi к библиотеки на си, а потом подключить это к питону, чтобы не мучаться с типами cython?
Конечно можно.
Возьмем в пример C-функцию printf:
import nimpy
proc printf(formatstr: cstring) {.importc: "printf", varargs,
header: "<stdio.h>".}
proc callPrintF(formatstr: string) {.exportpy: "printf".} =
printf(cstring(formatstr))
А затем скомпилируем и вызовем printf на стороне Python :)
import mybinds
mybinds.printf("hello, world!")
Автор остановился на половине пути, грустно.
Отлично было бы добавить вишенку на тортик: пишем библиотеку на плюсах, цепляем её в питони и смотрим соотношение nim и чистых плюсов!
Не увидел, что-бы кто-то сказал хоть слово про мypyc, тогда я скажу.
https://github.com/mypyc/mypyc
Основан на линтере mypy, который жёстко заставляет типизировать ваш код. Как я понимаю, именно благодаря этому, учитывая типы и заставляя согласовывать их везде он добивается своей цели.
На выходе выдаёт *.dll ку, которая потом легко подключается обратно в код через import.
Его использовал не сколько для ускорения (не делал даже бенчмаки), сколько для того, чтобы скрыть код на Питоне, когда надо было на удаленную машину клиенту ставить и проводить предварительную демонтстрацию функционала.
Если нужно добавить скорость вычислений в Python, то Rust вам в помощь.
Использование Nim В Python