1 puntos por GN⁺ 2026-01-19 | 1 comentarios | Compartir por WhatsApp
  • Kip es un lenguaje de programación experimental que integra los casos gramaticales y el modo (mood) del turco en su sistema de tipos, explorando la combinación de la morfología del lenguaje natural con la teoría de tipos
  • Refleja en la estructura del código la declinación de los sustantivos y la armonía vocálica del turco, distinguiendo las relaciones entre argumentos de funciones mediante sufijos de caso y permitiendo flexibilidad en el orden de los argumentos
  • Expresa funciones clave de los lenguajes funcionales modernos, como pattern matching, tipos polimórficos, tipos de datos inductivos y efectos de entrada/salida, en formas gramaticales del turco
  • Se compila con el analizador morfológico Foma y Haskell Stack, y ofrece un entorno de ejecución en navegador basado en WASM junto con una función de caché de bytecode (.iz)
  • Es un proyecto de investigación y educativo que muestra la intersección entre la lingüística y el diseño de lenguajes de programación, como un experimento sobre la viabilidad de diseñar lenguajes basados en lenguaje natural

Resumen de Kip

  • Kip toma su nombre de la palabra turca “kip” (modo) y es un lenguaje experimental que incorpora los casos gramaticales del turco en el sistema de tipos
    • Integra en el diseño del lenguaje de programación la declinación de los sustantivos (ismin halleri) y la armonía vocálica (vowel harmony) del turco
    • Es un proyecto con fines de investigación y enseñanza, no un lenguaje para despliegue real
  • Ofrece tutoriales en turco e inglés para aprender a escribir programas en Kip
  • La gramática y el comportamiento están en una etapa experimental, por lo que pueden cambiar en el futuro

Características del lenguaje

  • Uso de los casos gramaticales del turco como tipos
    • Soporta 8 casos: nominativo, acusativo, dativo, locativo, ablativo, genitivo, instrumental y posesivo
    • Cada caso se marca con un sufijo, diferenciando explícitamente las relaciones entre argumentos de funciones
  • Orden flexible de argumentos
    • Como los sufijos de caso dejan claras las relaciones entre argumentos, cambiar el orden no altera el significado
    • Ej.: (5'le 3'ün farkını) yaz. y (3'ün 5'le farkını) yaz. producen el mismo resultado
  • Definición de tipos de datos inductivos
    • Define tipos de datos algebraicos con sintaxis turca
    • Ej.:
      Bir doğal-sayı
      ya sıfır
      ya da bir doğal-sayının ardılı
      olabilir.
      
  • Soporte para tipos polimórficos
    • Permite definir estructuras de datos genéricas
    • Ej.: definición de tipo lista en la forma (öğe listesi)
  • Pattern matching
    • Realiza pattern matching usando el sufijo condicional -sa/-se
    • Soporta patrones anidados, binders y comodines (değilse)
  • Definición de constantes
    • Declara constantes con nombre mediante la palabra clave diyelim
    • Ej.: sıfırın ardılına bir diyelim.
  • Entrada/salida y manejo de efectos
    • Usa los sufijos -ip/-ıp/-up/-üp para ejecución secuencial y olarak para binding
    • Ej.:
      selamlamak,
        isim olarak okuyup,
        ("Merhaba "yla ismin birleşimini) yazmaktır.
      
  • Tipos básicos
    • Enteros (tam-sayı): soporta operaciones como toplamı, farkı, çarpımı
    • Cadenas (dizge): ofrece uzunluğu, birleşimi, tam-sayı-hali
    • Entrada/salida: soporta los comandos yazmak, okumak
  • Comentarios y literales
    • Comentarios: (* ... *)
    • Literales: forma como "merhaba"'yı yaz. con sufijos de caso incluidos

Instalación y ejecución

  • Herramientas requeridas
    • Foma: toolkit de análisis morfológico de estado finito
    • Stack: herramienta de compilación de Haskell
  • Método de compilación
    • Ejecutar el script install.sh o compilar manualmente con el comando stack build
    • Incluye el transductor TRmorph en vendor/trmorph.fst
  • Ejecución
    • REPL: stack exec kip
    • Ejecutar archivo: stack exec kip -- --exec path/to/file.kip
    • Instalación en PATH: stack install

Playground WASM

  • El directorio playground/ incluye una compilación para ejecución en navegador
    • Compila kip-playground para wasm32-wasi
    • Permite ejecutar Kip en el navegador con un harness en HTML/JS
    • Para el procedimiento detallado de compilación, consultar playground/README.md

Caché de bytecode (.iz)

  • Guarda en archivos .iz los resultados del type checking de cada archivo .kip
    • Si no cambian el código fuente ni las dependencias, reutiliza la caché
    • Si se elimina un archivo .iz, vuelve a hacer parsing y type checking
    • Incluye un hash del compilador, por lo que se invalida automáticamente al cambiar de versión

Programas de ejemplo

  • Incluye ejemplos de definición de números naturales, declaración de constantes, función de suma y salida del resultado
    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.
    

Estructura del proyecto

  • app/ : punto de entrada del CLI (Main.hs)
  • src/Kip/ : incluye AST, caché, intérprete, parser, renderer y type checker
  • lib/ : módulos base (giriş.kip, temel.kip, temel-liste.kip, etc.)
  • tests/ : casos de prueba de éxito (succeed/) y fallo (fail/)
  • vendor/ : transductor morfológico trmorph.fst

Pruebas

  • Se ejecutan con el comando stack test
    • tests/succeed/: pruebas que deben pasar
    • tests/fail/: pruebas que deben fallar

Análisis morfológico

  • Kip usa TRmorph para realizar análisis morfológico del turco
    • Al parsear, conserva todas las interpretaciones posibles de palabras ambiguas (ej.: “takası”)
    • El significado se determina en la etapa de type checking
    • Para forzar una interpretación específica, se usa apóstrofo (') (taka'sı, takas'ı)

Licencia

  • Consultar el archivo LICENSE

1 comentarios

 
GN⁺ 2026-01-19
Comentarios en Hacker News
  • Hola a todos, soy el desarrollador de Kip
    Originalmente quería hacerlo público después de terminar el playground y la landing page, pero por ahora comparto el playground basado en navegador que he construido hasta ahora
    https://alpaylan.github.io/kip/
    La transpilación a JavaScript apenas está comenzando y todavía no funciona, pero el lenguaje en sí ya se puede ejecutar en su mayor parte
    Si encuentran errores, agradecería que los reportaran en los issues del repo

    • Llevo varios años estudiando turco, y por sus características gramaticales y aglutinantes pensé que sería interesante convertirlo en un lenguaje de programación
      Quería llamarlo “Ç”, pero al final no lo hice. Me alegra ver que alguien sí lo intentó
    • Busqué porque “Kip” significa modo gramatical en turco, pero cada servicio de traducción lo traduce distinto: “mode”, “modal”, “tense”, “module”, etc.
      Personalmente, creo que “tense” es lo más cercano
      Como referencia relacionada, vi la explicación de BBC Bitesize
    • La gramática es interesante, pero me da curiosidad cómo funciona la sintaxis de operaciones numéricas
      Por ejemplo
      (5'le 3'ün farkını) yaz.  
      (3'ün 5'le farkını) yaz.  
      
      En frases así, me pregunto si el significado de ‘farkını’ (diferencia) y la posición de las partículas distinguen entre 5-3 y 3-5
      Como la sintaxis está basada en lenguaje natural, se siente como un lenguaje para describir definiciones matemáticas
    • Se publicó una versión nueva de la página web y el playground
      https://kip-dili.github.io/
    • Es un trabajo realmente genial. Desde hace tiempo quería explorar este tipo de área
  • La estructura del lenguaje todavía parece seguir un orden gramatical anglosajón
    Me gustaría ver algo como esto, más alineado con la gramática turca

    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.  
    

    Felicidades; este intento por sí mismo ya es un excelente punto de partida

  • Este proyecto está realmente increíble
    Yo también estoy experimentando una idea parecida en Logicaffeine Studio
    También valdría la pena revisar Logos lang. Me gusta además que hayas elegido Haskell

  • Los de generaciones anteriores quizá recuerden Lingua::Romana::Perligata
    https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm

  • Yo también experimenté con una idea similar hace unos años
    https://github.com/celaleddin/sembolik-fikir
    Planeo revisarlo más a fondo en los próximos días

    • Es un enfoque interesante. Parece hacer estimación morfológica basada en sufijos
      En Kip se usa TRmorph para realizar por completo el análisis morfológico, y la ambigüedad se resuelve en la etapa de verificación de tipos
      Por eso casi no hacen falta apóstrofos. Fue difícil de implementar, pero fue un problema divertido
  • Puedo leer un poco de turco, y gracias a este proyecto mi día mejoró
    Me parece interesante que el sistema de casos del turco sea tan fuerte y estandarizado que haga posible diseñar un lenguaje así

    • Este tipo de orden de palabras flexible no solo es posible en turco, sino también en lenguas con mucha flexión —eslavas, sánscrito, finlandés, húngaro, etc.—
    • De hecho, incluso en inglés hay bastante flexibilidad en el orden de palabras
      Por ejemplo, una oración como “Colonel Mustard killed him in the study at 5:00 with his own knife.” mantiene su significado aunque cambie el orden
      En la poesía latina o rusa también aparecen a menudo estos órdenes sintácticos complejos
  • Al principio hice clic en el enlace con cierto prejuicio, pero la definición es limpia y fácil de entender
    Sería divertido ver también una versión en alemán

    • Yo pensé lo mismo. Creí que sería solo cambiar las palabras clave de un lenguaje como Rust al turco, pero en realidad está mucho más elaborado
  • Más que por el lenguaje en sí, comparto esta entrada de Language Log como referencia relacionada con la gramática

  • Mi novia es turca y estaba aprendiendo turco; ahora siento que podría acelerar el aprendizaje con una intuición de programación
    De verdad me sorprende

    • Yo también me casé con una persona turca, y jamás habría imaginado una combinación así de tecnología + lenguaje
      Es una muy buena motivación para retomar un aprendizaje que se había quedado estancado en nivel intermedio
  • En la era de la IA, cada país puede crear lenguajes de programación que reflejen su propia tradición lingüística
    Eso amplía enormemente la autonomía y diversidad de la cultura de desarrollo