Hypo Comme le titre l'indique, je l'ai tellement fait que c'est une publicité.
Vous ne le connaissez peut-être pas en premier lieu, mais Hy est un ** dialecte Lisp qui fonctionne sur une machine virtuelle Python **. Par exemple, si vous lisez Squid Lisp: Hy écrit en Python, vous pouvez comprendre l'atmosphère. Vous pouvez le comprendre comme la ** version Clojure Python ** pour JVM. Ou plutôt, ** cela ressemble à Clojure **, vous pouvez donc mettre en évidence la syntaxe avec markdown ou ReST pour la putain de langue mineure.
Hy lui-même peut être exécuté avec un interpréteur dédié, mais la surcharge de l'analyse syntaxique n'est pas bonne. Par conséquent, il est bon d'utiliser la commande jointe hyc
après l'avoir convertie en un fichier .pyc
(script Python compilé par octets). Il est également possible de le convertir en fichier .py
en utilisant la même commande jointe hy2py
, mais ** en général, il ne peut pas être utilisé tel quel **. Par conséquent, il ne peut être utilisé qu'à des fins de débogage. En effet, les AST Python générés par Hy ont souvent des noms de symboles qui ne sont normalement pas disponibles en Python. (Par exemple, le nom de variable généré par gensym
commence par:
)
Ce qui précède n'est pas très bon lorsque vous souhaitez écrire une petite application qui simplifie vos tâches quotidiennes en utilisant Hy. C'est une histoire que vous n'avez qu'à écrire un Makefile dès que vous hyc
, mais ce n'est pas si cool **. De plus, pour Pythonista, c'est un peu désagréable de voir le fichier .pyc
tous les jours **.
Ensuite, ** Le code source Hy est mis ensemble dans un format exécutable ** a été créé, donc cet article a été créé. ** Sujet principal **.
S'il vous plaît de PyPI.
$ sudo pip install hypo
$ hypo -o Nom de sortie Fichier source 1 Fichier source 2..
Il est utilisé comme ça. Si l'option -o
est omise, la sortie sera nommée ʻa. Au fait, le point d'entrée de l'application est ici le
fichier source 1`. Notez que seuls les fichiers «.hy» sont acceptés pour l'entrée. Le résultat est zipapp Cordialement, c'est un fichier d'archive, mais comme il a reçu l'autorisation d'exécution à l'avance, vous pouvez le considérer comme un binaire d'exécution. ne pas.
Par exemple, essayez de créer une application composée des deux fichiers suivants.
main.hy
(import [iota [iota]])
(defmain [&rest args]
(print (iota 10)))
iota.hy
(defn iota [m &optional [n 0] [step 1]]
(if (>= n m)
None
(cons n (iota m (+ n step) step))))
À propos, ces codes sont les suivants en Python.
main.py
from iota import iota
if __name__ == '__main__':
print(iota(10))
iota.py
def iota(m, n=0, step=1):
if n >= m:
return ()
return (n, ) + iota(m, n + step, step)
Normalement, la récursivité n'est pas utilisée en Python, mais les langages fonctionnels sont récursifs. Cependant, comme il ne s'agit pas de ** récurrence de queue **, je refuserai que ce soit un code qui ne soit pas bon pour Lisper. hylang.org/en/latest/contrib/loop.html) Utilisez la macro.
Alors, revenons au sujet principal. Exécutez la commande suivante à partir du terminal. Cette fois, nous allons le construire avec le nom «exemple».
$ hypo -o example main.hy iota.hy
Ensuite, un fichier appelé «exemple» sera créé dans le répertoire courant, alors essayez de l'exécuter.
$ ./example
(0L 1L 2L 3L 4L 5L 6L 7L 8L 9L)
Le contenu de main.hy
est exécuté. À ce stade, le fichier compilé en .pyc
est appelé à l'intérieur du fichier d'exécution, il est donc un peu plus rapide que de s'exécuter à partir de l'interpréteur Hy. De plus, c'est ** spécifications Hy ** que la sortie numérique n'est pas bonne.
J'ai présenté comment utiliser ** Le code source Hy est assemblé dans un format exécutable ** avec un sentiment de malice. Il ne convient pas pour faire des applications à très grande échelle, mais j'espère que vous l'utiliserez. C'est un package écrit en quelques heures pour tuer le temps en vacances, donc si vous avez des bogues ou des demandes, veuillez faire pull request [issue](https: // github.com/koji-kojiro/hylang-hypo/issues) Veuillez le lancer. Merci d'avoir lu jusqu'ici.