- 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ı
- 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
- 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
1 yorum
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
Ben buna “Ç” adını vermeyi düşünmüştüm ama gerçekten yapmadım. Birinin bunu denediğini görmek sevindirici
Bana göre en yakını “tense”
İlgili bir kaynak olarak BBC Bitesize açıklamasına baktım
Örneğin 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
https://kip-dili.github.io/
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
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
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ç
Ö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
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ı
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