Kip, eine Programmiersprache auf Basis türkischer grammatischer Fälle
(github.com/kip-dili)- Kip ist eine experimentelle Programmiersprache, die grammatische Fälle und Modi des Türkischen in das Typsystem integriert und die Verbindung von natürlicher Sprachmorphologie und Typentheorie erforscht
- Sie spiegelt Substantivdeklination und Vokalharmonie des Türkischen in der Codestruktur wider, unterscheidet Funktionsargumente über Kasus-Suffixe und unterstützt eine flexible Argumentreihenfolge
- Zentrale Funktionen moderner funktionaler Sprachen wie Pattern Matching, polymorphe Typen, induktive Datentypen und Ein-/Ausgabe-Effekte werden in türkischen grammatischen Formen ausgedrückt
- Der Build erfolgt mit dem Morphologie-Analyzer Foma und Haskell Stack; außerdem bietet die Sprache eine WASM-basierte Browser-Laufzeitumgebung sowie Bytecode-Caching (.iz)
- Als Projekt für Forschung und Lehre zeigt sie den Schnittpunkt von Linguistik und Programmiersprachen-Design und erprobt die Möglichkeiten natürlichsprachbasierter Sprachentwürfe
Überblick über Kip
- Kip ist nach dem türkischen Wort „kip“ (Modus) benannt und eine experimentelle Sprache, die türkische grammatische Fälle in das Typsystem aufnimmt
- Die Substantivfälle (ismin halleri) und die Vokalharmonie (vowel harmony) des Türkischen werden in das Design der Programmiersprache integriert
- Es handelt sich um ein Projekt für Forschung und Lehre, nicht um eine Sprache für den produktiven Einsatz
- Es werden Tutorials auf Türkisch und Englisch angeboten, mit denen man das Schreiben von Kip-Programmen lernen kann
- Grammatik und Verhalten befinden sich in einem experimentellen Stadium und können sich künftig ändern
Sprachmerkmale
- Türkische grammatische Fälle als Typen
- Unterstützt werden acht Fälle: Nominativ, Akkusativ, Dativ, Lokativ, Ablativ, Genitiv, Instrumental und Possessiv
- Jeder Fall wird durch ein Suffix markiert und unterscheidet Beziehungen zwischen Funktionsargumenten explizit
- Flexible Argumentreihenfolge
- Da Kasus-Suffixe die Argumentbeziehungen eindeutig machen, bleibt die Bedeutung auch bei vertauschter Reihenfolge gleich
- Beispiel:
(5'le 3'ün farkını) yaz.und(3'ün 5'le farkını) yaz.liefern dasselbe Ergebnis
- Definition induktiver Datentypen
- Algebraische Datentypen werden mit türkischer Syntax definiert
- Beispiel:
Bir doğal-sayı ya sıfır ya da bir doğal-sayının ardılı olabilir.
- Unterstützung polymorpher Typen
- Generische Datenstrukturen lassen sich definieren
- Beispiel: Definition eines Listentyps in der Form
(öğe listesi)
- Pattern Matching
- Pattern Matching wird mit dem Konditionalsuffix
-sa/-seausgeführt - Unterstützt verschachtelte Muster, Binder und Wildcards (
değilse)
- Pattern Matching wird mit dem Konditionalsuffix
- Konstantendefinitionen
- Benannte Konstanten werden mit dem Schlüsselwort
diyelimdeklariert - Beispiel:
sıfırın ardılına bir diyelim.
- Benannte Konstanten werden mit dem Schlüsselwort
- Ein-/Ausgabe und Effektverarbeitung
- Das Suffix
-ip/-ıp/-up/-üpdient zur sequenziellen Ausführung,olarakzum Binden - Beispiel:
selamlamak, isim olarak okuyup, ("Merhaba "yla ismin birleşimini) yazmaktır.
- Das Suffix
- Grundtypen
- Ganzzahlen (
tam-sayı): unterstützen Operationen wietoplamı,farkı,çarpımıusw. - Strings (
dizge): bietenuzunluğu,birleşimi,tam-sayı-hali - Ein-/Ausgabe: unterstützt die Befehle
yazmakundokumak
- Ganzzahlen (
- Kommentare und Literale
- Kommentare:
(* ... *) - Literale: in Formen wie
"merhaba"'yı yaz.mit Kasus-Suffixen
- Kommentare:
Installation und Ausführung
- Erforderliche Werkzeuge
- Foma: Toolkit für finite-state-Morphologieanalyse
- Stack: Build-Tool für Haskell
- Build-Methode
- Ausführung des Skripts
install.shoder manueller Build mit dem Befehlstack build - Enthält den TRmorph-Transducer in
vendor/trmorph.fst
- Ausführung des Skripts
- Ausführung
- REPL:
stack exec kip - Dateiausführung:
stack exec kip -- --exec path/to/file.kip - Installation in PATH:
stack install
- REPL:
WASM Playground
- Das Verzeichnis
playground/enthält einen Build für die Browser-Ausführungkip-playgroundwird nachwasm32-wasikompiliert- Mit HTML/JS-Harness kann Kip im Browser ausgeführt werden
- Details zum Build stehen in
playground/README.md
Bytecode-Cache (.iz)
- Für jede
.kip-Datei werden die Ergebnisse der Typprüfung gecacht und als.iz-Datei gespeichert- Wenn sich Quelltext oder Abhängigkeiten nicht ändern, wird der Cache wiederverwendet
- Beim Löschen der
.iz-Datei werden Parsing und Typprüfung erneut ausgeführt - Durch Einbeziehung eines Compiler-Hashs erfolgt bei Versionsänderungen automatisch eine Invalidierung
Beispielprogramm
- Enthält ein Beispiel zur Definition natürlicher Zahlen, zur Deklaration von Konstanten, zu einer Additionsfunktion und zur Ausgabe des Ergebnisses
Bir doğal-sayı ya sıfır ya da bir doğal-sayının ardılı olabilir. sıfırın ardılına bir diyelim. birin ardılına iki diyelim. ikinin ardılına üç diyelim. (bu doğal-sayıyla) (şu doğal-sayının) toplamı, bu sıfırsa, şu, öncülün ardılıysa, (öncülle) (şunun ardılının) toplamıdır. (ikiyle üçün toplamını) yaz.
Projektstruktur
- app/ : CLI-Einstiegspunkt (
Main.hs) - src/Kip/ : enthält AST, Cache, Interpreter, Parser, Renderer und Typprüfer
- lib/ : Basismodule (
giriş.kip,temel.kip,temel-liste.kipusw.) - tests/ : Testfälle für Erfolg (
succeed/) und Fehlschlag (fail/) - vendor/ : Morphologie-Transducer
trmorph.fst
Tests
- Ausführung mit dem Befehl
stack testtests/succeed/: Tests, die erfolgreich sein müssentests/fail/: Tests, die fehlschlagen müssen
Morphologische Analyse
- Kip verwendet TRmorph zur morphologischen Analyse des Türkischen
- Mehrdeutige Wörter (z. B. „takası“) werden beim Parsen mit allen möglichen Interpretationen beibehalten
- Die Bedeutung wird erst in der Typprüfung bestimmt
- Um eine bestimmte Interpretation zu erzwingen, kann ein Apostroph (
') verwendet werden (taka'sı,takas'ı)
Lizenz
- Siehe Datei LICENSE
1 Kommentare
Hacker-News-Kommentare
Hallo zusammen, ich bin der Entwickler von Kip
Eigentlich wollte ich es erst veröffentlichen, nachdem ich den Playground und die Landingpage fertiggestellt habe, aber ich teile jetzt den browserbasierten Playground, den ich bisher gebaut habe
https://alpaylan.github.io/kip/
Die Transpilierung nach JavaScript hat gerade erst begonnen und funktioniert noch nicht, aber die Sprache selbst ist größtenteils ausführbar
Wenn ihr Bugs findet, wäre es super, wenn ihr sie in den Issues des Repos meldet
Ich wollte sie „Ç“ nennen, habe es aber nie umgesetzt. Schön zu sehen, dass es jemand versucht hat
Persönlich finde ich „tense“ am treffendsten
Als Referenz dazu habe ich diese Erklärung von BBC Bitesize gelesen
Zum Beispiel In solchen Sätzen würde mich interessieren, ob anhand der Bedeutung von „farkını“ (Differenz) und der Position der Suffixe unterschieden wird, ob es 5-3 oder 3-5 ist
Weil die Syntax auf natürlicher Sprache basiert, wirkt es wie eine Sprache zum Beschreiben mathematischer Definitionen
https://kip-dili.github.io/
Die Struktur der Sprache scheint immer noch einer angelsächsischen grammatischen Reihenfolge zu folgen
Ich würde gern eher eine Form sehen, die besser zur türkischen Grammatik passt, etwa so
Schon dieser Versuch ist ein großartiger Ausgangspunkt, also Glückwunsch
Dieses Projekt ist wirklich großartig
Ich experimentiere bei Logicaffeine Studio ebenfalls mit einer ähnlichen Idee
Vielleicht lohnt sich auch ein Blick auf Logos lang. Und mir gefällt, dass Haskell gewählt wurde
Ältere Semester erinnern sich vielleicht an Lingua::Romana::Perligata
https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm
Ich habe vor einigen Jahren ebenfalls mit einer ähnlichen Idee experimentiert
https://github.com/celaleddin/sembolik-fikir
Ich werde es mir in den nächsten Tagen genauer ansehen
In Kip wird mit TRmorph eine vollständige morphologische Analyse durchgeführt, und Mehrdeutigkeiten werden in der Typprüfung aufgelöst
Deshalb braucht man fast keine Apostrophe. Die Implementierung war schwierig, aber ein spannendes Problem
Ich kann ein wenig Türkisch lesen, und dieses Projekt hat mir den Tag versüßt
Es ist faszinierend, dass die starke und standardisierte Kasusstruktur des Türkischen ein solches Sprachdesign ermöglicht
Zum Beispiel bleibt bei einem Satz wie „Colonel Mustard killed him in the study at 5:00 with his own knife.“ die Bedeutung erhalten, auch wenn man die Reihenfolge verändert
Auch in lateinischer oder russischer Dichtung kommt eine solche komplexe Wortstellung häufig vor
Ich habe den Link zuerst mit Vorurteilen angeklickt, aber die Definition ist sauber und leicht verständlich
Eine deutsche Version wäre auch interessant
Eher als grammatische Referenz zur Sprache selbst teile ich diesen Language-Log-Beitrag
Meine Freundin ist Türkin und ich habe gerade Türkisch gelernt, aber jetzt habe ich das Gefühl, mein Lerntempo mit einem Programmier-Gefühl steigern zu können
Wirklich beeindruckend
Das ist eine gute Motivation, das Lernen wieder aufzunehmen, bei dem ich auf mittlerem Niveau steckengeblieben war
Im Zeitalter der KI kann jedes Land Programmiersprachen entwickeln, die seine eigenen sprachlichen Traditionen widerspiegeln
Das erweitert die Autonomie und Vielfalt der Entwicklerkultur erheblich