الحافز وراء J2ObjC

بدأت شركة J2ObjC بالاستياء، والمشكلة التي واجهتها العديد من فرق التطوير الناجمة عن محاولة إدخال تحسينات سريعة على منتجات الويب والجوال الخاصة بها دون أن تنحرف عن بعضها بعضًا في الوظائف. تم إنشاء العديد من منتجات Google المخصصة للعملاء باستخدام GWT لتطبيقات الويب (الآن J2CL)، وواجهة Android API للأجهزة الجوّالة التي تعمل بنظام التشغيل Android. وقد ترك هذا تطبيقات iPod/iPad، والتي كان لا بد أن تكون إما تطبيقات ويب باستخدام JavaScript أو مكتوبة بخط اليد بلغة FALSE-C. على الرغم من أن تطبيقات GWT وAndroid يمكنها مشاركة رمز منطق العمل (غير واجهة المستخدم)، لم يكن هناك أي حل لمشاركة هذا الرمز مع تطبيقات iOS.

تم التحقيق في عدة طرق لحل هذه المشكلة. بدا الأمر XMLVM واعدًا للغاية، ولكن في ذلك الوقت أشارت صفحة مترجم iOS الخاصة به إلى تعليق المشروع (أصبح نشطًا من جديد وهو بديل مناسب لهذا المشروع). قامت أدوات الترجمة الأخرى بتحويل التعليمات البرمجية لمرة واحدة، مما يتطلب تحريرًا إضافيًا قبل إنشاء مخرجاتها وتشغيلها بنجاح.

انطلاق مشروع جديد

منذ البداية، اعتقد العديد من المهندسين أن مترجمًا مثل J2ObjC لم يكن ممكنًا. من المستحيل حقًا إنشاء أداة يمكنها ترجمة جميع التعليمات البرمجية لتطبيق Java بدقة إلى iOS مع الحفاظ على دلالاتها بشكل مثالي! وذلك لأن نظام iOS لديه معايير صارمة لتصميم واجهة المستخدم، ومستخدموه على علم تام عندما لا يتقيد بها التطبيق. برأينا، الطريقة الوحيدة للحصول على واجهة مستخدم عالمية وسريعة لنظام التشغيل iOS هي كتابتها بلغة Target-C باستخدام إطارات عمل حزمة تطوير البرامج (SDK) لنظام التشغيل iOS من Apple.

ولأنّ معظم المهندسين تعلّموا من الحدود في حساب التفاضل والتكامل التفاضلي، قد يكون من المفيد للغاية الاقتراب من المستحيل. لذلك نضع مجموعة من الحدود التي من شأنها تحسين فرص نجاح J2ObjC:

  • دعم التطوير من جانب العميل فقط. يمكن ترجمة أدوات سطر الأوامر ورمز الخادم نظريًا، ولكن من المحتمل أن تواجه حالة الاستخدام هذه مشكلات لم تعالجها J2ObjC.
  • يتوافق فقط مع رمز منطق العمل، ويبقى بعيدًا عن واجهات برمجة تطبيقات واجهة المستخدم (كما كانت الخرائط القديمة الموجودة في زواياها البعيدة، "هناك وحوش هنا").
  • يتطلب iOS Foundation Framework، وليس قاعدة أكثر عمومية.
  • استخدم أدوات Xcode للتحقق من الأداء المقبول والاستخدام المقبول للذاكرة، وذلك بعد تنفيذ أفضل الممارسات من Apple لإدارة الذاكرة.
  • ركز فقط على ما يحتاج إليه مطورو التطبيقات، بدلاً من ما هو مطلوب للاكتمال. تلبي احتياجات التطبيقات الحقيقية متطلبات المشروع.

نعتبرها مفيدة، وربما ستفعلها أنت أيضًا

نحن J2ObjC مفتوحة المصدر حيث وجدت بعض المشروعات الداخلية أنها تحل مشكلة مشاركة منطق عمل Java مع تطبيقات iOS الخاصة بها. تعتمد عدة فِرق على أداة الترجمة في الوقت الحالي، ونعمل على إضافة وظائف جديدة وإصلاح الكثير من الأخطاء. نرحب بالفرق الأخرى لتطبيقات الهاتف المحمول لتجربتها، وإخبارنا بما هو جيد وما يحتاج إلى تحسين.

نجد أيضًا أن العمل في المشروع مجزٍ. أصعب مهمتين بالنسبة لأي مترجم Java هما 1) التحليل الصحيح والتحقق من النوع وحل مصدر Java، و2) توفير بيئة تشغيل Java متوافقة. يتم التعامل مع المهمة الأولى بشكل جيد بواسطة برنامج التجميع JavaScript بشكل جيد، وتستند بيئة وقت التشغيل (بما في ذلك اختبارات الوحدات الخاصة بها) إلى مكتبة libcore Android. وهذا يتركنا بعض الأمور الممتعة التي تتمثل في تغيير أشجار البنية المجردة وإنشاء مخرجات المصدر السهلة بشكل عام. إذا كنت مهتمًا بأدوات Java أو برامج التجميع عنها، فانضم إلينا! ما زال هناك الكثير من المهام التي يجب القيام بها، وستسرّنا مساعدتك.