Heute habe ich die Ehre, das 24. Türchen zu präsentieren und damit den diesjährigen Adventskalender abzuschließen.
Davor möchte ich mich allerdings bei "uname" für die tolle Idee mit dem Adventskalender und bei allen Mitwirkenden für die informativen und teils sehr aufwändigen Beiträge bedanken.
Danke an: paedubucher, TRex, Tuxpeter, Meillo, smutbert, dasebastian, schorsch_76, spiralnebelverdreher und heisenberg.
In jedem Beitrag steckt viel Zeit der Recherche, Auseinandersetzung und Aufbereitung. Danke allen dafür!
Das heutige Türchen: "Skriptsprachen"
Ich programmiere mittlerweile seit über 35 Jahren und es fasziniert mich nach wie vor, dem Computer sagen zu können was er tun soll.
Auf meinem Weg habe ich zwangsläufig schon viele Sprachen aktiv verwendet und nebenher neugierig alle verfügbaren Sprachen ausprobiert. Von Basic, C, Pascal, über Java und C++, bis hin zu Ruby, Go, Julia, und so abenteuerliche Sprachen wie "Brainfuck".
Irgendwann war ich auf der Suche nach einem für mich stimmigen Ersatz für "Bash". Kompilierte Sprachen schieden dabei natürlich aus, da zu unflexibel.
Also eine interpretierte Skriptsprache. Perl, Python, PHP, Julia, Lua, Javascript, Ruby, ... klar ... aber irgendwie entsprach nichts meinen Vorstellungen.
So fragte ich mich eines Tages, was ich denn eigentlich suche und wie "meine" Sprache aussehen müsste ... so entstand im Dezember 2017 "JayMo".
Und ich hätte damals nicht gedacht, dass daraus mal ein solches Mammut-Projekt werden würde.
Nach mittlerweile 5 Jahren Entwicklung, hunderten ... unendlich vielen Stunden, vielen Tests und unzähligen Entscheidungen ... präsentiere ich hier nun ...
... meine eigene Skript-Sprache mit dem Namen "JayMo"!
JayMo ist ein bunter Mix aus Java, Lua, Python, PHP, Ruby und vielen eigenen Ideen.
Der Fokus lag dabei auf: Einfach, schlank und flexibel.
JayMo
In JayMo gibt es nur Objekte, welche verschiedene Funktionen, Events und Eigenschaften haben. So ist eine einfache Zahl (123) genau so ein Objekt wie eine If-Anweisung. Dies ermöglicht einerseits eine durchgängie Syntax, andererseits hat man immer alles Wichtige zur Hand.
Um z.B. die Länge eines Strings zu ermitteln, reicht ein einfaches:
Code: Alles auswählen
"foo".length
Code: Alles auswählen
12345.length
Code: Alles auswählen
a = 3 * 4
If( a >= 5 )
Print a
Zudem ist JayMo so aufgebaut, dass sich Neueinsteiger (hoffentlich) schnell zurecht finden, während fortgeschrittene Anwender eine große Tiefe erforschen können.
Die Typisierung erfolgt in JayMo automatisch beim Zuweisen eines Objekts.
Code: Alles auswählen
abc = "Hallo"
Code: Alles auswählen
>strict
Str abc = "Hallo"
Wer JayMo ausprobieren möchte, kann dies direkt auf der Projekt-Webseite in einer etwas eingeschränkten Sandbox tun: https://www.jaymo-lang.org/de/testen
Dort befinden sich weiter unten auch noch ein paar Kurz-Infos.
Für den Einstieg empfehle ich das Simple-Cheat-Sheet mit den wichtigsten Kommandos herunterzuladen.
https://files.jaymo-lang.org/sheet/JayM ... Simple.pdf
Auf der Webseite befindet sich unter "Information" ebenso noch ein Tutorial, eine Dokumentation und die Referenz.
https://www.jaymo-lang.org
Installation (als Root)
JayMo kann über das Repository der Projekt-Seite installiert werden.
Dazu muss zuerst der GPG-Schlüssel heruntergeladen werden:
Code: Alles auswählen
cd /etc/apt/trusted.gpg.d/
wget http://deb.jaymo-lang.org/jaymo.archive.key.2022.gpg
Code: Alles auswählen
echo "deb http://deb.jaymo-lang.org/stable ./" >> /etc/apt/sources.list
Code: Alles auswählen
apt update
apt install jaymo jaymo-lib jaymo-ext jaymo-edit
Ist JayMo installiert, kann es auch gleich gestartet werden:
Code: Alles auswählen
jaymo
Natürlich können auch Skripte direkt ausgeführt werden:
Code: Alles auswählen
jaymo skript.jmo
Code: Alles auswählen
jaymo-edit
Features
Es würde definitiv den Rahmen sprengen, alle Funktionen und Möglichkeiten von JayMo zu erklären.
Integriert sind z.B.:
- Bildbearbeitung
- Java-Compiler
- FTP-Client
- Client für MariaDB, und weitere Datenbanken
- TCP, UDP, NTP, SNTP, HTTP, ...
- Wiki-Engine
- PDF erstellen
- Sprachausgabe
Dateien auslesen
Gerade Text-Dateien können mit JayMo sehr einfach ausgewertet werden.
Hier wird eine Datei geladen, in Zeilen zerlegt, diese sortiert, doppelte entfernt, dann jede Zeile ...
... getrimmt, in Kleinbuchstaben umgewandelt, davor ein ">" eingefügt, vor der ersten Pipe oder Klammer abgeschnitten und ausgegeben.
Code: Alles auswählen
File( "demo.txt" ).lines.sort.uniq.each.trim.lower.begin( ">" ).beforeFirst( '|', '(' ).print
Bild laden, skalieren, spiegeln und als JPG speichern:
Code: Alles auswählen
Image( "foto.jpg" ).scale(640, -1).flipX.writeJPG( "myimage.jpg", 90 )
Der bekannte Quicksort-Algorithmus lässt sich in 4 (möglich sind sogar 3) Zeilen schreiben:
Code: Alles auswählen
::qsort(List l)
If( l.length <= 1 )
Return l
Return this.qsort( l.start(2).filter( each <= l[1] )).add( l[1] ).concat( this.qsort( l.start(2).filter( each > l[1] )))
tl = [16, 23, 14, 7, 21, 20, 6, 1, 17, 13, 12, 9, 3, 19]
this.qsort( tl.print ).print
Es fehlen noch viele Widgets, aber es ist bereits möglich kleine Anwendungen mit GUI zu programmieren.
Code: Alles auswählen
>prefix = "SWT"
button = _Button( "Klick mich!" )
button::@select
Print "Yeah!!!"
_Main.add( button ).size( 400, 300 ).title( "Push me!" ).run
Wem die Java-Oberfläche nicht gefällt und wer lieber eine native Oberfläche hat, der kann das Prefix "Swing" durch "SWT" ersetzen.
Hilfe
In die neue Version ist nun eine Hilfe integriert. Mit einem Fragezeichen kann nach verfügbaren Typen (Klassen) gesucht werden:
Code: Alles auswählen
?In
Code: Alles auswählen
?Input.
Wofür ich JayMo derzeit einsetze:
- Verwaltung meines BrickLink-Shops
- PDF-Rechnung generieren
- Offline generieren von statischen Webseiten aus Vorlagen mit Wiki-Syntax
- Umsetzung eines kleinen Spiels mit grafischer Oberfläche
- Aufbereiten der JayMo-Referenz-Daten
- Als Taschenrechner
- ... für unzählige weitere kleine Aufgaben, Tools, Helferchen, ...
Es ... gibt noch viel zu tun.
Das Projekt entwickelt sich stetig weiter, allerdings sind meine Kapazitäten begrenzt. Und für ein Ein-Mann-Projekt ist dies wirklich ein Mammut-Projekt!
Unterstützung und Feedback sind somit gerne willkommen.
Generell wünsche ich mir, dass JayMo auch von anderen eingesetzt wird und dass sich das Projekt gut weiter entwickelt.
JayMo ist übrigens frei und unter LGPL und GPL lizenziert.
Fragen
Nun ... dies war viel Information meinerseits. Ich bin sehr gespannt auf Euer Feedback und Eure Fragen.
Auf alle Fälle wünsche ich FROHE WEIHNACHTEN!!!