Adventskalender 24. Dezember 2022 - Skriptsprachen

Smalltalk
Antworten
Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Adventskalender 24. Dezember 2022 - Skriptsprachen

Beitrag von mn77de » 24.12.2022 03:27:14

24. Dezember 2022 - Weihnachten
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! :hail:

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". :-D

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. :lol:

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
Was ebenso bei Zahlen funktioniert:

Code: Alles auswählen

12345.length
JayMo verzichtet möglichst auf Overhead, was den Code klarer macht. So werden z.B. Blöcke einfach eingerückt und es ist kein abschließendes Semikolon nötig.

Code: Alles auswählen

a = 3 * 4
If( a >= 5 )
	Print a
So kann ein Skript schnell und einfach mit jedem beliebigen Editor erstellt werden. Syntax-highlighting ist für Pluma/Gedit und mcedit bereits verfügbar.

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"
Für größere Skripte lässt sich eine konkrete Typisierung erzwingen.

Code: Alles auswählen

>strict
Str abc = "Hallo"
Testen
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
Danach noch das Repository hinzufügen:

Code: Alles auswählen

echo "deb http://deb.jaymo-lang.org/stable ./" >> /etc/apt/sources.list
Nun das Paketsystem aktualisieren und JayMo inkl. Komponenten installieren:

Code: Alles auswählen

apt update
apt install jaymo jaymo-lib jaymo-ext jaymo-edit
Starten
Ist JayMo installiert, kann es auch gleich gestartet werden:

Code: Alles auswählen

jaymo
Hier landet man direkt im Command-Line-Interface:
3972
Natürlich können auch Skripte direkt ausgeführt werden:

Code: Alles auswählen

jaymo skript.jmo
Mit JayMo-Edit ist auch ein grafischer Editor verfügbar:

Code: Alles auswählen

jaymo-edit
3973

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
Beispiele

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
Bildbearbeitung
Bild laden, skalieren, spiegeln und als JPG speichern:

Code: Alles auswählen

Image( "foto.jpg" ).scale(640, -1).flipX.writeJPG( "myimage.jpg", 90 )
Quicksort
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
GUI-Anwendung
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
Hier wird ein kleines grafisches Fenster mit einem Button erstellt. Beim Klick auf den Button wird ein Text ausgegeben.

Wem die Java-Oberfläche nicht gefällt und wer lieber eine native Oberfläche hat, der kann das Prefix "Swing" durch "SWT" ersetzen. :wink:

Hilfe
In die neue Version ist nun eine Hilfe integriert. Mit einem Fragezeichen kann nach verfügbaren Typen (Klassen) gesucht werden: Ist der Typ gefunden, so lassen sich auch alle verfügbaren Funktionen auflisten:

Code: Alles auswählen

?Input.
Anwendungsfälle
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, ...
Ausblick
Es ... gibt noch viel zu tun. :lol:
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. 8)

Auf alle Fälle wünsche ich FROHE WEIHNACHTEN!!!
Zuletzt geändert von mn77de am 21.02.2023 07:31:41, insgesamt 5-mal geändert.
OpenSource! :THX:

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender 24. Dezember 2022 - Skriptsprachen

Beitrag von Meillo » 24.12.2022 08:20:53

8O

Da faellt mir nur eines ein: WOW! :THX:
Use ed once in a while!

Benutzeravatar
paedubucher
Beiträge: 850
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Adventskalender 24. Dezember 2022 - Skriptsprachen

Beitrag von paedubucher » 24.12.2022 12:03:51

Das dürfte wohl das Kalendertürchen mit der längsten Vorlaufzeit sein :THX:

Interessant finde ich, was heutzutage alles so dazugehört, wenn man eine Programmiersprache machen will. Ein Compiler mit Dokumentation reicht dazu nicht mehr; es braucht auch eine Sandbox-Umgebung für den Browser und Definitionen für das Syntax-Highlighting. (Ein Language Server Protocol hast du noch nicht definiert dafür? :mrgreen: )

Das wäre ein lustiges Projekt für den Berufsschulunterricht; d.h. so in der letzten Woche vor den Sommerferien. Einfach eine Programmiersprache in einer Stunde kennenlernen und ausprobieren. Ich komme gerne darauf zurück!
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Antworten