तुर्की व्याकरण के case पर आधारित प्रोग्रामिंग भाषा Kip
(github.com/kip-dili)- Kip एक प्रायोगिक प्रोग्रामिंग भाषा है जो तुर्की भाषा के व्याकरणिक case और mood को type system में एकीकृत करती है, और प्राकृतिक भाषा की morphology तथा type theory के संयोजन की पड़ताल करती है
- यह तुर्की के संज्ञा case रूपांतरण और vowel harmony को कोड संरचना में दर्शाती है, जिससे function arguments के संबंध case suffixes से अलग किए जा सकते हैं और argument order में flexibility मिलती है
- pattern matching, polymorphic types, inductive data types, input/output effects जैसी आधुनिक functional languages की प्रमुख विशेषताओं को तुर्की व्याकरणिक रूपों में व्यक्त करती है
- इसे Foma morphological analyzer और Haskell Stack से build किया जाता है, और यह WASM-आधारित browser runtime तथा bytecode cache (.iz) सुविधा प्रदान करती है
- यह भाषाविज्ञान और programming language design के संगम को दिखाने वाला research और education के लिए बनाया गया project है, जो प्राकृतिक भाषा-आधारित भाषा डिज़ाइन की संभावनाओं का प्रयोग करता है
Kip का परिचय
- Kip का नाम तुर्की शब्द ‘kip’(mood) से लिया गया है, और यह एक प्रायोगिक भाषा है जो तुर्की व्याकरणिक case को type system में शामिल करती है
- तुर्की के संज्ञा case रूपांतरण(ismin halleri) और vowel harmony को programming language design में एकीकृत करती है
- यह research और educational purpose का project है, वास्तविक deployment के लिए बनी भाषा नहीं
- इसमें तुर्की और अंग्रेज़ी tutorials उपलब्ध हैं, जिनसे Kip प्रोग्राम लिखना सीखा जा सकता है
- इसका grammar और व्यवहार अभी प्रयोगात्मक चरण में है, इसलिए आगे बदलाव संभव हैं
भाषा की विशेषताएँ
- तुर्की व्याकरणिक case को type की तरह उपयोग करना
- यह 8 case को support करती है: nominative, accusative, dative, locative, ablative, genitive, instrumental, possessive
- हर case suffix के रूप में चिह्नित होता है और function arguments के बीच संबंध को स्पष्ट रूप से अलग करता है
- लचीला argument order
- case suffixes argument संबंधों को स्पष्ट कर देते हैं, इसलिए argument क्रम बदलने पर भी अर्थ वही रहता है
- उदाहरण:
(5'le 3'ün farkını) yaz.और(3'ün 5'le farkını) yaz.का परिणाम समान है
- inductive data type definition
- तुर्की syntax में algebraic data types परिभाषित किए जा सकते हैं
- उदाहरण:
Bir doğal-sayı ya sıfır ya da bir doğal-sayının ardılı olabilir.
- polymorphic type support
- generic data structures परिभाषित किए जा सकते हैं
- उदाहरण:
(öğe listesi)रूप में list data type परिभाषित करना
- pattern matching
- conditional suffix
-sa/-seका उपयोग करके pattern matching किया जाता है - nested patterns, binders, wildcard (
değilse) का समर्थन
- conditional suffix
- constant definition
diyelimkeyword से named constants घोषित किए जाते हैं- उदाहरण:
sıfırın ardılına bir diyelim.
- input/output और effect handling
-ip/-ıp/-up/-üpsuffix से sequential execution, औरolarakसे binding- उदाहरण:
selamlamak, isim olarak okuyup, ("Merhaba "yla ismin birleşimini) yazmaktır.
- basic types
- integer(
tam-sayı):toplamı,farkı,çarpımıजैसे operations का समर्थन - string(
dizge):uzunluğu,birleşimi,tam-sayı-haliउपलब्ध - input/output:
yazmak,okumakcommands उपलब्ध
- integer(
- comments और literals
- comments:
(* ... *) - literals:
"merhaba"'yı yaz.जैसे case suffix वाले रूप
- comments:
इंस्टॉलेशन और रन
- ज़रूरी tools
- Foma: finite-state morphological analysis toolkit
- Stack: Haskell build tool
- build का तरीका
install.shscript चलाएँ याstack buildcommand से manual build करेंvendor/trmorph.fstमें TRmorph converter शामिल है
- run करना
- REPL:
stack exec kip - file चलाना:
stack exec kip -- --exec path/to/file.kip - PATH installation:
stack install
- REPL:
WASM Playground
playground/directory में browser execution build शामिल हैkip-playgroundकोwasm32-wasiके लिए compile किया जाता है- HTML/JS harness के जरिए browser के अंदर Kip चलाया जा सकता है
- विस्तृत build प्रक्रिया के लिए
playground/README.mdदेखें
bytecode cache (.iz)
- हर
.kipfile के type-checking result को cache करके.izfile में सेव किया जाता है- source या dependency न बदलने पर cache दोबारा उपयोग होती है
.izfile हटाने पर parsing और type-checking फिर से किया जाता है- compiler hash शामिल होने के कारण version बदलने पर यह अपने-आप अमान्य हो जाती है
उदाहरण प्रोग्राम
- प्राकृतिक संख्याओं की परिभाषा, constants declaration, addition function, और result output का उदाहरण शामिल है
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.
project संरचना
- app/ : CLI entry point (
Main.hs) - src/Kip/ : AST, cache, interpreter, parser, renderer, type checker शामिल
- lib/ : base modules (
giriş.kip,temel.kip,temel-liste.kipआदि) - tests/ : success(
succeed/) और failure(fail/) test cases - vendor/ :
trmorph.fstmorphological converter
टेस्ट
stack testcommand से चलाएँtests/succeed/: जो tests पास होने चाहिएtests/fail/: जो tests fail होने चाहिए
morphological analysis
- Kip, तुर्की morphological analysis के लिए TRmorph का उपयोग करता है
- बहुअर्थी शब्द (जैसे: “takası”) को सभी संभावित व्याख्याओं के साथ parse किया जाता है
- type-checking चरण में उसका अर्थ तय होता है
- किसी खास व्याख्या को force करने के लिए apostrophe(
') का उपयोग करें (taka'sı,takas'ı)
लाइसेंस
LICENSEfile देखें
1 टिप्पणियां
Hacker News की राय
सभी को नमस्ते, मैं Kip का डेवलपर हूँ
मूल रूप से मैं playground और landing page पूरा करने के बाद इसे सार्वजनिक करना चाहता था, लेकिन अभी तक बनाया गया browser-based playground साझा कर रहा हूँ
https://alpaylan.github.io/kip/
JavaScript में transpilation अभी बस शुरू हुई है इसलिए अभी काम नहीं करती, लेकिन भाषा खुद अधिकांशतः चलने योग्य है
अगर कोई bug मिले तो repo issue में बताएं
मैं उसे “Ç” कहना चाहता था, लेकिन वास्तव में बनाया नहीं। किसी और को इसे आज़माते देख अच्छा लगा
व्यक्तिगत रूप से मुझे “tense” सबसे करीब लगता है
संबंधित संदर्भ के लिए मैंने BBC Bitesize की व्याख्या देखी
उदाहरण के लिए ऐसे वाक्यों में ‘farkını’(अंतर) का अर्थ और particles की स्थिति के आधार पर क्या यह 5-3 और 3-5 में फर्क करता है?
क्योंकि syntax natural language पर आधारित है, यह गणितीय परिभाषाएँ लिखने वाली भाषा जैसा महसूस होता है
https://kip-dili.github.io/
भाषा की संरचना अब भी Anglo-Saxon grammar order का पालन करती हुई लगती है
Turkish grammar के और अनुकूल मैं कुछ इस तरह देखना चाहूँगा
फिर भी यह प्रयास अपने आप में एक शानदार शुरुआत है, बधाई
यह project वास्तव में कमाल का है
मैं भी Logicaffeine Studio में इसी तरह के विचार पर प्रयोग कर रहा हूँ
Logos lang भी देखना अच्छा रहेगा। Haskell चुनना भी मुझे पसंद आया
पुरानी पीढ़ी के लोग शायद Lingua::Romana::Perligata को याद करें
https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm
मैंने भी कुछ साल पहले ऐसा ही एक विचार आज़माया था
https://github.com/celaleddin/sembolik-fikir
मैं अगले कुछ दिनों में इसे और देखूँगा
Kip में TRmorph का उपयोग करके morpheme analysis पूरी तरह किया जाता है, और type checking चरण में ambiguity सुलझाई जाती है
इसलिए लगभग apostrophe की जरूरत नहीं पड़ती। इसे implement करना कठिन था, लेकिन यह एक मजेदार समस्या थी
मैं थोड़ी Turkish पढ़ सकता हूँ, और इस project की वजह से मेरा दिन बन गया
यह दिलचस्प है कि Turkish की case system इतनी मजबूत और standardised है कि इस तरह की language design संभव हो पाती है
उदाहरण के लिए “Colonel Mustard killed him in the study at 5:00 with his own knife.” जैसे वाक्य में क्रम बदलने पर भी अर्थ बना रहता है
Latin या Russian कविता में भी इस तरह का जटिल word order अक्सर दिखाई देता है
मैंने शुरुआत में पूर्वाग्रह के साथ लिंक खोला था, लेकिन इसकी परिभाषा साफ़-सुथरी और समझने में आसान है
इसका German version भी हो तो मजेदार होगा
भाषा से अधिक, grammar संदर्भ के रूप में मैं Language Log लेख साझा कर रहा हूँ
मेरी girlfriend Turkish है और मैं Turkish सीख रहा था, अब लगता है कि programming sense के साथ सीखने की गति बढ़ा सकूँगा
यह सचमुच चौंकाने वाला है
intermediate स्तर पर रुक गई पढ़ाई को फिर से शुरू करने के लिए यह अच्छा motivation है
AI युग में हर देश अपनी भाषाई परंपरा को दर्शाने वाली programming language बना सकता है
यह developer culture की स्वायत्तता और विविधता को बहुत बढ़ाने वाली बात है