J2ObjC के पीछे की प्रेरणा

J2ObjC हताश होकर शुरू हुई. कई डेवलपमेंट टीमों को निराशा हुई और उन्हें अपने वेब और मोबाइल प्रॉडक्ट को जल्द से जल्द बदलने की कोशिश करनी पड़ी. Google के कई क्लाइंट प्रॉडक्ट को, वेब ऐप्लिकेशन के लिए GWT (अब J2CL) और Android मोबाइल डिवाइसों के लिए Android API का इस्तेमाल करके बनाया गया है. उसने iPod/iPad ऐप्लिकेशन छोड़ दिया, जिन्हें या तो JavaScript वेब ऐप्लिकेशन होना चाहिए या फिर ऑब्जेक्टिव-सी में हाथ से लिखा जाना चाहिए. हालांकि, GWT और Android ऐप्लिकेशन कारोबारी लॉजिक (नॉन-यूज़र इंटरफ़ेस) कोड को शेयर कर सकते हैं, लेकिन iOS ऐप्लिकेशन के साथ इस कोड को शेयर करने के लिए कोई समाधान नहीं था.

इस समस्या को हल करने के कई तरीकों की जांच की गई. एक्सएमएलवीएम अच्छा लग रहा था, लेकिन उस समय इसके iOS अनुवादक पेज में बताया गया था कि प्रोजेक्ट को निलंबित कर दिया गया था. यह अब फिर से चालू हो गया है और यह इस प्रोजेक्ट का एक अच्छा विकल्प है. अनुवाद के अन्य टूल ने एक बार में कोड बदलने का काम किया. आउटपुट के बनने और चलने से पहले, उसमें और बदलाव करना पड़ता था.

एक नया प्रोजेक्ट शुरू हो गया है

शुरुआत से ही, कई इंजीनियरों को लगा कि J2ObjC जैसा अनुवादक नहीं है. एक ऐसा टूल बनाना वाकई नामुमकिन है जो सभी Java ऐप्लिकेशन कोड का iOS में सटीक अनुवाद कर सके, जबकि उसके सिमेंटिक्स को अच्छी तरह से बनाए रख सकें! ऐसा इसलिए, क्योंकि iOS के यूज़र इंटरफ़ेस डिज़ाइन के लिए सख्त स्टैंडर्ड हैं. साथ ही, जब कोई ऐप्लिकेशन इनका पालन नहीं करता है, तो इसके उपयोगकर्ताओं को इसकी जानकारी रहती है. हमारे हिसाब से, विश्व स्तर का, तेज़ iOS यूज़र इंटरफ़ेस (यूआई) पाने का एकमात्र तरीका यह है कि उसे Apple के iOS SDK फ़्रेमवर्क का इस्तेमाल करके ऑब्जेक्टिव-सी में लिखा जाए.

ज़्यादातर इंजीनियर डिफ़रेंशियल कैलक्युलस की सीमाओं से सीखते हैं. हालांकि, नामुमकिन तरीके से काम करना बहुत फ़ायदेमंद होता है. इसलिए, हमने कुछ सीमाएं तय की हैं, जिनसे J2ObjC के सफल होने की संभावना बढ़ जाएगी:

  • यह सिर्फ़ क्लाइंट-साइड डेवलपमेंट पर काम करती है. सिद्धांत में कमांड-लाइन टूल और सर्वर कोड का अनुवाद किया जा सकता है, लेकिन इस्तेमाल के इस उदाहरण में J2ObjC से मिलने वाली समस्याएं कम हो सकती हैं.
  • सिर्फ़ बिज़नेस लॉजिक कोड का इस्तेमाल किया जा सकता है और यूज़र इंटरफ़ेस एपीआई से काफ़ी दूर रहें. जैसा कि पुराने मैप में बाहरी कोनों के साथ "यहां मॉन्स्टर मौजूद हैं".
  • इसके लिए, iOS फ़ाउंडेशन फ़्रेमवर्क होना ज़रूरी है, न कि सामान्य आधार.
  • Apple के मेमोरी मैनेजमेंट के सबसे सही तरीके लागू करने के बाद, सही परफ़ॉर्मेंस और मेमोरी के इस्तेमाल की पुष्टि करने के लिए Xcode'sInstrument का इस्तेमाल करें.
  • पूर्णता के लिए आवश्यक चीज़ों के बजाय, केवल इस बात पर ध्यान दें कि ऐप्लिकेशन डेवलपर को किन चीज़ों की ज़रूरत है. असल ऐप्लिकेशन की ज़रूरतें, प्रोजेक्ट की ज़रूरतों को पूरा करती हैं.

हमारे लिए यह उपयोगी है, शायद आपको भी

हमने J2ObjC को ओपन सोर्स का बनाया, क्योंकि कुछ इंटरनल प्रोजेक्ट को पता चला था कि यह Java के कारोबारी लॉजिक को अपने iOS ऐप्लिकेशन के साथ शेयर करने की समस्या को हल करता है. अब कई टीमें अनुवादक पर निर्भर हैं और हम तेज़ी से नई सुविधाएं जोड़ रहे हैं और कई गड़बड़ियों को ठीक कर रहे हैं. इसे आज़माने के लिए, हम दूसरी मोबाइल ऐप्लिकेशन टीमों का भी स्वागत करते हैं.

साथ ही, हमने यह भी पाया कि इस प्रोजेक्ट पर काम करना फ़ायदेमंद भी है. किसी भी Java ट्रांसलेटर के लिए, ये दो सबसे मुश्किल काम हैं: 1) सही तरीके से पार्स करना, Java सोर्स की जांच करना और उसका समाधान करना, और 2) ज़रूरी Java रनटाइम एनवायरमेंट उपलब्ध कराना. पहला टास्क javac कंपाइलर से अच्छी तरह से मैनेज किया जाता है. रनटाइम एनवायरमेंट (इसमें इसके यूनिट टेस्ट भी शामिल हैं) Android libcore लाइब्रेरी पर आधारित होता है. इससे हमारे लिए मज़ेदार काम करना आसान हो जाता है: ऐब्स्ट्रैक्ट सिंटैक्स ट्री में बदलाव करना और सोर्स आउटपुट को डीबग करना आम तौर पर आसान होता है. अगर आपकी Java टूल या कंपाइलर में रुचि है, तो हमसे जुड़ें! हम अभी बहुत कुछ करना चाहते हैं. आपकी मदद करके हमें खुशी होगी.