1 puan yazan GN⁺ 2026-01-19 | 1 yorum | WhatsApp'ta paylaş
  • Kip, Türkçenin dilbilgisel hâllerini ve kipini (mood) tip sistemine entegre eden deneysel bir programlama dili olup, doğal dil biçimbilimi ile tip kuramının birleşimini araştırır
  • Türkçedeki isim hâlleri ve ünlü uyumu kod yapısına yansıtılarak, fonksiyon argüman ilişkileri hâl ekleriyle ayrıştırılır ve esnek argüman sırası desteklenir
  • Pattern matching, polimorfik tipler, indüktif veri tipleri, girdi/çıktı etkileri gibi modern fonksiyonel dillerin başlıca özellikleri Türkçe dilbilgisel biçimlerle ifade edilir
  • Foma biçimbirim çözümleyicisi ve Haskell Stack ile derlenir; ayrıca WASM tabanlı tarayıcı çalışma ortamı ve bytecode önbelleği (.iz) özelliği sunar
  • Dilbilim ile programlama dili tasarımının kesişimini gösteren bir araştırma/eğitim projesi olarak, doğal dil tabanlı dil tasarımının olanaklarını deneyen bir örnektir

Kip'e genel bakış

  • Kip, adını Türkçe “kip” sözcüğünden alan ve Türkçe dilbilgisel hâlleri tip sistemine dahil eden deneysel bir dildir
    • Türkçedeki isim hâlleri (ismin halleri) ve ünlü uyumu (vowel harmony) programlama dili tasarımına entegre edilmiştir
    • Araştırma ve eğitim amaçlı bir projedir; gerçek dağıtım kullanımı için tasarlanmış bir dil değildir
  • Türkçe ve İngilizce öğreticiler sunulur; böylece Kip programlarının nasıl yazılacağı öğrenilebilir
  • Dilbilgisi ve davranışlar deneysel aşamadadır; ileride değişebilir

Dil özellikleri

  • Türkçe dilbilgisel hâllerin tip olarak kullanımı
    • Yalın hâl, belirtme hâli, yönelme hâli, bulunma hâli, ayrılma hâli, ilgi hâli, araç hâli ve iyelik olmak üzere 8 hâl desteklenir
    • Her hâl bir ek ile gösterilir ve fonksiyon argümanları arasındaki ilişki açık biçimde ayrılır
  • Esnek argüman sırası
    • Hâl ekleri argüman ilişkilerini netleştirdiği için, argüman sırası değişse de aynı anlam korunur
    • Örnek: (5'le 3'ün farkını) yaz. ve (3'ün 5'le farkını) yaz. aynı sonucu verir
  • İndüktif veri tipi tanımları
    • Cebirsel veri tipleri Türkçe sözdizimiyle tanımlanır
    • Örnek:
      Bir doğal-sayı
      ya sıfır
      ya da bir doğal-sayının ardılı
      olabilir.
      
  • Polimorfik tip desteği
    • Generic veri yapıları tanımlanabilir
    • Örnek: (öğe listesi) biçiminde liste veri tipi tanımı
  • Pattern matching
    • Pattern matching için koşul eki -sa/-se kullanılır
    • İç içe desenler, bağlayıcılar ve joker (değilse) desteklenir
  • Sabit tanımları
    • Adlandırılmış sabitler diyelim anahtar sözcüğüyle bildirilir
    • Örnek: sıfırın ardılına bir diyelim.
  • Girdi/çıktı ve etki işleme
    • Sıralı yürütme için -ip/-ıp/-up/-üp eki, bağlama için olarak kullanılır
    • Örnek:
      selamlamak,
        isim olarak okuyup,
        ("Merhaba "yla ismin birleşimini) yazmaktır.
      
  • Temel tipler
    • Tamsayı (tam-sayı): toplamı, farkı, çarpımı gibi işlemleri destekler
    • Dizge (dizge): uzunluğu, birleşimi, tam-sayı-hali sağlar
    • Girdi/çıktı: yazmak, okumak komutlarını destekler
  • Yorumlar ve literaller
    • Yorum: (* ... *)
    • Literal: "merhaba"'yı yaz. biçiminde, hâl eki içerebilir

Kurulum ve çalıştırma

  • Gerekli araçlar
    • Foma: sonlu durum biçimbirim çözümleme araç takımı
    • Stack: Haskell derleme aracı
  • Derleme yöntemi
    • install.sh betiğini çalıştırın veya stack build komutuyla elle derleyin
    • TRmorph dönüştürücüsü vendor/trmorph.fst içinde bulunur
  • Çalıştırma
    • REPL: stack exec kip
    • Dosya çalıştırma: stack exec kip -- --exec path/to/file.kip
    • PATH'e kurulum: stack install

WASM Playground

  • playground/ dizininde tarayıcıda çalıştırma için derleme bulunur
    • kip-playground, wasm32-wasi için derlenir
    • HTML/JS harness ile tarayıcı içinde Kip çalıştırılabilir
    • Ayrıntılı derleme adımları için playground/README.md dosyasına bakın

Bytecode önbelleği (.iz)

  • Her .kip dosyasının tip denetimi sonucu önbelleğe alınarak .iz dosyası olarak kaydedilir
    • Kaynak veya bağımlılıklar değişmezse önbellek yeniden kullanılır
    • .iz dosyası silinirse yeniden ayrıştırma ve tip denetimi yapılır
    • Derleyici hash'i içerdiğinden, sürüm değiştiğinde otomatik olarak geçersiz olur

Örnek program

  • Doğal sayı tanımı, sabit bildirimi, toplama fonksiyonu ve sonuç yazdırma örneği içerir
    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.
    

Proje yapısı

  • app/ : CLI giriş noktası (Main.hs)
  • src/Kip/ : AST, önbellek, yorumlayıcı, ayrıştırıcı, renderer ve tip denetleyici içerir
  • lib/ : temel modüller (giriş.kip, temel.kip, temel-liste.kip vb.)
  • tests/ : başarılı (succeed/) ve başarısız (fail/) test durumları
  • vendor/ : trmorph.fst biçimbirim dönüştürücüsü

Test

  • stack test komutuyla çalıştırılır
    • tests/succeed/: geçmesi gereken testler
    • tests/fail/: başarısız olması gereken testler

Biçimbirim çözümleme

  • Kip, Türkçe biçimbirim çözümlemesi için TRmorph kullanır
    • Çok anlamlı sözcükler (ör. “takası”) için tüm olası yorumlar korunarak ayrıştırma yapılır
    • Anlam, tip denetimi aşamasında belirlenir
    • Belirli bir yorumu zorlamak için kesme işareti (') kullanılır (taka'sı, takas'ı)

Lisans

  • LICENSE dosyasına bakın

1 yorum

 
GN⁺ 2026-01-19
Hacker News yorumları
  • Herkese merhaba, ben Kip'in geliştiricisiyim
    Aslında playground ve landing page'i tamamladıktan sonra duyurmayı planlıyordum ama şu ana kadar yaptığım tarayıcı tabanlı playground'u paylaşıyorum
    https://alpaylan.github.io/kip/
    JavaScript'e transpilation daha yeni başladı, bu yüzden henüz çalışmıyor ama dilin kendisi büyük ölçüde çalıştırılabiliyor
    Hata bulursanız repo'daki issue'lara bildirirseniz sevinirim

    • Birkaç yıldır Türkçe çalışıyorum; dilbilgisel ve eklemeli yapısı nedeniyle bir programlama dili olarak ilginç olacağını düşünmüştüm
      Ben buna “Ç” adını vermeyi düşünmüştüm ama gerçekten yapmadım. Birinin bunu denediğini görmek sevindirici
    • “Kip”in Türkçede dilbilgisel kip (mood) anlamına geldiğini görünce araştırdım ama çeviri servisleri bunu “mode”, “modal”, “tense”, “module” gibi çok farklı biçimlerde veriyor
      Bana göre en yakını “tense”
      İlgili bir kaynak olarak BBC Bitesize açıklamasına baktım
    • Dilbilgisi ilginç ama sayısal işlem sözdiziminin nasıl çalıştığını merak ediyorum
      Örneğin
      (5'le 3'ün farkını) yaz.  
      (3'ün 5'le farkını) yaz.  
      
      Bu tür cümlelerde ‘farkını’ (difference) sözcüğünün anlamı ve eklerin konumu sayesinde bunun 5-3 mü yoksa 3-5 mi olduğu ayırt ediliyor mu diye merak ediyorum
      Doğal dil tabanlı bir sözdizimi olduğu için matematiksel tanımları ifade eden bir dil gibi hissettiriyor
    • Güncellenmiş web sayfası ve playground yayımlandı
      https://kip-dili.github.io/
    • Gerçekten harika bir çalışma. Uzun zamandır bu alanı keşfetmek istiyordum
  • Dilin yapısı hâlâ Anglosakson dilbilgisi sırasını izliyor gibi görünüyor
    Türkçe dilbilgisine daha uygun olarak şöyle bir biçim görmek isterdim

    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.  
    

    Böyle bir girişimin kendisi bile harika bir başlangıç noktası, tebrikler

  • Bu proje gerçekten harika
    Ben de Logicaffeine Studio'da benzer bir fikri deniyorum
    Logos lang'e de bakmanızı öneririm. Haskell seçimini de beğendim

  • Daha eski kuşaktan olanlar Lingua::Romana::Perligata'yı hatırlayabilir
    https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm

  • Ben de birkaç yıl önce benzer bir fikri denemiştim
    https://github.com/celaleddin/sembolik-fikir
    Önümüzdeki birkaç gün boyunca daha ayrıntılı bakmayı planlıyorum

    • İlginç bir yaklaşım. Sonek tabanlı morfem tahmini yapıyor gibi görünüyor
      Kip'te TRmorph kullanılarak morfolojik analiz tam olarak yapılıyor ve belirsizlikler type-checking aşamasında çözülüyor
      Bu yüzden neredeyse hiç apostrof gerekmiyor. Uygulaması zordu ama eğlenceli bir problemdi
  • Biraz Türkçe okuyabiliyorum ve bu proje sayesinde günüm güzelleşti
    Türkçenin güçlü ve standartlaşmış hâl sistemi sayesinde böyle bir dil tasarımının mümkün olması ilginç

    • Bu tür esnek sözcük dizimi sadece Türkçede değil, Slav dilleri, Sanskritçe, Fince, Macarca gibi çekimin güçlü olduğu dillerde de mümkün
    • Aslında İngilizcede de sözcük dizimi esnekliği epey var
      Örneğin “Colonel Mustard killed him in the study at 5:00 with his own knife.” gibi bir cümlede sıra değişse bile anlam korunuyor
      Latince ya da Rusça şiirde de bu tür karmaşık sözcük dizilimleri sık görülür
  • Bağlantıya ilk başta biraz önyargıyla tıkladım ama tanım temiz ve anlaşılması kolay
    Almanca bir sürümü de olsa eğlenceli olurdu

    • Ben de aynı şeyi düşündüm. Bunun yalnızca Rust gibi bir dilin anahtar sözcüklerini Türkçeye çevirmekten ibaret olacağını sanmıştım ama aslında çok daha incelikliymiş
  • Dilin kendisinden ziyade dilbilgisiyle ilgili bir referans olarak Language Log yazısını paylaşıyorum

  • Kız arkadaşım Türk, ben de Türkçe öğreniyordum; şimdi bunu programlama sezgisiyle öğrenme hızımı artırmak için kullanabilirim gibi görünüyor
    Gerçekten şaşırtıcı

    • Ben de bir Türk ile evliyim ve böyle bir teknoloji + dil birleşimini hiç düşünmemiştim
      Orta seviyede takılıp kalan öğrenimimi yeniden sürdürmek için iyi bir motivasyon oldu
  • Yapay zeka çağında her ülke kendi dilsel geleneğini yansıtan programlama dilleri oluşturabilir
    Bu, geliştirme kültürünün özerkliğini ve çeşitliliğini büyük ölçüde genişletir