1 pontos por GN⁺ 2026-01-19 | 1 comentários | Compartilhar no WhatsApp
  • Kip é uma linguagem de programação experimental que integra os casos gramaticais e o modo (mood) do turco ao sistema de tipos, explorando a combinação entre morfologia de linguagem natural e teoria dos tipos
  • Reflete as declinações de caso dos substantivos e a harmonia vocálica do turco na estrutura do código, distinguindo relações entre argumentos de função por sufixos de caso e oferecendo flexibilidade na ordem dos argumentos
  • Expressa recursos centrais de linguagens funcionais modernas, como pattern matching, tipos polimórficos, tipos de dados indutivos e efeitos de entrada/saída, em formas gramaticais do turco
  • É compilada com o analisador morfológico Foma e Haskell Stack, e oferece um ambiente de execução no navegador baseado em WASM e recurso de cache de bytecode (.iz)
  • Como um projeto de pesquisa e educação que mostra a interseção entre linguística e design de linguagens de programação, é um caso experimental sobre a possibilidade de projetar linguagens baseadas em linguagem natural

Visão geral do Kip

  • Kip é uma linguagem cujo nome vem da palavra turca “kip” (modo), uma linguagem experimental que incorpora os casos gramaticais do turco ao sistema de tipos
    • Integra as declinações de caso dos substantivos (ismin halleri) e a harmonia vocálica (vowel harmony) do turco ao design da linguagem de programação
    • É um projeto com fins de pesquisa e educação, não uma linguagem para distribuição em produção
  • tutoriais em turco e inglês, permitindo aprender a escrever programas em Kip
  • A gramática e o comportamento estão em estágio experimental, com possibilidade de mudanças futuras

Características da linguagem

  • Uso dos casos gramaticais do turco como tipos
    • Suporta 8 casos: nominativo, acusativo, dativo, locativo, ablativo, genitivo, instrumental e possessivo
    • Cada caso é marcado por um sufixo, distinguindo explicitamente as relações entre argumentos de função
  • Ordem flexível dos argumentos
    • Como os sufixos de caso deixam claras as relações entre argumentos, é possível mudar sua ordem mantendo o mesmo significado
    • Ex.: (5'le 3'ün farkını) yaz. e (3'ün 5'le farkını) yaz. produzem o mesmo resultado
  • Definição de tipos de dados indutivos
    • Define tipos algébricos de dados com sintaxe turca
    • Ex.:
      Bir doğal-sayı
      ya sıfır
      ya da bir doğal-sayının ardılı
      olabilir.
      
  • Suporte a tipos polimórficos
    • Permite definir estruturas de dados genéricas
    • Ex.: definição de lista na forma (öğe listesi)
  • Pattern matching
    • Realiza pattern matching usando o sufixo condicional -sa/-se
    • Suporta padrões aninhados, binders e wildcard (değilse)
  • Definição de constantes
    • Declara constantes nomeadas com a palavra-chave diyelim
    • Ex.: sıfırın ardılına bir diyelim.
  • Entrada/saída e tratamento de efeitos
    • Usa os sufixos -ip/-ıp/-up/-üp para execução sequencial e olarak para binding
    • Ex.:
      selamlamak,
        isim olarak okuyup,
        ("Merhaba "yla ismin birleşimini) yazmaktır.
      
  • Tipos básicos
    • Inteiros (tam-sayı): suporte a operações como toplamı, farkı, çarpımı
    • Strings (dizge): oferece uzunluğu, birleşimi, tam-sayı-hali
    • Entrada/saída: suporte aos comandos yazmak, okumak
  • Comentários e literais
    • Comentários: (* ... *)
    • Literais: forma com sufixo de caso, como "merhaba"'yı yaz.

Instalação e execução

  • Ferramentas obrigatórias
    • Foma: toolkit de análise morfológica de estados finitos
    • Stack: ferramenta de build para Haskell
  • Como compilar
    • Execute o script install.sh ou faça a compilação manual com o comando stack build
    • Inclui o transdutor TRmorph em vendor/trmorph.fst
  • Execução
    • REPL: stack exec kip
    • Executar arquivo: stack exec kip -- --exec path/to/file.kip
    • Instalação no PATH: stack install

Playground em WASM

  • O diretório playground/ inclui uma build para execução no navegador
    • Compila kip-playground para wasm32-wasi
    • Um harness em HTML/JS permite executar Kip no navegador
    • Consulte playground/README.md para os procedimentos detalhados de build

Cache de bytecode (.iz)

  • Armazena em arquivos .iz os resultados da verificação de tipos de cada arquivo .kip
    • Reutiliza o cache se o código-fonte ou as dependências não tiverem mudado
    • Se o arquivo .iz for apagado, o parsing e a verificação de tipos são refeitos
    • Inclui um hash do compilador, invalidando automaticamente o cache em caso de mudança de versão

Programas de exemplo

  • Inclui exemplos de definição de números naturais, declaração de constantes, função de soma e saída do 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.
    

Estrutura do projeto

  • app/ : ponto de entrada da CLI (Main.hs)
  • src/Kip/ : inclui AST, cache, interpretador, parser, renderizador e verificador de tipos
  • lib/ : módulos básicos (giriş.kip, temel.kip, temel-liste.kip etc.)
  • tests/ : casos de teste de sucesso (succeed/) e falha (fail/)
  • vendor/ : transdutor morfológico trmorph.fst

Testes

  • Executados com o comando stack test
    • tests/succeed/: testes que devem passar
    • tests/fail/: testes que devem falhar

Análise morfológica

  • Kip usa TRmorph para realizar a análise morfológica do turco
    • Palavras ambíguas (ex.: “takası”) são analisadas preservando todas as interpretações possíveis
    • O significado é determinado na etapa de verificação de tipos
    • Para forçar uma interpretação específica, usa-se apóstrofo (') (taka'sı, takas'ı)

Licença

  • Consulte o arquivo LICENSE

1 comentários

 
GN⁺ 2026-01-19
Comentários do Hacker News
  • Olá a todos, sou o desenvolvedor do Kip
    Eu pretendia anunciar só depois de terminar o playground e a landing page, mas por enquanto estou compartilhando o playground baseado em navegador que fiz até agora
    https://alpaylan.github.io/kip/
    A transpilação para JavaScript está só começando e ainda não funciona, mas a maior parte da linguagem em si já pode ser executada
    Se encontrarem bugs, ficarei feliz se avisarem na issue do repositório

    • Estudei turco por alguns anos e achei que, por causa das características gramaticais e aglutinantes da língua, seria interessante transformá-la em uma linguagem de programação
      Eu queria chamar isso de “Ç”, mas nunca cheguei a fazer. Fico feliz em ver alguém tentando
    • Fui procurar porque “Kip” em turco significa modo gramatical (mood), mas cada serviço de tradução mostra algo diferente, como “mode”, “modal”, “tense” e “module”
      Pessoalmente, acho que “tense” é o mais próximo
      Como referência relacionada, vi a explicação da BBC Bitesize
    • A gramática é interessante, mas fiquei curioso sobre como a sintaxe das operações numéricas funciona
      Por exemplo
      (5'le 3'ün farkını) yaz.  
      (3'ün 5'le farkını) yaz.  
      
      Em frases assim, queria entender se a distinção entre 5-3 e 3-5 é feita pelo significado de ‘farkını’ (diferença) e pela posição das partículas
      Como é uma sintaxe baseada em linguagem natural, ela passa a sensação de uma linguagem para descrever definições matemáticas
    • A página web e o playground atualizados foram publicados recentemente
      https://kip-dili.github.io/
    • Trabalho realmente muito legal. Há muito tempo eu queria explorar essa área
  • A estrutura da linguagem ainda parece seguir a ordem gramatical anglo-saxônica
    Eu gostaria de ver algo assim, mais adequado à 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.  
    

    De qualquer forma, parabéns: essa tentativa por si só já é um ótimo ponto de partida

  • Este projeto é realmente muito legal
    Eu também estou experimentando uma ideia parecida no Logicaffeine Studio
    Talvez valha a pena dar uma olhada também em Logos lang. Gostei da escolha de Haskell

  • Quem é de uma geração anterior talvez se lembre de Lingua::Romana::Perligata
    https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm

  • Eu também experimentei uma ideia semelhante alguns anos atrás
    https://github.com/celaleddin/sembolik-fikir
    Pretendo analisar com mais calma nos próximos dias

    • Abordagem interessante. Parece fazer inferência morfológica baseada em sufixos
      No Kip, usamos TRmorph para fazer a análise morfológica completa e resolver ambiguidades na etapa de verificação de tipos
      Por isso quase não é preciso usar apóstrofos. Foi difícil de implementar, mas um problema divertido de resolver
  • Consigo ler um pouco de turco, e este projeto alegrou meu dia
    É interessante como o sistema de casos do turco é forte e padronizado, a ponto de tornar possível esse tipo de design de linguagem

    • Essa ordem flexível das palavras é possível não só no turco, mas também em línguas fortemente flexionadas — eslavas, sânscrito, finlandês, húngaro etc.
    • Na verdade, até o inglês tem uma flexibilidade de ordem de palavras considerável
      Por exemplo, em uma frase como “Colonel Mustard killed him in the study at 5:00 with his own knife.”, o sentido se mantém mesmo mudando a ordem
      Em poesia latina ou russa também aparecem com frequência ordens de palavras complexas desse tipo
  • No começo cliquei no link com preconceito, mas a definição é limpa e fácil de entender
    Acho que uma versão em alemão também seria divertida

    • Pensei a mesma coisa. Achei que seria só uma troca dos keywords de uma linguagem como Rust para turco, mas na prática é algo muito mais sofisticado
  • Mais do que sobre a linguagem em si, estou compartilhando como referência gramatical este post do Language Log

  • Minha namorada é turca e eu estava aprendendo turco, então agora acho que vou conseguir acelerar o aprendizado com uma intuição de programação
    Realmente impressionante

    • Eu também me casei com uma pessoa turca, e nunca tinha imaginado uma combinação assim de tecnologia + idioma
      Isso vira uma ótima motivação para retomar os estudos, que estavam parados no nível intermediário
  • Na era da IA, cada país pode criar linguagens de programação que reflitam sua própria tradição linguística
    Isso amplia muito a autonomia e a diversidade da cultura de desenvolvimento