1 Punkte von GN⁺ 2026-01-19 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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/-se ausgeführt
    • Unterstützt verschachtelte Muster, Binder und Wildcards (değilse)
  • Konstantendefinitionen
    • Benannte Konstanten werden mit dem Schlüsselwort diyelim deklariert
    • Beispiel: sıfırın ardılına bir diyelim.
  • Ein-/Ausgabe und Effektverarbeitung
    • Das Suffix -ip/-ıp/-up/-üp dient zur sequenziellen Ausführung, olarak zum Binden
    • Beispiel:
      selamlamak,
        isim olarak okuyup,
        ("Merhaba "yla ismin birleşimini) yazmaktır.
      
  • Grundtypen
    • Ganzzahlen (tam-sayı): unterstützen Operationen wie toplamı, farkı, çarpımı usw.
    • Strings (dizge): bieten uzunluğu, birleşimi, tam-sayı-hali
    • Ein-/Ausgabe: unterstützt die Befehle yazmak und okumak
  • Kommentare und Literale
    • Kommentare: (* ... *)
    • Literale: in Formen wie "merhaba"'yı yaz. mit Kasus-Suffixen

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.sh oder manueller Build mit dem Befehl stack build
    • Enthält den TRmorph-Transducer in vendor/trmorph.fst
  • Ausführung
    • REPL: stack exec kip
    • Dateiausführung: stack exec kip -- --exec path/to/file.kip
    • Installation in PATH: stack install

WASM Playground

  • Das Verzeichnis playground/ enthält einen Build für die Browser-Ausführung
    • kip-playground wird nach wasm32-wasi kompiliert
    • 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.kip usw.)
  • tests/ : Testfälle für Erfolg (succeed/) und Fehlschlag (fail/)
  • vendor/ : Morphologie-Transducer trmorph.fst

Tests

  • Ausführung mit dem Befehl stack test
    • tests/succeed/: Tests, die erfolgreich sein müssen
    • tests/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

Noch keine Kommentare.

Noch keine Kommentare.