वैकल्पिक कार्यान्वयन की समस्या (Alternative Implementation Problem)
(pointersgonewild.com)वैकल्पिक कार्यान्वयन की समस्या
लेखक सॉफ़्टवेयर दुनिया में बार-बार सामने आने वाली वैकल्पिक कार्यान्वयन की समस्या पर बात करते हैं। लेखक का अनुभव मुख्यतः dynamic typed programming languages को optimize करने का रहा है।
- PyPy प्रोजेक्ट ने Python के लिए एक उन्नत JIT compiler विकसित किया, लेकिन व्यवहार में इसका लगभग उपयोग नहीं हुआ। Python लगातार नई features जोड़ता रहा, इसलिए PyPy के लिए उसके साथ तालमेल बिठाना कठिन था.
- LuaJIT को बहुत सराहा जाता है, लेकिन Lua भाषा लगातार नई features जोड़ती रही, जिसके कारण LuaJIT कई versions पीछे रह गया.
- TruffleRuby JIT ने सबसे प्रभावशाली performance दिखाई, लेकिन CRuby की तुलना में feature compatibility की कमी के कारण इसका deployment सीमित रहा.
सबक: वैकल्पिक कार्यान्वयन लगभग अनिवार्य रूप से असफल होने वाला विकल्प है
- यदि आप एक वैकल्पिक कार्यान्वयन बनाते हैं, तो आप आधिकारिक implementation के बदलावों पर निर्भर होने से बच नहीं सकते.
- आधिकारिक implementation परियोजना की दिशा को नियंत्रित करता है, और वैकल्पिक implementation को बस उसका पीछा करना पड़ता है.
- पारंपरिक रूप से, interpreted languages के लिए JIT implementation बनाते समय, interpreter में नई features जोड़ना कहीं अधिक तेज़ होता है, इसलिए आधिकारिक implementation, JIT से आगे निकल सकता है.
YJIT: CRuby के भीतर Ruby JIT compiler का कार्यान्वयन
- YJIT भी एक Ruby JIT है, लेकिन इसे CRuby के भीतर ही implement करने का निर्णय लिया गया.
- इसके कारण YJIT शुरुआत से ही CRuby की सभी features के साथ 100% compatible हो सका.
- अब यह Ruby का आधिकारिक JIT बन चुका है और Shopify, Discourse, GitHub आदि में deploy किया जा रहा है.
व्यापक दृष्टिकोण से सबक
- Crystal भाषा, जो मौजूदा भाषाओं जैसी दिखती है लेकिन compatible नहीं है, उसे भी केवल सीमित सफलता मिली.
- जो चीज़ मौजूदा भाषा जैसी दिखे लेकिन compatible न हो, वह लोगों को केवल भ्रमित करती है.
- नई programming language बनाते समय, किसी मौजूदा भाषा का subset बनने की कोशिश करने के बजाय अपना अलग रास्ता चुनना बेहतर है.
- तभी आप दूसरी implementations की performance, features या libraries से बंधे बिना अपनी गति और अपनी दिशा में विकसित हो सकते हैं.
GN⁺ की राय
- इस लेख में वर्णित 'वैकल्पिक कार्यान्वयन की समस्या' केवल programming languages ही नहीं, बल्कि विभिन्न software और hardware systems बनाते समय भी ध्यान रखने योग्य बात है.
- यदि ध्यान केवल stability और compatibility पर रहे, तो innovation कठिन हो सकता है. लेकिन वास्तविक users के नज़रिये से compatibility एक बहुत महत्वपूर्ण तत्व है. नई तकनीक और user-friendliness के बीच संतुलन बनाना महत्वपूर्ण है.
- दीर्घकालिक दृष्टि से, किसी नए project को बनाते समय यह पर्याप्त रूप से सोचना ज़रूरी है कि वह 'किसके साथ compatible है' और 'उसे किस दिशा में विकसित करना है'.
- नई programming language बनाते समय, केवल किसी मौजूदा भाषा का syntax मिलता-जुलता बना देना भ्रम ही बढ़ाता है. इसके बजाय अपनी स्पष्ट philosophy और direction रखना अधिक उचित है.
- बाज़ार में प्रतिस्पर्धा करने से अधिक, रचनात्मक और मौलिक solutions प्रस्तुत करना दीर्घकाल में सफलता की संभावना बढ़ाता हुआ लगता है.
1 टिप्पणियां
Hacker News की राय