Apprenez Nim avec Python (dès le début de l'année).

Aujourd'hui, je vais exposer mon mémorandum d'apprentissage de Python avec Nim à mes frères aînés qui utilisent C ++ / objective-c dans la pratique ou qui sont Pythonista. ... Dès le début de l'année, vous travaillerez avec du Big Data en Python + C. J'avais l'impression que cela ne fonctionnerait pas même si j'utilisais nim, et j'en suis reconnaissant.

Une des fonctionnalités du langage de compilation Nim (anciennement Nimrod)

L'ancien Nimrod, Nim, est en cours de développement depuis 2008 environ. Pour que les utilisateurs de Python comprennent ses fonctionnalités, je pense qu'il serait préférable de jeter un œil au code suivant dans la version japonaise de wikipedia, nim.

wikipedia.nim


proc reverse(s: string): string =
  result = "" #Variable de résultat implicite
  for i in countdown(high(s), 0):
    result.add s[i]

var str1 = "Reverse This!"
echo "Reversed: ", reverse(str1)

Un petit commentaire de wikipedia:

Bien que Nim soit un langage de compilation typé, il peut être écrit comme un langage de script.

Il semble que Nim ait commencé à être connu au Japon autour du blog il y a environ cinq ans par Takano32, "Écrivons FizzBuzz avec Nimrod!".

Takano32, un committer Ruby, a alors immédiatement publié une entrée, "Comment puis-je utiliser Python avec Nimrod!?"

Oui, il y a pas mal de gens qui essaient d'utiliser python et nim ensemble (qu'en est-il de la relation entre ruby et nim?).

Donc, cette fois, j'aimerais appeler nim de python et réfléchir à la façon de l'utiliser.

* Donc, si vous êtes un utilisateur de python intéressé par nim, qui a la même vitesse d'exécution que le langage C, et non comme un cheval, veuillez lire le code source de nim et le document original et le publier sur le blog. .. Je serai sauvé ^ _ ^ *

Appelez nim depuis python.

En gros, si vous suivez Connecting Nim to Python, ce sera rapide. Ce que nous faisons, c'est créer une soi-disant bibliothèque partagée en langage C à partir du code source de nim. Les binaires dépendent de l'environnement d'exécution. Voici un exemple sur Mac. Si vous avez xcode et la dernière infusion, il vous suffit d'installer nim comme suit.

brew install nim

Tout d'abord, préparez le code nim avec une seule procédure (fonction),

fn1.nim


proc summer*(x, y: float): float {. exportc, dynlib .} =
  result = x + y

Ci-dessous, il sera transformé en une bibliothèque partagée.

nim c --app:lib fn1.nim

Le code python qui appelle la libfn1.dylib générée est ci-dessous (en utilisant python2.7, qui est inclus dans le Mac depuis le début). Puisqu'il s'agit d'un appel de bibliothèque partagée en langage C, utilisez ctypes.

py2nim1.py


from ctypes import *

def main():
    test_lib = CDLL('./libfn1.dylib')

    # Function parameter types
    test_lib.summer.argtypes = [c_double, c_double]

    # Function return types
    test_lib.summer.restype = c_double

    sum_res = test_lib.summer(1.0, 3.0)
    print('The sum of 1.0 and 3.0 is: %f'%sum_res)

if __name__ == '__main__':
    main()

Si vous faites attention au double type dans l'environnement 64 bits, vous pouvez obtenir la réponse "4.0" de nim.

Est-il utilisé, par exemple, dans un système de traitement par lots en interne?

Si l'environnement n'est pas obscène, comme numpy, pypy, micropython, R18python ..., et que des termes py spécialisés sont utilisés à la recherche de la vitesse d'exécution, nim peut être capable de se fondre en douceur. Même si ce n'est pas le cas, "Hé, regarde ça, toi. Que pensez-vous de ce type? »-Si vous avez un environnement comme« C'est vraiment gros ... (calcul) », il est possible de contester le processus avec python + langage C + nim Il semble que.

Depuis environ 20 ans, quand c'était une langue mineure, d'innombrables codes ont été écrits par des hommes féroces, et il existe divers "arts" en python. Par exemple, l'environnement Mac inclut une bibliothèque d'appel pour Objective-c (++) appelée PyObjC, et vous pouvez immédiatement appeler nim tout en appelant une interface graphique écrite en Objective-c avec python. La description de l'appel GUI côté python étant longue, mettez le code dans gist.

Exemple d'exécution: スクリーンショット 2016-12-15 05.12.54.png

Créer une interface graphique permettant aux utilisateurs d'appeler une bibliothèque de calcul écrite en nim est beaucoup plus facile avec python. Le langage de compilation, nim, peut se concentrer sur les descriptions de traitement de données qui appellent C / C ++, qui a une forte affinité, le cas échéant.

Continuer

... et j'ai écrit sur le rapport et le bon sens du nim, qui est maintenant limité au langage matériel. Mais, grand frère, ne t'inquiète pas. Avec cela comme point de départ, j'écrirai prochainement un article sur le sujet de l'IdO.

Recommended Posts

Apprenez Nim avec Python (dès le début de l'année).
Notes d'apprentissage depuis le début de Python 1
Notes d'apprentissage depuis le début de Python 2
Étude depuis le début de Python Hour1: Hello World
Étude de Python Hour8: Utilisation de packages
First Python 3 ~ Le début de la répétition ~
Existence du point de vue de Python
Appelez python de nim avec Nimpy
Apprenez les bases de Python ① Débutants élémentaires
[Python] Comprenez la classe self. Apprenez le rôle de soi à partir du résultat de l'exécution avec ou sans soi.
Vérifier l'existence du fichier avec python
Omettre la nomenclature depuis le début de la chaîne
Je veux sortir le début du mois prochain avec Python
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
Apprenez le modèle de conception "Singleton" avec Python
Apprenez intuitivement la refonte de Python np
Apprenez le modèle de conception "Façade" avec Python
Récupérer le contenu de git diff depuis python
Préparer l'environnement d'exécution de Python3 avec Docker
Mathématiques Todai 2016 résolues avec Python
[Note] Exportez le html du site avec python.
Calculez le nombre total de combinaisons avec python
Vérifiez la date du devoir de drapeau avec Python
Trouver le début de l'avenomics à partir du grossissement NT 2
Convertir le code de caractère du fichier avec Python3
Trouver le début de l'avenomics à partir du grossissement NT 1
[Python] Déterminez le type d'iris avec SVM
Le début de cif2cell
Apprenez Python avec ChemTHEATER
le zen de Python
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
Le mur lors du passage du service Django de Python 2.7 à la série Python 3
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Détruire l'expression intermédiaire de la méthode sweep avec Python
Visualisez la gamme d'insertions internes et externes avec python
Compréhension mathématique de l'analyse en composantes principales depuis le début
Récupérer le code retour d'un script Python depuis bat
Points Python du point de vue d'un programmeur en langage C
Calculer le coefficient de régression d'une analyse de régression simple avec python
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Résumé du flux de base de l'apprentissage automatique avec Python
Analyse des composants principaux à l'aide de python de nim avec nimpy
Obtenez l'état de fonctionnement de JR West avec Python
Installez le dernier Python de pyenv installé par homebrew
[Bases de la science des données] Collecte de données depuis RSS avec python
De l'état initial de CentOS8 à l'exécution de php python perl ruby avec nginx
Extraire des images et des tableaux de pdf avec python pour réduire la charge de reporting
Appelez l'API avec python3.
Commencer avec l'apprentissage automatique Python
À propos des fonctionnalités de Python
Avec skype, notifiez avec skype de python!
Le pouvoir des pandas: Python
J'ai essayé de trouver l'entropie de l'image avec python
Essayez de gratter les données COVID-19 Tokyo avec Python
Remarque DJango: depuis le début (Simplification et fractionnement d'URLConf)
Extraire le modèle du fichier EML enregistré depuis Thunderbird avec python3.7
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall