** "Ressemble à JavaScript, le cerveau (contenu) est Ruby, (la stabilité est AC / DC)" ** Langage de script Kinx ). Cette fois, ce sont des conseils.
Que faites-vous lorsque vous créez un fichier exécutable? ... oui, vous écrivez et compilez généralement en C ou C ++. J'espère que c'est plus facile à faire.
Kinx ne prend pas en charge la création d'exes indépendants, mais il vous permet de créer des modules qui peuvent être exécutés en tant qu'ex dans le monde Kinx, en faisant semblant d'être des commandes autonomes.
Un peu autour de ça.
kxrepl.exe
, kxtest.exe
En fait, à partir de la version v0.13.1, les commandes «kxrepl.exe» et «kxtest.exe» sont incluses. Dans la version Linux, «.exe» n'est pas attaché, mais «kxrepl» et «kxtest».
Lançons kxrepl
.
$ kxrepl
kinx[ 0]> .quit
REPL a fonctionné.
Vient ensuite kxtest
.
$ kxtest -v -T declaration.md
Test Cout = 11
Entry: doc/spec/statement/declaration.md
Suite: Declaration statement
Case[ 0]: Normal case ................................... successful ( 0.10s)
Case[ 1]: With initializer .............................. successful ( 0.09s)
Case[ 2]: With initializer of expression ................ successful ( 0.09s)
Case[ 3]: Multiple variable declaration ................. successful ( 0.10s)
Case[ 4]: Constant value (1) ............................ successful ( 0.07s)
Case[ 5]: Constant value (2) ............................ successful ( 0.10s)
Case[ 6]: Constant value (3) ............................ successful ( 0.07s)
Case[ 7]: Constant value (4) ............................ successful ( 0.07s)
Case[ 8]: Constant value (5) ............................ successful ( 0.09s)
Case[ 9]: Destructuring assignment (1) .................. successful ( 0.09s)
Case[10]: Destructuring assignment (2) .................. successful ( 0.07s)
<Test Result>
Total Test Cases: 11
Successful : 11
Failed : 0
Warning : 0
SpecTest a fonctionné.
Essayons un autre.
$ diff -s kxrepl kxtest
Files kxrepl and kxtest are identical
** J'ai reçu le message "Les fichiers sont identiques" **. Ou plutôt, c'est vrai. Les deux sont ** exactement les mêmes que binaires **.
--exec
Avant cet exposé, j'écrirai une information sur les options Kinx. Une option appelée --exec
. Comme indiqué dans le README, cette option prend en charge deux options:
--exec: repl
... Exécute REPL.--exec: specttest
... Exécutez SpecTest.Le mécanisme est le suivant.
Ainsi, REPL et SpecTest fonctionnent en recherchant les fichiers lib / exec / repl.kx
et lib / exec / spectre.kx
et en les exécutant, respectivement. Ce mécanisme permet également d'effectuer des modifications REPL et SpecTest sans modifier le binaire.
kxrepl
Maintenant, le binaire kxrepl (= binaire kxtest), comment est-il fait (bien que vous puissiez probablement le deviner). La réponse est la suivante.
name
) (vous pouvez l'obtenir à partir de ʻargv [0]`).Et alors? Il fera automatiquement référence à lib / exec / name.kx
(ou lib / exec / 3rdparty / name.kx
) et l'exécutera!
Ainsi, kxrepl
exécutera automatiquement lib / exec / kxrepl.kx
, et kxtest
exécutera automatiquement lib / exec / kxtest.kx
.
Hmm? Aviez-vous un tel fichier? Oui, je l'ai ajouté (= il y en a). Jetons un coup d'œil au contenu.
lib/exec/kxrepl.kx
using exec.repl;
lib/exec/kxtest.kx
using exec.spectest;
Seulement ça. J'ai préparé un fichier qui «utilise» à l'intérieur et je l'ai réalisé. Cela fonctionne bien car il trouvera repl.kx
et spectest.kx
selon le chemin de recherche de ʻusing. Donc, si vous réécrivez
kxrepl.exe en
repl.exe`, cela fonctionne également.
Alors tu le sais déjà.
Voici comment créer le fichier original ʻexe`. Puisqu'il nécessite la dll Kinx et diverses bibliothèques pour fonctionner, vous devez mettre le «exe »créé au même endroit que« kinx.exe », mais vous pouvez faire ce que vous voulez avec une seule commande. Je vais.
Dans un exemple concret.
kxcat.exe
Créons la commande kxcat
comme quelque chose comme la commande cat
. Sort les fichiers spécifiés dans l'ordre spécifié. Définissons-le sur kxcat
pour que le nom ne chevauche pas la commande cat
. Pour le moment, il n'y a pas d'option, seuls plusieurs fichiers seront acceptés.
lib/exec/3rdparty/kxcat.kx
$$.each {
// Ignoring the script file name.
if (_2 > 0) {
System.print(File.load(_1));
}
};
Maintenant, copions kxtest.exe
et renommons-le. Les commandes sont différentes pour Windows et Linux, mais ce que vous voulez faire est le même.
Windows
$ copy /y kxtest.exe kxcat.exe
Linux
$ cp -f kxtest kxcat
Après la copie, exécutez la commande kxcat
telle quelle!
$ ./kxcat README.md ChangeLog.md
<p align="right">
<img src="https://github.com/Kray-G/kinx/workflows/Unit%20Test/badge.svg?branch=master"/>
<img src="http://img.shields.io/badge/license-MIT-blue.svg?style=flat"/>
</p>
...(réduction)
## V0.1.0 (1st Preview Release)
* Initial Release.
Vous avez terminé.
Si vous voulez l'exécuter avec celui installé, Linux a le binaire de commande kinx
à l'emplacement suivant, donc dans le cas ci-dessus, par exemple, placez la commande kxcat
au même endroit. «kxrepl» et «kxtest» sont également placés au même endroit.
$ which kinx kxrepl kxtest
/usr/bin/kinx
/usr/bin/kxrepl
/usr/bin/kxtest
Vous pouvez l'écrire en C et le compiler pour créer un fichier exécutable, mais vous voulez créer un fichier exécutable que vous avez écrit rapidement dans un script. Cependant, si vous incluez toutes les bibliothèques et dll nécessaires, ce sera assez volumineux, j'ai donc essayé de le diviser en commandes en supposant que Kinx lui-même existe.
Je pense que c'est pratique.
De plus, si vous pouvez le faire immédiatement, par exemple, si vous pouvez spécifier la position de kinx.dll avec une variable d'environnement ou la passer en option, le fichier .exe
lui-même sera bon partout, de sorte que beaucoup de support sera fait à l'avenir. Je peux le faire (si demandé). Par exemple, exécutez «xxx.kx» au même emplacement que «xxx.exe». Est-ce plus pratique? L'emplacement de dll
doit être spécifié d'une manière ou d'une autre.
À la prochaine.