Un joli nimporter qui connecte nim et python

Module qui connecte nim + python de Saitsuyo

Je voudrais vous présenter un module appelé nimporter car il était très émouvant. Non, l'introduction elle-même est peut-être la nième décoction, mais il semble qu'elle ne soit pas bien connue. https://github.com/Pebaz/Nimporter En bref, c'est le gars qui exécute le code ultra-rapide de nim en python comme un interpréteur.

Voici un extrait de l'exemple officiel, mais le code nim ressemble à ceci:

import nimpy

proc add(a: int, b: int): int {.exportpy.} =
    return a + b

Le code python est comme ci-dessous

# Nimporter is needed prior to importing any Nim code
import nimporter, nim_math

print(nim_math.add(2, 4))  # 6

Si vous l'écrivez, ** il sera compilé automatiquement et importé **. Non, c'est vraiment une langue d'interprétation! Ce sera.

Comparaison de vitesse promise

Osons calculer la séquence de nombres de Fibonacci par récurrence lente. Le code pour nim est ci-dessous.

fibnim.nim


import nimpy
proc fib(n: int): float {.exportpy.}=
    if n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)

Pour python, voir ci-dessous.

fibpy.py


def fib(n: int) -> float:    
    if n == 1:
        return 0.
    elif n == 2:
        return 1.
    else:
        return fib(n - 1) + fib(n - 2)

... Mais ça ressemble à Kusso. Importons ces deux avec python et comparons-les.

import fibpy
import nimporter, fibnim
from time import time
cycle = 36
t = time()
print(fibnim.fib(cycle))
print('Time of nim is {} sec'.format(str(time() - t)))
t = time()
print(fibpy.fib(cycle))
print('Time of python is {} sec'.format(str(time() - t)))

>>> 9227465.0
>>> Time of nim is 0.026133298873901367 sec
>>> 9227465.0
>>> Time of python is 3.1436727046966553 sec

Il faut du temps pour compiler la première fois, mais après la deuxième fois, c'est 100 fois ou plus.

Cython est-il inutile en premier lieu?

Pas mal. Plutôt le premier candidat. cython est également devenu assez facile à utiliser ces jours-ci Si vous alimentez python avec des indices de type en mode python pur, vous pouvez migrer depuis python sans aucune modification. [^ ikou]

[^ ikou]: En fait, si vous ne faites pas de votre mieux pour régler, ce ne sera peut-être pas plus rapide

cythonize -i hoge.py

Vous pouvez créer un module comme celui-là, mais est-ce gênant de devoir revenir une fois à bash? Aussi, cython utilise parfois python, donc Je pense qu'il y a des moments où il est inopinément gênant lors de l'optimisation pour les copeaux.

Recommended Posts

Un joli nimporter qui connecte nim et python
Créez le code qui renvoie "A et prétendant B" en python
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Python a + = b et a = a + b sont différents
Ceci et cela des propriétés python
[Python] renvoie A [ou / et] B
l'expression régulière de python, str et unicode sont sobres et addictives
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
Un guide rapide de PyFlink qui combine Apache Flink et Python
Un script python qui supprime les fichiers ._DS_Store et ._ * créés sur Mac
[Python] Un programme qui crée des escaliers avec #
Un mémo contenant Python2.7 et Python3 dans CentOS
Connectez beaucoup de Python ou et et
Un programme python qui redimensionne une vidéo et la transforme en image
[Python] Créez un LineBot qui s'exécute régulièrement
Une histoire sur Python pop and append
Un monde typé qui commence par Python
Un programme qui utilise Python pour lire des fichiers indésirables
[Python] Quand, où, qui et quel jeu en utilisant des expressions régulières
[Python] Un programme qui arrondit le score
[Python, PyPDF2] Un script qui divise un PDF étalé en deux à gauche et à droite
Script Python qui lit les fichiers SQL, exécute BigQuery et enregistre le csv
[Python] J'ai créé un LINE Bot qui détecte les visages et effectue le traitement de la mosaïque.
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
[Python] Un programme qui trouve les valeurs minimales et maximales sans utiliser de méthodes
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
Organisez les modules et les packages Python dans le désordre
Un mémo que j'ai écrit un tri rapide en Python
[Python] Un outil qui permet une importation relative intuitive
Construire un environnement python avec virtualenv et direnv
[Python / Tkinter] Une classe qui crée un cadre défilable
ffmpeg-Construisez un environnement python et divisez la vidéo
J'ai écrit une classe en Python3 et Java
Créer une page qui se charge indéfiniment avec python
Un programme qui supprime les instructions en double en Python
Pourquoi je suis une boutique Java et démarre Python
Publier un module Python qui calcule les éléments météorologiques
Créer une carte Web en utilisant Python et GDAL
"Kit Python" qui appelle des scripts Python depuis Swift
Lancer un serveur Web avec Python et Flask
Python: créer une classe qui prend en charge l'affectation décompressée
Écrivons un programme Python et exécutons-le
python memo- "sinon A et B" était "si (pas A) et B"
Plug-in Vim qui formate automatiquement les styles Python
Une histoire sur la modification de Python et l'ajout de fonctions
[Python] Une compréhension approximative des itérables, des itérateurs et des générateurs
Prise en compte des forces et faiblesses de Python
Un programme qui demande quelques kilogrammes pour atteindre l'IMC et le poids standard [Python]
Créez un bot discord qui notifie unilatéralement avec python (seuls les requêtes et json sont utilisés)
Une application cliente python qui télécharge et supprime des fichiers de S3 en spécifiant un compartiment
Un script qui combine vos modules et binaires Python préférés en une seule couche Lambda
[Python] Un bloc-notes qui traduit et télécharge le fichier ipynb de GitHub en japonais.
Une histoire que Seaborn était facile, pratique et impressionnée
[Python] Un programme qui compte le nombre de vallées
Python: création d'un environnement virtuel (venv), démarrage et arrêt
Essayez de créer un fichier compressé en utilisant Python et zlib
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Écrivons du code python qui analyse le code go et génère du code go