1 Punkte von GN⁺ 2026-01-19 | 1 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

1 Kommentare

 
GN⁺ 2026-01-19
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 habe mehrere Jahre Türkisch gelernt und dachte, dass es wegen seiner grammatischen und agglutinierenden Eigenschaften interessant wäre, daraus eine Programmiersprache zu machen
      Ich wollte sie „Ç“ nennen, habe es aber nie umgesetzt. Schön zu sehen, dass es jemand versucht hat
    • Ich habe nachgesehen, weil „Kip“ auf Türkisch die grammatische Stimmung/Mood bedeuten soll, aber je nach Übersetzungsdienst kamen „mode“, „modal“, „tense“ oder „module“ heraus
      Persönlich finde ich „tense“ am treffendsten
      Als Referenz dazu habe ich diese Erklärung von BBC Bitesize gelesen
    • Die Grammatik ist interessant, aber ich frage mich, wie die Syntax für Zahlenoperationen funktioniert
      Zum Beispiel
      (5'le 3'ün farkını) yaz.  
      (3'ün 5'le farkını) yaz.  
      
      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
    • Eine aktualisierte Webseite und Playground wurden neu veröffentlicht
      https://kip-dili.github.io/
    • Wirklich tolle Arbeit. Ich wollte diesen Bereich schon lange einmal erkunden
  • 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

    Fibonacci-Dizisi (n):  
      n 0'a eşitse: dur.  
      değilse:  
        bu-sayıyı yazdır.  
        şu-sayıyı, (bu-sayı + şu-sayı), (n - 1) ile Fibonacci-Dizisi'ne devam et.  
    

    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

    • Interessanter Ansatz. Es sieht so aus, als würde dort suffixbasierte Morphemschätzung verwendet
      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

    • Solch eine flexible Wortstellung ist nicht nur im Türkischen möglich, sondern auch in stark flektierenden Sprachen wie slawischen Sprachen, Sanskrit, Finnisch, Ungarisch usw.
    • Eigentlich hat auch das Englische ziemlich viel Flexibilität in der Wortstellung
      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

    • Ging mir genauso. Ich dachte erst, es wäre bloß eine Übersetzung der Keywords einer Sprache wie Rust ins Türkische, aber tatsächlich ist es viel ausgefeilter
  • 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

    • Ich bin auch mit einer Türkin verheiratet, und so eine Technik+Sprache-Kombination hätte ich mir nie vorgestellt
      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