1 points par GN⁺ 2026-01-19 | 1 commentaires | Partager sur WhatsApp
  • Kip est un langage de programmation expérimental qui intègre les cas grammaticaux et les modes du turc dans son système de types, afin d’explorer la combinaison entre morphologie des langues naturelles et théorie des types
  • Il reflète dans la structure du code les déclinaisons nominales et l’harmonie vocalique du turc, distingue les relations entre arguments de fonction via des suffixes de cas et prend en charge une flexibilité de l’ordre des arguments
  • Il exprime, sous des formes grammaticales turques, les principales fonctionnalités des langages fonctionnels modernes, comme le pattern matching, les types polymorphes, les types de données inductifs et les effets d’entrée/sortie
  • Il se construit avec l’analyseur morphologique Foma et Haskell Stack, et propose un environnement d’exécution dans le navigateur basé sur WASM ainsi qu’une fonction de cache de bytecode (.iz)
  • C’est un projet de recherche et d’enseignement qui montre le point de rencontre entre linguistique et conception de langages de programmation, en expérimentant la possibilité de concevoir un langage fondé sur une langue naturelle

Vue d’ensemble de Kip

  • Kip est un langage nommé d’après le mot turc « kip » (mode), un langage expérimental qui intègre les cas grammaticaux turcs dans son système de types
    • Il intègre à la conception du langage les déclinaisons nominales du turc (ismin halleri) et l’harmonie vocalique (vowel harmony)
    • Il s’agit d’un projet à visée de recherche et d’enseignement, et non d’un langage destiné à un usage en production
  • Des tutoriels en turc et en anglais sont proposés pour apprendre à écrire des programmes Kip
  • La grammaire et le comportement sont encore à un stade expérimental et pourront évoluer à l’avenir

Caractéristiques du langage

  • Utilisation des cas grammaticaux turcs comme types
    • Huit cas sont pris en charge : nominatif, accusatif, datif, locatif, ablatif, génitif, instrumental et possessif
    • Chaque cas est indiqué par un suffixe, ce qui permet de distinguer explicitement les relations entre arguments de fonction
  • Ordre flexible des arguments
    • Comme les suffixes de cas clarifient la relation entre arguments, changer leur ordre conserve le même sens
    • Exemple : (5'le 3'ün farkını) yaz. et (3'ün 5'le farkını) yaz. produisent le même résultat
  • Définition de types de données inductifs
    • Les types de données algébriques sont définis avec une syntaxe turque
    • Exemple :
      Bir doğal-sayı
      ya sıfır
      ya da bir doğal-sayının ardılı
      olabilir.
      
  • Prise en charge des types polymorphes
    • Il est possible de définir des structures de données génériques
    • Exemple : définition d’un type liste sous la forme (öğe listesi)
  • Pattern matching
    • Le pattern matching s’effectue avec le suffixe conditionnel -sa/-se
    • Les patterns imbriqués, les binders et le joker (değilse) sont pris en charge
  • Définition de constantes
    • Déclaration de constantes nommées avec le mot-clé diyelim
    • Exemple : sıfırın ardılına bir diyelim.
  • Entrées/sorties et gestion des effets
    • Exécution séquentielle avec le suffixe -ip/-ıp/-up/-üp, et liaison avec olarak
    • Exemple :
      selamlamak,
        isim olarak okuyup,
        ("Merhaba "yla ismin birleşimini) yazmaktır.
      
  • Types de base
    • Entiers (tam-sayı) : opérations comme toplamı, farkı, çarpımı, etc.
    • Chaînes (dizge) : uzunluğu, birleşimi, tam-sayı-hali
    • Entrée/sortie : commandes yazmak et okumak
  • Commentaires et littéraux
    • Commentaires : (* ... *)
    • Littéraux : suffixes de cas inclus, comme dans "merhaba"'yı yaz.

Installation et exécution

  • Outils requis
    • Foma : boîte à outils d’analyse morphologique à états finis
    • Stack : outil de build Haskell
  • Méthodes de build
    • Exécuter le script install.sh ou construire manuellement avec la commande stack build
    • Le convertisseur TRmorph est inclus dans vendor/trmorph.fst
  • Exécution
    • REPL : stack exec kip
    • Exécution d’un fichier : stack exec kip -- --exec path/to/file.kip
    • Installation dans le PATH : stack install

Playground WASM

  • Le répertoire playground/ contient une version destinée à l’exécution dans le navigateur
    • kip-playground est compilé pour wasm32-wasi
    • Un harnais HTML/JS permet d’exécuter Kip dans le navigateur
    • Voir playground/README.md pour la procédure de build détaillée

Cache de bytecode (.iz)

  • Les résultats de la vérification de types de chaque fichier .kip sont mis en cache dans des fichiers .iz
    • Si les sources ou les dépendances n’ont pas changé, le cache est réutilisé
    • Si le fichier .iz est supprimé, une nouvelle analyse syntaxique et une nouvelle vérification de types sont effectuées
    • Le hash du compilateur est inclus, ce qui invalide automatiquement le cache en cas de changement de version

Programme d’exemple

  • Inclut un exemple de définition des nombres naturels, de déclaration de constantes, de fonction d’addition et d’affichage du résultat
    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.
    

Structure du projet

  • app/ : point d’entrée CLI (Main.hs)
  • src/Kip/ : inclut l’AST, le cache, l’interpréteur, le parseur, le moteur de rendu et le vérificateur de types
  • lib/ : modules de base (giriş.kip, temel.kip, temel-liste.kip, etc.)
  • tests/ : cas de test de réussite (succeed/) et d’échec (fail/)
  • vendor/ : convertisseur morphologique trmorph.fst

Tests

  • Exécution avec la commande stack test
    • tests/succeed/ : tests qui doivent réussir
    • tests/fail/ : tests qui doivent échouer

Analyse morphologique

  • Kip utilise TRmorph pour effectuer l’analyse morphologique du turc
    • Les mots ambigus (par ex. « takası ») sont analysés en conservant toutes les interprétations possibles
    • Le sens est déterminé à l’étape de la vérification de types
    • Pour forcer une interprétation particulière, on peut utiliser une apostrophe (') (taka'sı, takas'ı)

Licence

  • Voir le fichier LICENSE

1 commentaires

 
GN⁺ 2026-01-19
Commentaires sur Hacker News
  • Bonjour à tous, je suis le développeur de Kip
    Je comptais à l’origine le dévoiler après avoir terminé le playground et la landing page, mais je partage ici le playground basé sur navigateur que j’ai construit jusqu’à présent
    https://alpaylan.github.io/kip/
    La transpilation vers JavaScript vient tout juste de commencer, donc elle ne fonctionne pas encore, mais le langage lui-même est en grande partie exécutable
    S’il y a des bugs, ce serait super de les signaler dans les issues du repo

    • J’ai étudié le turc pendant plusieurs années, et je me suis dit que ses caractéristiques grammaticales et agglutinantes en feraient un langage de programmation intéressant
      Je voulais l’appeler « Ç », mais je ne l’ai jamais réellement construit. Ça fait plaisir de voir que quelqu’un a essayé
    • J’ai cherché parce que « Kip » signifierait en turc le mode grammatical ; selon les services de traduction, on obtient « mode », « modal », « tense », « module », etc.
      Personnellement, je pense que « tense » est ce qui s’en rapproche le plus
      Comme référence, j’ai regardé l’explication de BBC Bitesize
    • La grammaire est intéressante, mais je me demande comment fonctionne la syntaxe des opérations numériques
      Par exemple
      (5'le 3'ün farkını) yaz.  
      (3'ün 5'le farkını) yaz.  
      
      Dans ce genre de phrase, je me demande si le sens de « farkını » (différence) et la position des suffixes permettent de distinguer 5-3 de 3-5
      Comme la syntaxe repose sur la langue naturelle, on a l’impression d’un langage qui décrit des définitions mathématiques
    • Une page web et un playground mis à jour ont été publiés
      https://kip-dili.github.io/
    • C’est vraiment un superbe travail. J’ai envie d’explorer ce domaine depuis longtemps
  • La structure du langage semble toujours suivre un ordre grammatical anglo-saxon
    J’aimerais voir quelque chose de plus conforme à la grammaire turque, comme ceci

    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.  
    

    En tout cas, bravo : ce type d’essai constitue déjà un excellent point de départ

  • Ce projet est vraiment génial
    Moi aussi, j’expérimente une idée similaire chez Logicaffeine Studio
    Tu devrais aussi jeter un œil à Logos lang. J’aime bien aussi le choix de Haskell

  • Les générations précédentes se souviendront peut-être de Lingua::Romana::Perligata
    https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm

  • J’avais moi aussi expérimenté une idée similaire il y a quelques années
    https://github.com/celaleddin/sembolik-fikir
    Je vais regarder cela de plus près dans les prochains jours

    • Approche intéressante. On dirait que ça fait de l’estimation morphologique à base de suffixes
      Dans Kip, l’analyse morphologique est effectuée de façon complète avec TRmorph, puis les ambiguïtés sont résolues à l’étape de vérification de types
      Du coup, il n’y a presque pas besoin d’apostrophes. C’était difficile à implémenter, mais c’était un problème intéressant
  • Je sais lire un peu le turc, et ce projet a illuminé ma journée
    Je trouve fascinant qu’une telle conception de langage soit possible grâce au caractère fort et standardisé du système de cas du turc

    • Ce type d’ordre des mots flexible est possible non seulement en turc, mais aussi dans des langues fortement flexionnelles — les langues slaves, le sanskrit, le finnois, le hongrois, etc.
    • En réalité, même l’anglais a une flexibilité assez importante dans l’ordre des mots
      Par exemple, une phrase comme « Colonel Mustard killed him in the study at 5:00 with his own knife. » conserve son sens même si on change l’ordre
      On retrouve souvent ce genre d’ordre complexe des mots dans la poésie latine ou russe
  • J’ai cliqué sur le lien avec des préjugés au départ, mais la définition est propre et facile à comprendre
    Une version allemande serait amusante aussi

    • Même impression. Je pensais que ce serait simplement un langage façon Rust avec les mots-clés traduits en turc, mais en réalité c’est bien plus sophistiqué
  • Je partage surtout ce billet de Language Log comme référence grammaticale, plus que pour le langage lui-même

  • Ma petite amie est turque et j’apprenais le turc, donc j’ai maintenant l’impression de pouvoir accélérer mon apprentissage grâce à un réflexe de programmation
    C’est vraiment impressionnant

    • J’ai moi aussi épousé une personne turque, et je n’aurais jamais imaginé une telle combinaison techno + langue
      C’est une très bonne motivation pour reprendre un apprentissage qui s’était arrêté au niveau intermédiaire
  • À l’ère de l’IA, chaque pays peut créer des langages de programmation qui reflètent sa propre tradition linguistique
    Cela peut considérablement élargir l’autonomie et la diversité des cultures de développement