- Ruby on Rails फ्रीलांसर के रूप में 20 साल के अनुभव ने Common Lisp प्रोजेक्ट का रूप लिया, लेकिन performance, portability और runtime environment की सीमाएँ जमा होती गईं और आखिरकार फिर से C चुनना पड़ा
- cl-facts में तेज़ triple store और nest किए जा सकने वाले atomic transactions थे, लेकिन लंबे development time की वजह से clients भी खोने पड़े
- virtual machines, Linux cgroups-आधारित containers और garbage collector को लेकर असंतोष ने यह निष्कर्ष दिया कि C अब भी system software के लिए व्यावहारिक आधार है
- libc3 से शुरू हुआ काम C3 language, interpreter ic3 और compiler c3c की योजना तक बढ़ा, और name collision के कारण बाद में KC3 बन गया
- अभी KC3 में C89 में port किया गया graph database, REPL ikc3, MVC webserver kc3_httpd, और Markdown-to-HTML के C implementation पर आधारित documentation site तक शामिल है
Common Lisp का काम C में दोबारा लिखने तक कैसे पहुँचा
- फ्रांस के computer school में 5 साल पढ़ने और 20 साल तक Ruby on Rails freelance developer के रूप में काम करने के बाद, जिसे Common Lisp की छोटी learning समझा था, वह धीरे-धीरे बड़ा project बन गया
- Common Lisp से C code generate करके ASN.1 parser और query system बनाया, और यह काम custom Common Lisp-to-C SNMP server तक बढ़ा
- इसके बाद कई Common Lisp packages लिखे
- cl-unix-cybernetics GitHub repositories में सबसे ज़्यादा stars पाने वाला project बना
- cl-streams, cffi-posix भी लिखे
- cl-facts Common Lisp graph database के रूप में इस्तेमाल किया जा सकने वाला triple store है
- cl-facts तेज़ performance, atomic transactions, nest किए जा सकने वाले transactions,
unwind-protectcompatibility, और सिर्फ़ 3 macros सीखकर इस्तेमाल करने लायक usability वाला परिणाम है - cl-facts को बेल्जियम के European Lisp Symposium में lightning talk के रूप में प्रस्तुत किया गया, और presentation slides facts.pdf में हैं
- Common Lisp package development में बहुत समय लगा और clients खोने पड़े, लेकिन Common Lisp को भविष्य की पीढ़ियों के लिए tool माना गया
C, KC3, और मौजूदा संरचना
- virtual machines CPU और bandwidth को emulation में बर्बाद करती हैं, और Linux cgroups-आधारित containers में RCE और privilege escalation की समस्याएँ लगातार मिलती रहती हैं—इस अनुभव ने OpenBSD-केंद्रित चुनाव तक पहुँचाया
- Terraform, Ansible जैसे DevOps tools से बचा गया, और VM व containers ही नहीं, programming languages से भी असंतुष्ट लोगों को देखा गया
- Clojure में हजारों units वाला strategy game बनाने की कोशिश, जहाँ हर unit की अपनी world perception हो, garbage collector की वजह से असफल रही
- Common Lisp projects का उपयोग-क्षेत्र भी garbage collector की वजह से सीमित रहा, और JVM का garbage collector अच्छी तरह बनाने के लिए बड़े खर्च की मांग करने वाली commercial strength के रूप में आंका गया
- performance और portability को देखते हुए, जब तक कोई अलग tool न हो, तर्कसंगत विकल्प C माना गया
- Linux C में लिखा गया है
- OpenBSD C में लिखा गया है
- GTK+ object-oriented pure C में लिखा गया है
- GNOME C में लिखा गया है
- Linux desktop apps में से कई पुराने C में लिखे गए हैं
- libc3 utility library से शुरुआत होकर C3 language, interpreter ic3, और compiler c3c की योजना तक विकास हुआ
- UTF-8 buffers और data structures को तेज़ी से पास कराया जा सके, ऐसा बनाया गया, और memory cost स्वीकार करते हुए bounds-check लागू किया गया
- defensive programming को केंद्र में रखा गया और bugs को शुरुआत से ही 0 तक घटाने की दिशा अपनाई गई; बताया गया कि KC3 code security implications के बिना execute होता है
- शुरुआती interpreter को REPL में tags process करने के रूप में बनाया गया, जो language के सभी data types रखने वाला enum-tagged union है
- 3 साल बाद 5-layer refactoring पूरी हुई, tests फिर से सभी pass हुए, और webserver भी फिर से टूटे बिना चलने की स्थिति में आया
- language का नाम C3 पहले से इस्तेमाल में था, इसलिए इसे KC3 में बदला गया
- मौजूदा Common Lisp graph database cl-facts को C89 में port किया गया
- इसका अधिकांश हिस्सा 2020 में Covid-19 lockdown के दौरान लिखा गया
- इसमें triples जोड़ना/हटाना, recursive query system, transactions, logging और persistence शामिल हैं
- Common Lisp के मूल design को C89 में लगभग वैसा ही implement किया गया
- KC3 में कई algorithmic data types की formal semantics संभालने के लिए parser और generator भी शामिल हैं
- Structs, Linked lists, Maps, Hash tables, Time, Complex, Rationals, Tuples, Code blocks, Quotes, Unquotes, Copy on write, Skip lists, Sets आदि शामिल हैं
- macros हैं, और उदाहरण आगे के लेख में दिए जाने वाले हैं
- José Valim और Elixir पर हुए काम से बड़ा inspiration मिला
- ikc3 REPL keyboard या file input को parse करता है और KC3 evaluation results को standard output पर भेजता है; KC3 unit tests के दूसरे चरण के अधिकांश हिस्से में इसका उपयोग होता है
- kc3_httpd MVC framework वाला webserver है, और अभी web pages generate करता है
- Common Lisp लेख के views 700 तक पहुँचे, और documentation website kc3_httpd और विस्तारित Markdown-to-HTML C implementation से लिखी गई
अभी कोई टिप्पणी नहीं है.