मैंने Common Lisp को क्यों चुना
(blog.djhaskin.com)अलविदा, Clojure
- लगभग 7 साल तक Clojure का उपयोग किया, लेकिन CLI ऐप्स की "धीमी startup speed" की समस्या के कारण अब यह संतोषजनक नहीं रहा
- babashka जैसे प्रोजेक्ट थे, लेकिन GraalVM के native-image आदि के साथ भी धीमी startup speed की समस्या हल करना मुश्किल था
- "standalone executable की तेज startup speed" एक अनिवार्य आवश्यकता बन गई, और लगा कि Clojure इसे पूरा नहीं कर पाता
एक नया Lisp खोजना
- नई Lisp भाषा खोजने के लिए कई भाषाओं का अध्ययन किया। ऐसी भाषा की तलाश थी जो पिछले प्रोजेक्ट्स में झेली गई समस्याओं को हल कर सके
- कोई "स्पष्ट requirements" नहीं थीं, लेकिन अंततः निम्नलिखित मानदंड तय हुए
- "स्वतंत्र रूप से चल सकने वाली और तेज़ी से शुरू होने वाली executable" को एक उचित toolchain के साथ बनाया जा सके (Clojure के बारे में मुख्य शिकायत का समाधान)
- चूंकि Emacs का उपयोग नहीं कर सकता, इसलिए Vim में उपयोग संभव होना चाहिए
- Windows और Mac support अनिवार्य है; केवल Linux/POSIX operating systems का support पर्याप्त नहीं
- Clojure और Java की तरह किसी बड़े community language के साथ plugin/integration की संभावना हो तो अच्छा
- runtime speed पर्याप्त तेज़ होनी चाहिए (कम से कम Clojure के स्तर की, या उससे बेहतर)
- multithreading support मजबूत होना चाहिए, और यदि संभव हो तो GIL (Global Interpreter Lock) जैसी चीज़ न हो
- मजबूत community अनिवार्य है
- ecosystem समृद्ध होना चाहिए, और कम से कम निम्नलिखित libraries उपलब्ध होनी चाहिए:
- JSON parsing और serialization
- Sqlite3 support
- HTTP request library
- Clojure जैसी functional data structures का support (हालाँकि यह भाग कम महत्वपूर्ण है)
- जिन भाषाओं का अध्ययन किया गया
- Scheme : r6rs और r7rs के standard मुद्दों के कारण community बंटी हुई लगी, इसलिए आकर्षण नहीं हुआ; ecosystem भी छोटा था और ज़रूरतें पूरी नहीं कर सका
- Racket : छात्र जीवन में उपयोग किया था, लेकिन runtime धीमा और भारी लगा, इसलिए पसंद नहीं आया
- Common Lisp : lisp-lang.org पर मिला। community और resources प्रभावशाली लगे, इसलिए इसे आज़माने का फैसला किया
Magic Happens Here
- Common Lisp सीखने की पूरी यात्रा की कहानी यहाँ छोड़ दी गई है, लेकिन learning process कठिन था
- शुरुआत गलत तरीके से हुई। क्रिसमस पर CLtLv2 किताब मिली और उसे पढ़ते हुए शुरुआत की
- बाद में HyperSpec मिला, और उसे पढ़ना शुरू करने के बाद सीखना बेहतर दिशा में आगे बढ़ा
- Common Lisp की कुछ अनूठी विशेषताएँ थीं
- यह एक standardized language है, Java से अधिक C के समान
- कई compilers, interpreters और runtimes इस standard को implement करते हैं
- Roswell जैसे tools मौजूद हैं जिनसे अलग-अलग implementations को install और manage किया जा सकता है
- community में SBCL को सबसे लोकप्रिय implementation माना जाता है
- अगर खोज की शुरुआत में Janet के बारे में पता होता तो?
- Janet में निम्नलिखित विशेषताएँ हैं, इसलिए संभव है कि Common Lisp सीखने से पहले ही उससे संतुष्ट हो जाता
- संक्षिप्त syntax, तेज़ और छोटे executables, C FFI support
- दिलचस्प शुरुआती गाइड उपलब्ध है
- व्यक्तिगत रूप से महत्वपूर्ण मानी गई सभी requirements को पूरा करता है
- फिर भी Common Lisp चुनने का कारण
- बाद में पता चले CLOS और Condition System जैसी उन्नत सुविधाएँ शायद छूट जातीं
- Common Lisp एक अधिक शक्तिशाली भाषा है
Requirements Met
यह सुनिश्चित करने के बाद कि Common Lisp आवश्यकताओं को पूरा करने वाली भाषा है, इसे अगली Lisp भाषा के रूप में चुना गया और अब तक इसका उपयोग जारी है। मुख्य निष्कर्ष इस प्रकार हैं:
- standalone executables:
- Common Lisp में standalone executable बनाने के कई तरीके हैं
- executable compressed हो या न हो, startup time कुछ सेकंड के हिस्से से लेकर लगभग तुरंत चलने तक हो सकता है
- यह सुविधा कोई अतिरिक्त option नहीं, बल्कि Lisp programs को distribute करने के मुख्य तरीकों में से एक है
- Vim workflow:
- कई अच्छे options हैं, लेकिन व्यक्तिगत रूप से अपना Vim workflow खुद बनाकर उपयोग किया गया
- साथ ही यह भी पाया कि VS Code, Common Lisp IDE के रूप में उपयोग के लिए काफ़ी अच्छा है
- Windows/Mac/Linux support:
- SBCL प्रमुख operating systems को अच्छी तरह support करता है
- बड़े imperative ecosystem के साथ integration:
- अधिकांश implementations C language के साथ integration को अच्छी तरह support करती हैं, और इसे CFFI के माध्यम से उपयोग किया जा सकता है
- runtime speed:
- SBCL की runtime speed बहुत तेज़ है
- multithreading:
- Common Lisp standard में multithreading के लिए स्पष्ट support शामिल नहीं है, लेकिन प्रमुख implementations इसे support करती हैं
- Bordeaux-Threads नामक library अलग-अलग implementations के बीच के अंतर को कम करती है
- lparallel, cl-async, blackbird जैसी libraries से multithreading और asynchronous programming संभव है
- मजबूत community:
- community activity को खोजा और उसमें भाग लिया
- 2024 community survey के नतीजों और European Lisp Symposium में Common Lisp community की सक्रियता की पुष्टि हुई
- blog networks और subreddit में भी community support मजबूत है
- ecosystem:
- अधिकांश लोग Quicklisp का उपयोग करते हैं, लेकिन व्यक्तिगत रूप से packages को OCICL से manage किया जाता है
- Common Lisp Cookbook, CLiki, Awesome CL आदि में libraries और तकनीकी जानकारी देखी जा सकती है
- specific library support:
- JSON: jzon
- Sqlite3: cl-sqlite
- HTTP requests: dexador
- functional data structures: FSet, cl-hamt
नए लोगों के लिए नोट्स
- Common Lisp Discord में शुरुआती लोगों की संख्या बढ़ने के साथ, यह लेख इस बात को साझा करने के लिए लिखा गया कि लेखक ने Common Lisp क्यों चुना और उसमें कैसे ढला
- आशा है कि यह लेख Common Lisp में रुचि रखने वालों के लिए उपयोगी होगा
2 टिप्पणियां
Hacker News राय
SBCL का उपयोग करके source code के बिना भी समस्या हल करने का अनुभव प्रभावशाली था। किसी दूसरे tech stack के साथ source code न होने पर शायद इतनी जल्दी सुधार नहीं किया जा सकता था
Common Lisp से Clojure में जाने का अनुभव साझा किया, और Clojure की concurrency features आकर्षक लगीं
vim-slime का उपयोग करने से productivity और developer satisfaction में काफ़ी सुधार हुआ
Lisp की value समझ में नहीं आई, लेकिन उससे जुड़ा एक गाना याद है
Emacs/slime को vim-slime से बेहतर Lisp IDE बताया गया
Common Lisp को hobby के तौर पर इस्तेमाल कर रहे हैं, और SBCL REPL में C# code चलाना चाहते हैं
Clojure और babashka का उपयोग करके CLI application development का अनुभव साझा किया
native-image का उपयोग करते समय समस्याएँ आईं, और Clojure को लगभग perfect language मानते हैं
Janet language में रुचि जताई, और project का GitHub README और FAQ उपयोगी बताया
ऐसा अनुभव साझा किया जिसने Lisp सीखने की इच्छा जगाई, खासकर इसलिए कि लेखक vim fan है
मैं Lisp की value नहीं समझ पाया, लेकिन उससे जुड़ा एक गाना याद है... Lisp पर कई गाने हैं, और YouTube पर
Land of Lispनाम का एक गाना भी है ;-)