Ich sehe eure Gedanken praktisch schon vor mir: "Noch jemand mit (s)einer Scriptsprache, haben wir nicht schon genug?" oder "Hat er nicht genug andere (unvollendete) Projekte?"
Beides mag stimmen, allerdings arbeite ich an Lizard bzw. deren Vorgängerversionen seit knapp 8 Jahre, sodass es ehr das Projekt Lizard war, was immer wieder von mir pausiert wurde. Des Weiteren unterscheidet sich Lizard deutlich von anderen Scriptsprachen, wie ihr weiter unten in den Features sehen könnt. Lizard ist sehr stark an das mathematisch-naturwissenschaftliche Programm Mathematica orientiert. Lizard soll es ermöglichen Rechnungen, Datenanalyse u.v.m mit einem kleinen Script ohne viel Code durchzuführen. Aktuell stelle ich euch nur die Lizard.dll (Lizard.so), deren Include Datei sowie einige Beispiele und eine ausführliche Dokumentation zu Lizard bereit. Die Veröffentlichung des Quellcodes ist aber geplant.
Bitte testet Lizard in diesem frühen Stadium und gebt mir Feedback zu den aktuellen Features. Außerdem möchte ich mich noch bei folgenden Personen explizit bedanken, die vermutlich gar nicht wussten das sie mir geholfen haben: Helle (ASM Optimierung), CSHW89 (Idee und Divisionsalgorithmus)
Download:
Lizard - Symbolic computation script language (Version 0.4.4-0002, 28. August 2022)
Beinhaltet die Lizard.dll (Windows x64 und x86), die Lizard.so (Linux x64), die Lizard.pbi, einige Beispiele zur Einbindung in Pure Basic und eine ausführliche Dokumentation zu Lizard mit vielen Beispielen.
Lizard - Documentation (Dokumentation alleine, zum gucken^^)
Features von Lizard:
- Lizard ist eine vollständig auf symbolischen Ausdrücken basierende Scriptsprache.
- Verarbeitet werden: ganzen Zahlen (unlimitiert!), Bruchzahlen (unlimitiert!), reellen Zahlen (unlimitiert!), komplexen Zahlen, Zeichenketten (UTF-8 oder binär), Symbole (Variablen) und Ausdrücke mit Kopf und beliebig vielen Elementen.
- Übliche arithmetische und logische Operationen arbeiten formal mit allen Objekttypen und führen entsprechende Berechnungen oder Vereinfachungen aus.
- Sehr flexibles arbeiten mit Untergruppen von Listen/Arrays, Ausdrücken und Strings.
- Unterstützt die parallele Auswertung von Ausdrücken auf mehreren CPU-Kernen
- Definition und Verwendung von polymorphen oder anonymen Funktionen.
- Sehr mächtige Mustervergleichs-Engine bei Funktionsdefinitionen oder Ersetzungsregeln.
- Unterstützt benannte Parameter in Funktionen.
- Befehle für das Verteilen einer Berechnung auf mehrere Kerne, Parallel-Computing.
- Verschiedene Konvertierungsfunktionen von Zahlen und Zeichenketten mit Formaten wie int32 über float64 bis hin zu verschiedene String-Codierungen wie UTF16, UTF32 u.a.
In Lizard ist alles, wirklich alles, ein Ausdruck bestehend aus einem Kopf und beliebig vielen Argumenten. Das hießt, auch Objekttypen selbst, z.B. Listen, oder bekannte Schlüsselwörter wie If, And usw. sind wieder nur Ausdrücke und können als solches auch wieder verwendet werden. Das macht Lizard sehr flexibel und mächtig, allerdings auf der tiefen Ebene auch langsamer als übliche Scriptsprachen, bei denen diese Sachen klar getrennt und unterschieden werden.
Hier einige Beispiele zu den Features (viele weitere in der Dokumentation):
Code: Alles auswählen
In(1) := {2^100, 8/12, 1/4.0, (-2.0)^0.4} Out(1) = {1267650600228229401496703205376, 2/3, 0.25, 0.40775+1.25493*I}
Code: Alles auswählen
In(2) := {3*x - 2*x, a && True && b, Sin(Pi/6)} Out(2) = {x, a && b, 1/2}
Code: Alles auswählen
In(3) := 123.456 ^ 6789 Out(3) = 1.889456296024e14199
Code: Alles auswählen
In(4) := Calculate(Pi, 60) Out(4) = 3.14159265358979323846264338327950288419716939937510582097494
Code: Alles auswählen
In(5) := Sort( {-3, 2, -1, 0, 4}, Abs(#1) <= Abs(#2) & ) Out(5) = {0, -1, 2, -3, 4}
Code: Alles auswählen
In(6) := Select( {1, 2, 3, 4, y, 2.2}, #^2 < 6 & ) Out(6) = {1, 2, 2.2}
Code: Alles auswählen
In(7) := Replace( a+b+c+d, a+d -> x ) Out(7) = b + c + x
Code: Alles auswählen
In(8) := {a,b,c,d,e}[2..-2] Out(8) = {b, c, d}
Code: Alles auswählen
In(9) := "Hello World!"[-1..1..-1] Out(9) = "!dlroW olleH"
Code: Alles auswählen
In(10) := Iterate(i^2, {i, -3, 3} ) Out(10) = {9, 4, 1, 0, 1, 4, 9}
Code: Alles auswählen
In(11) := ToString('\0a\x03» ¬', BinaryFormat->"UTF16", Endianness->1) Out(11) = "aλ€"
Code: Alles auswählen
In(12) := Sort({"NINO", "Nina", "Nino", "Ninu", "Niño"}) Out(12) = {"Nina", "Nino", "NINO", "Niño", "Ninu"}
ToDo-List:
- Weitere built-in Funktionen: Import(file), Export(file, data)
- Offizielle Einbindung von Zusatzpaketen wie Ableitungen, Gleichungen lösen
- 0.4.4-0002: Hot-Fix DLL-Stringrückgabe
- 0.4.4-0001: Befehle für Parallel-Computing, reziproke trigonometrische und hyperbolische Funktionen, ein bisschen Kleinkram, wieder ein paar Bug-Fixes und es gibt nun Funktions-Plots bei mathematischen Funktionen in der Dokumentation.
- 0.4.3-0002: Hot-Fix für Windows 7 Probleme, Code außerhalb von DLL.
- 0.4.3-0001: Großes Bug-Fix-Update. Außerdem neue Funktionen wie Count und Contain, Flatten und Nest sowie ein paar numerische Funktionen wie ShiftLeft, Bernoulli, Numerator und Abfragen wie IsPrime.
- 0.4.2-0001: Viele neue Funktionen wie trigonometrische und hyperbolischen Funktionen und deren Inverse, Fibonacci, Binomial, Expand, Funktionen für komplexe Zahlen wie Conjugate, Re, Im, Konstanten wie EulerMascheroni, GoldenRatio, Funktionen für Mengen wie Union, Intersection.
Außerdem gibt es SubDefine und SubDefineDelayed für eine spezielle Art der Definition von Funktionen (mehr in der Hilfe)
Zudem wurde ein paar Funktionen umbenannt. - 0.4.0-0005: Einige Bugs gefixed und eine erste Linux Version
- 0.4.0-0001: Implementierung von unlimitierten Fließkommazahlen, neue Funktionen: Factorial(), Precision(), Cos(), Sin(), Cosh(), Sinh(), ArcTan()
- 0.3.8-0012: x86 Unterstützung, Kleine Bug-fixes, zwei neue erweiterte Beispiele zur Implementierung in Pure Basic, Neue Lizard-Funktionen: Floor, Ceil, Trunc, Order
- 0.3.8-0003: Bug-Fix bei vergleich von Strings
- 0.3.8-0002: Erste Veröffentlichung