[JAVA] Conseils Kinx - Créer un fichier exécutable

Conseils Kinx - Créer un fichier exécutable

introduction

** "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.

Commandes 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 **.

Parler de l'option --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:

Le mécanisme est le suivant.

  1. Après avoir reconnu «--exec: xxx», recherchez «lib / exec / xxx.kx» ou «lib / exec / 3rdparty / xxx.kx» dans le dossier contenant le fichier exécutable Kinx.
  2. Si le fichier existe, supposez que le fichier est spécifié comme fichier de script et exécutez-le.

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.

  1. Obtenez votre propre nom de fichier exécutable (disons name) (vous pouvez l'obtenir à partir de ʻargv [0]`).
  2. Mettez à jour la liste d'arguments en insérant «--exec: name» au début de l'argument de ligne de commande.
  3. Passez le contrôle à la logique principale de Kinx.

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à.

Faisons le ʻexe` original

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

en conclusion

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.

Recommended Posts

Conseils Kinx - Créer un fichier exécutable
Créer un fichier Excel avec POI