1 points par GN⁺ 2026-01-19 | Aucun commentaire pour le moment. | 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

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.