- Kip adalah bahasa pemrograman eksperimental yang mengintegrasikan kasus tata bahasa dan modus (mood) bahasa Turki ke dalam sistem tipe, untuk mengeksplorasi perpaduan morfologi bahasa alami dan teori tipe
- Dengan mencerminkan perubahan kasus nomina dan harmoni vokal bahasa Turki dalam struktur kode, Kip membedakan relasi argumen fungsi melalui sufiks kasus dan mendukung fleksibilitas urutan argumen
- Fitur utama bahasa fungsional modern seperti pattern matching, tipe polimorfik, tipe data induktif, dan efek input/output diekspresikan dalam bentuk tata bahasa Turki
- Dibangun menggunakan penganalisis morfologi Foma dan Haskell Stack, serta menyediakan lingkungan eksekusi browser berbasis WASM dan fitur cache bytecode (.iz)
- Sebagai proyek riset dan edukasi yang menunjukkan persilangan linguistik dan desain bahasa pemrograman, Kip menjadi contoh eksperimen kemungkinan desain bahasa berbasis bahasa alami
Ikhtisar Kip
- Kip adalah bahasa yang namanya diambil dari kata Turki
kip (modus), sebuah bahasa eksperimental yang memasukkan kasus tata bahasa Turki ke dalam sistem tipe
- Mengintegrasikan perubahan kasus nomina (
ismin halleri) dan harmoni vokal (vowel harmony) bahasa Turki ke dalam desain bahasa pemrograman
- Merupakan proyek untuk tujuan riset dan edukasi, bukan bahasa untuk distribusi produksi
- Tersedia tutorial dalam bahasa Turki dan Inggris untuk mempelajari cara menulis program Kip
- Tata bahasa dan perilakunya masih berada pada tahap eksperimental, sehingga dapat berubah di masa depan
Fitur bahasa
- Menggunakan kasus tata bahasa Turki sebagai tipe
- Mendukung 8 kasus: nominatif, akusatif, datif, lokatif, ablatif, genitif, instrumental, dan posesif
- Tiap kasus ditandai dengan sufiks, sehingga relasi antar argumen fungsi dibedakan secara eksplisit
- Urutan argumen yang fleksibel
- Karena sufiks kasus memperjelas relasi argumen, makna tetap sama walau urutan argumen diubah
- Contoh:
(5'le 3'ün farkını) yaz. dan (3'ün 5'le farkını) yaz. menghasilkan hasil yang sama
- Definisi tipe data induktif
- Dukungan tipe polimorfik
- Dapat mendefinisikan struktur data generik
- Contoh: tipe list dalam bentuk
(öğe listesi)
- Pattern matching
- Melakukan pattern matching menggunakan sufiks kondisional
-sa/-se
- Mendukung nested pattern, binder, dan wildcard (
değilse)
- Definisi konstanta
- Mendeklarasikan konstanta bernama dengan kata kunci
diyelim
- Contoh:
sıfırın ardılına bir diyelim.
- Input/output dan penanganan efek
- Tipe dasar
- Bilangan bulat (
tam-sayı): mendukung operasi seperti toplamı, farkı, çarpımı
- String (
dizge): menyediakan uzunluğu, birleşimi, tam-sayı-hali
- Input/output: mendukung perintah
yazmak, okumak
- Komentar dan literal
- Komentar:
(* ... *)
- Literal: bentuk seperti
"merhaba"'yı yaz. yang menyertakan sufiks kasus
Instalasi dan menjalankan
- Alat yang dibutuhkan
- Foma: toolkit analisis morfologi finite-state
- Stack: alat build Haskell
- Cara build
- Jalankan skrip
install.sh atau build manual dengan perintah stack build
- Menyertakan transduser TRmorph di
vendor/trmorph.fst
- Menjalankan
- REPL:
stack exec kip
- Menjalankan file:
stack exec kip -- --exec path/to/file.kip
- Instal ke PATH:
stack install
WASM Playground
- Direktori
playground/ berisi build untuk dijalankan di browser
kip-playground dikompilasi ke wasm32-wasi
- Dapat menjalankan Kip di browser melalui harness HTML/JS
- Lihat
playground/README.md untuk prosedur build terperinci
Cache bytecode (.iz)
- Menyimpan hasil type checking tiap file
.kip ke file .iz sebagai cache
- Cache digunakan kembali jika source atau dependensi tidak berubah
- Jika file
.iz dihapus, parsing dan type checking akan dijalankan ulang
- Menyertakan hash compiler, sehingga otomatis tidak berlaku saat versi berubah
Contoh program
- Mencakup contoh definisi bilangan alami, deklarasi konstanta, fungsi penjumlahan, dan output hasil
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.
Struktur proyek
- app/ : titik masuk CLI (
Main.hs)
- src/Kip/ : mencakup AST, cache, interpreter, parser, renderer, dan type checker
- lib/ : modul dasar (
giriş.kip, temel.kip, temel-liste.kip, dll.)
- tests/ : kasus uji sukses (
succeed/) dan gagal (fail/)
- vendor/ : transduser morfologi
trmorph.fst
Pengujian
- Jalankan dengan perintah
stack test
tests/succeed/: pengujian yang harus lulus
tests/fail/: pengujian yang harus gagal
Analisis morfologi
- Kip menggunakan TRmorph untuk melakukan analisis morfologi bahasa Turki
- Kata ambigu (contoh: “takası”) diparsing sambil mempertahankan semua interpretasi yang mungkin
- Makna ditentukan pada tahap type checking
- Untuk memaksa interpretasi tertentu, gunakan apostrof (
') (taka'sı, takas'ı)
Lisensi
1 komentar
Komentar Hacker News
Halo semuanya, saya adalah pengembang Kip
Awalnya saya ingin merilisnya setelah playground dan landing page selesai, tetapi untuk sekarang saya membagikan playground berbasis browser yang sudah saya buat sejauh ini
https://alpaylan.github.io/kip/
Transpilasi ke JavaScript baru saja dimulai jadi belum berfungsi, tetapi bahasanya sendiri sebagian besar sudah bisa dijalankan
Jika ada bug, saya akan senang jika Anda melaporkannya di issue repo
Saya sempat ingin menamainya “Ç”, tetapi tidak benar-benar membuatnya. Senang melihat ada yang mencobanya
Secara pribadi saya merasa “tense” adalah yang paling dekat
Sebagai referensi terkait, saya membaca penjelasan BBC Bitesize
Misalnya Dalam kalimat seperti ini, saya penasaran apakah makna ‘farkını’ (selisih) dan posisi partikel menentukan apakah itu berarti 5-3 atau 3-5
Karena sintaksnya berbasis bahasa alami, ini terasa seperti bahasa untuk mendeskripsikan definisi matematis
https://kip-dili.github.io/
Struktur bahasanya masih tampak mengikuti urutan tata bahasa Anglo-Saxon
Saya ingin melihat bentuk seperti berikut yang lebih sesuai dengan tata bahasa Turki
Upaya seperti ini sendiri sudah merupakan titik awal yang sangat baik, jadi selamat
Proyek ini benar-benar keren
Saya juga sedang bereksperimen dengan ide serupa di Logicaffeine Studio
Mungkin ada baiknya juga melihat Logos lang. Saya juga suka pilihan menggunakan Haskell
Generasi lama mungkin ingat Lingua::Romana::Perligata
https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm
Saya juga pernah bereksperimen dengan ide serupa beberapa tahun lalu
https://github.com/celaleddin/sembolik-fikir
Saya berencana melihatnya lebih jauh dalam beberapa hari ke depan
Di Kip, analisis morfem dilakukan sepenuhnya dengan TRmorph, dan ambiguitas diselesaikan pada tahap pemeriksaan tipe
Karena itu, hampir tidak perlu menggunakan apostrof. Implementasinya sulit, tetapi masalahnya sangat menarik
Saya bisa membaca sedikit bahasa Turki, dan proyek ini membuat hari saya menyenangkan
Menarik bahwa sistem kasus bahasa Turki begitu kuat dan terstandarisasi sehingga desain bahasa seperti ini dimungkinkan
Misalnya, kalimat seperti “Colonel Mustard killed him in the study at 5:00 with his own knife.” tetap mempertahankan makna meskipun urutannya diubah
Dalam puisi Latin maupun Rusia, urutan kata yang kompleks seperti ini juga sering muncul
Awalnya saya mengklik tautannya dengan prasangka, tetapi definisinya rapi dan mudah dipahami
Sepertinya versi Jerman juga akan menarik
Saya membagikan artikel Language Log sebagai referensi terkait tata bahasa daripada tentang bahasanya sendiri
Pacar saya orang Turki dan saya sedang belajar bahasa Turki, jadi sekarang rasanya saya bisa mempercepat belajar dengan intuisi pemrograman
Benar-benar mengejutkan
Ini menjadi motivasi yang bagus untuk melanjutkan lagi pembelajaran saya yang berhenti di tingkat menengah
Di era AI, tiap negara bisa membuat bahasa pemrograman yang mencerminkan tradisi kebahasaannya sendiri
Ini akan sangat memperluas otonomi dan keberagaman budaya pengembangan