** "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.
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 **.
--exec
OptionVor 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:
--exec: repl
... REPL ausführen.--exec: specttest
... Führen Sie SpecTest aus.Der Mechanismus ist wie folgt.
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:
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.
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
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.