[JAVA] Kinx-Tipps - Erstellen Sie eine ausführbare Datei

Kinx-Tipps - Erstellen Sie eine ausführbare Datei

Einführung

** "Sieht aus wie JavaScript, Gehirn (Inhalt) ist Ruby, (Stabilität ist AC / DC)" ** Skriptsprache Kinx ). Diesmal sind Tipps.

Was macht ihr, wenn ihr eine ausführbare Datei erstellt? ... ja, normalerweise schreiben und kompilieren Sie in C oder C ++. Ich hoffe es ist einfacher zu machen.

Kinx unterstützt das Erstellen unabhängiger Exes nicht, ermöglicht jedoch das Erstellen von Modulen, die als Exes in der Kinx-Welt ausgeführt werden können und sich als eigenständige Befehle ausgeben.

Ein bisschen darum herum.

Befehle kxrepl.exe, kxtest.exe

Ab der Version v0.13.1 sind die Befehle "kxrepl.exe" und "kxtest.exe" enthalten. In der Linux-Version ist ".exe" nicht angehängt, sondern "kxrepl" und "kxtest".

Lassen Sie uns kxrepl ausführen.

$ kxrepl
kinx[  0]> .quit

REPL hat funktioniert.

Als nächstes kommt 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 hat funktioniert.

Versuchen wir es mit einem anderen.

$ diff -s kxrepl kxtest
Files kxrepl and kxtest are identical

** Ich habe die Meldung "Dateien sind gleich" **. Oder besser gesagt, das stimmt. Die beiden sind ** genau das gleiche wie binär **.

Apropos --exec Option

Vor diesem Vortrag möchte ich eine Information über Kinx-Optionen schreiben. Eine Option namens "--exec". Wie in der README-Datei angegeben, unterstützt diese Option zwei Optionen:

Der Mechanismus ist wie folgt.

  1. Suchen Sie nach dem Erkennen von "--exec: xxx" im Ordner mit der ausführbaren Kinx-Datei nach "lib / exec / xxx.kx" oder "lib / exec / 3rdparty / xxx.kx".
  2. Wenn die Datei vorhanden ist, nehmen Sie an, dass die Datei als Skriptdatei angegeben ist, und führen Sie sie aus.

REPL und SpecTest arbeiten also, indem sie nach den Dateien "lib / exec / repl.kx" und "lib / exec / spectrum.kx" suchen und diese ausführen. Mit diesem Mechanismus können auch REPL- und SpecTest-Änderungen vorgenommen werden, ohne die Binärdatei zu ändern.

kxrepl

Nun, die kxrepl-Binärdatei (= kxtest-Binärdatei), wie wird sie erstellt (obwohl Sie wahrscheinlich raten können). Die Antwort lautet:

  1. Holen Sie sich Ihren eigenen ausführbaren Dateinamen (sagen wir "Name") (Sie können ihn von "argv [0]" erhalten).
  2. Aktualisieren Sie die Argumentliste, indem Sie am Anfang des Befehlszeilenarguments "--exec: name" einfügen.
  3. Übergeben Sie die Steuerung an die Hauptlogik von Kinx.

Was ist dann mit? Es wird automatisch auf "lib / exec / name.kx" (oder "lib / exec / 3rdparty / name.kx") verwiesen und ausgeführt!

"Kxrepl" führt also automatisch "lib / exec / kxrepl.kx" aus, und "kxtest" führt automatisch "lib / exec / kxtest.kx" aus.

Hmm? Hattest du eine solche Datei? Ja, ich habe es hinzugefügt (= es gibt). Werfen wir einen Blick auf den Inhalt.

lib/exec/kxrepl.kx


using exec.repl;

lib/exec/kxtest.kx


using exec.spectest;

Nur das. Ich habe eine Datei vorbereitet, die nur "verwendet" und realisiert. Es findet "repl.kx" und "spectest.kx" gemäß dem Suchpfad von "using", was gut funktioniert. Wenn Sie also "kxrepl.exe" in "repl.exe" umschreiben, funktioniert dies ebenfalls.

Du weißt es also schon.

Lassen Sie uns eine originelle "Exe" machen

Hier erfahren Sie, wie Sie die ursprüngliche "exe" -Datei erstellen. Da für den Betrieb eine Kinx-DLL und verschiedene Bibliotheken erforderlich sind, müssen Sie die erstellte "exe" an derselben Stelle wie "kinx.exe" platzieren, aber Sie können mit einem einzigen Befehl tun, was Sie wollen. Ich werde.

In einem konkreten Beispiel.

kxcat.exe

Lassen Sie uns den Befehl kxcat als so etwas wie den Befehl cat erstellen. Gibt die angegebenen Dateien in der angegebenen Reihenfolge aus. Setzen wir es auf "kxcat", damit sich der Name nicht mit dem Befehl "cat" überschneidet. Derzeit gibt es keine Option, es werden nur mehrere Dateien akzeptiert.

lib/exec/3rdparty/kxcat.kx


$$.each {
    // Ignoring the script file name.
    if (_2 > 0) {
        System.print(File.load(_1));
    }
};

Kopieren wir nun kxtest.exe und benennen es um. Die Befehle sind für Windows und Linux unterschiedlich, aber was Sie tun möchten, ist dasselbe.

Windows


$ copy /y kxtest.exe kxcat.exe

Linux


$ cp -f kxtest kxcat

Führen Sie nach dem Kopieren den Befehl kxcat so aus, wie er ist!

$ ./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>

...(Kürzung)

## V0.1.0 (1st Preview Release)

*   Initial Release.

Sie sind fertig.

Wenn Sie es mit dem installierten ausführen möchten, hat Linux die Binärdatei "kinx" an der folgenden Position. Platzieren Sie beispielsweise im obigen Fall den Befehl "kxcat" an derselben Position. kxrepl und kxtest werden ebenfalls an derselben Stelle platziert.

$ which kinx kxrepl kxtest
/usr/bin/kinx
/usr/bin/kxrepl
/usr/bin/kxtest

abschließend

Es ist in Ordnung, es in C zu schreiben und zu kompilieren, um eine ausführbare Datei zu erstellen, aber Sie möchten eine ausführbare Datei erstellen, die Sie schnell in ein Skript geschrieben haben. Wenn Sie jedoch alle erforderlichen Bibliotheken und DLLs einschließen, ist diese recht groß. Daher habe ich versucht, sie unter der Annahme, dass Kinx selbst vorhanden ist, in Befehle zu unterteilen.

Ich denke, das ist bequem.

Wenn Sie dies sofort tun können, z. B. wenn Sie die Position von kinx.dll mit einer Umgebungsvariablen angeben oder als Option übergeben können, ist die Datei ".exe" selbst überall gut, sodass in Zukunft viel Unterstützung geleistet wird. Ich kann es tun (wenn gewünscht). Führen Sie beispielsweise "xxx.kx" am selben Speicherort wie "xxx.exe" aus. Ist das bequemer? Der Speicherort von dll muss auf irgendeine Weise angegeben werden.

Bis zum nächsten Mal.

Recommended Posts

Kinx-Tipps - Erstellen Sie eine ausführbare Datei
Erstellen Sie eine Excel-Datei mit poi