J2ObjC পিছনে প্রেরণা

J2ObjC হতাশা থেকে শুরু হয়েছিল; হতাশা বেশ কয়েকটি ডেভেলপমেন্ট টিমকে তাদের ওয়েব এবং মোবাইল পণ্যগুলিকে কার্যকারিতার মধ্যে আলাদা না করে দ্রুত পুনরাবৃত্তি করার চেষ্টা করতে হয়েছিল। Google-এর অনেক ক্লায়েন্ট পণ্য ওয়েব অ্যাপের জন্য GWT ব্যবহার করে তৈরি করা হয়েছিল (এখন J2CL ), এবং Android মোবাইল ডিভাইসের জন্য Android API। এটি আইপড/আইপ্যাড অ্যাপ্লিকেশনগুলিকে ছেড়ে দিয়েছে, যেগুলিকে হয় জাভাস্ক্রিপ্ট ওয়েব অ্যাপস হতে হবে, অথবা উদ্দেশ্য-সি-তে হাতে লেখা থাকতে হবে। যদিও GWT এবং Android অ্যাপগুলি ব্যবসায়িক লজিক (নন-ইউআই) কোড শেয়ার করতে পারে, সেই কোডটি iOS অ্যাপের সাথে শেয়ার করার কোনো সমাধান ছিল না।

এই সমস্যা সমাধানের জন্য বেশ কয়েকটি পন্থা অনুসন্ধান করা হয়েছিল। XMLVM খুব আশাব্যঞ্জক লাগছিল, কিন্তু সেই সময়ে এর iOS অনুবাদক পৃষ্ঠাটি বলেছিল যে প্রকল্পটি স্থগিত করা হয়েছে (এটি এখন আবার সক্রিয়, এবং এই প্রকল্পের একটি ভাল বিকল্প)। অন্যান্য অনুবাদ সরঞ্জামগুলি এককালীন কোড রূপান্তর করেছিল, তাদের আউটপুট সফলভাবে তৈরি এবং চালানোর আগে অতিরিক্ত সম্পাদনা প্রয়োজন।

একটি নতুন প্রকল্প জন্ম হয়

শুরু থেকেই, অনেক প্রকৌশলী ভেবেছিলেন J2ObjC এর মত অনুবাদক সম্ভব নয়। এমন একটি টুল তৈরি করা যা আইওএস-এ সমস্ত জাভা অ্যাপ্লিকেশন কোডকে সঠিকভাবে অনুবাদ করতে পারে এবং এর শব্দার্থবিদ্যাকে পুরোপুরি সংরক্ষণ করা সত্যিই অসম্ভব! এর কারণ iOS-এর কঠোর ব্যবহারকারী ইন্টারফেস ডিজাইনের মান রয়েছে এবং এর ব্যবহারকারীরা খুব সচেতন থাকে যখন একটি অ্যাপ তাদের মেনে চলে না। আমাদের মতে, একটি বিশ্বমানের, দ্রুত iOS UI পাওয়ার একমাত্র উপায় হল Apple এর iOS SDK ফ্রেমওয়ার্ক ব্যবহার করে অবজেক্টিভ-সি-তে লেখা।

বেশিরভাগ প্রকৌশলী যেমন ডিফারেনশিয়াল ক্যালকুলাসের সীমা থেকে শিখেছেন, তবে, অসম্ভবের কাছাকাছি যাওয়া খুব কার্যকর হতে পারে। তাই আমরা সীমার একটি সেট নিয়ে যাত্রা করেছি যা J2ObjC সফল হওয়ার সম্ভাবনাকে উন্নত করবে:

  • শুধুমাত্র ক্লায়েন্ট-সাইড উন্নয়ন সমর্থন. তত্ত্বে কমান্ড-লাইন টুলস এবং সার্ভার কোড অনুবাদ করা যেতে পারে, কিন্তু সেই ব্যবহারের ক্ষেত্রে J2ObjC দ্বারা সমাধান না করা সমস্যা হওয়ার সম্ভাবনা রয়েছে।
  • শুধুমাত্র ব্যবসায়িক লজিক কোডকে সমর্থন করুন এবং ইউজার ইন্টারফেস এপিআই থেকে অনেক দূরে থাকুন (যেমন পুরানো মানচিত্রের বাইরের কোণায় "এখানে দানব আছে")।
  • iOS ফাউন্ডেশন ফ্রেমওয়ার্ক প্রয়োজন, আরও সাধারণ ভিত্তি নয়।
  • মেমরি পরিচালনার জন্য অ্যাপলের সর্বোত্তম অনুশীলনগুলি বাস্তবায়নের পরে গ্রহণযোগ্য কর্মক্ষমতা এবং মেমরি ব্যবহার যাচাই করতে Xcode-এর যন্ত্রগুলি ব্যবহার করুন৷
  • সম্পূর্ণতার জন্য যা প্রয়োজন তার চেয়ে শুধুমাত্র অ্যাপ্লিকেশন ডেভেলপারদের যা প্রয়োজন তার উপর ফোকাস করুন। বাস্তব অ্যাপ্লিকেশনের প্রয়োজনগুলি প্রকল্পের প্রয়োজনীয়তাগুলি চালায়।

আমরা এটিকে দরকারী বলে মনে করি, সম্ভবত আপনিও করবেন

আমরা J2ObjC ওপেন সোর্স করেছি কারণ কিছু অভ্যন্তরীণ প্রকল্প খুঁজে পেয়েছিল যে এটি তাদের iOS অ্যাপের সাথে জাভা ব্যবসার যুক্তি ভাগ করার সমস্যার সমাধান করে। বেশ কয়েকটি দল এখন অনুবাদকের উপর নির্ভর করে, এবং আমরা ব্যস্তভাবে নতুন কার্যকারিতা যোগ করছি এবং প্রচুর বাগ সংশোধন করছি। আমরা অন্য মোবাইল অ্যাপ টিমকে এটি চেষ্টা করার জন্য স্বাগত জানাই, এবং আমাদের জানান যে কী কাজ করে এবং কী উন্নতি করতে হবে।

আমরা প্রজেক্টে কাজকে ফলপ্রসূও খুঁজে পাই। যেকোন জাভা অনুবাদকের জন্য দুটি কঠিন কাজ হল 1) সঠিকভাবে পার্সিং, টাইপ চেকিং এবং জাভা সোর্স সমাধান করা এবং 2) একটি কমপ্লায়েন্ট জাভা রানটাইম পরিবেশ প্রদান করা। প্রথম কাজটি javac কম্পাইলার দ্বারা ভালভাবে পরিচালিত হয় এবং রানটাইম পরিবেশ (এর ইউনিট পরীক্ষা সহ) Android libcore লাইব্রেরির উপর ভিত্তি করে। এটি আমাদের জন্য মজার জিনিস ছেড়ে দেয়: বিমূর্ত সিনট্যাক্স ট্রি পরিবর্তন করা এবং উত্স আউটপুট ডিবাগ করা সাধারণত সহজে তৈরি করা। আপনার যদি জাভা টুলস বা কম্পাইলারগুলিতে আগ্রহ থাকে তবে আমাদের সাথে যোগ দিন! এখনও অনেক কিছু করার আছে, এবং আমরা সাহায্য পছন্দ করব।