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é ^ _ ^ *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.
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:
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.
... 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