الإعلانات

هل تناقش حاليًا ما إذا كنت تريد استخدام جافا لتطبيقك التالي ، أو استخدام مجموعات أدوات وإطارات عمل أصلية؟ هل ترغب في معرفة المزايا التي توفرها جافا على البرمجة الأصلية للتطبيق؟ تابع القراءة لمعرفة ذلك!

ما هو التطبيق الأصلي؟

التطبيق الأصلي هو برنامج مكتوب خصيصًا لنظام التشغيل (OS) ، وربما للأجهزة المحددة التي تعمل بنظام التشغيل هذا. هو مكتوب في الغالب بلغة مثل C / C ++. يتم تصنيف التعليمات البرمجية المصدر C / C ++ إلى نموذج كائن باستخدام برنامج التحويل البرمجي ، والذي يتم تجميعه في ملف قابل للتنفيذ عن طريق ربط المكتبات المطلوبة. سيتم تشغيل برنامج تم بناؤه بهذه الطريقة على الأجهزة المحددة ونظام التشغيل المصمم من أجله ، ولكن قد لا يعمل بشكل صحيح على أنظمة أخرى.

تحضير ملف تنفيذي أصلي

لماذا لا تكون التطبيقات الأصلية محمولة؟

يترجم مترجم للغة مثل C / C ++ عبارات شفرة المصدر إلى لغة الآلة لوحدة المعالجة المركزية المستهدفة. عند محاولة تشغيل هذا الرمز على وحدة معالجة مركزية مختلفة ، قد لا يعمل البرنامج بشكل صحيح (أو يعمل على الإطلاق) حيث قد لا تدعم وحدة المعالجة المركزية هذه تعليمات لغة الآلة في التعليمات البرمجية المترجمة.

instagram viewer

بالإضافة إلى ذلك ، قد يختلف نظام التشغيل الجديد عن النظام الأصلي وقد لا يتعرف حتى على ملف البرنامج كملف قابل للتنفيذ. ويرجع ذلك إلى تنسيقات الملفات المختلفة المستخدمة للملفات التنفيذية عبر أنظمة التشغيل المختلفة (مثل Windows و Linux و MacOS وما إلى ذلك).

تعتبر قابلية النقل مشكلة كبيرة مع التطبيقات الأصلية التي قد تؤدي فقط إلى ترقية المترجم إلى الإصدار التالي قد تؤدي إلى حدوث تغييرات عاجلة. قد تحتاج إلى إصلاح الكود الخاص بك للعمل مع المترجم الأحدث. على هذا النحو ، رش شفرة المصدر بما يعرف باسم ifdef عبارات لعزل الحلول الخاصة بالأجهزة أو نظام التشغيل أو المترجم شائعة.

فيما يلي مقتطف رمز صغير من مكتبة ضغط BZLib الذي يوضح استخدام ifdefs لعزل خصائص المنصة:

#ifdef _WIN32. # تضمن # ifdef small / * windows.h تعريف من الصغير إلى char * / # undef صغير. # إنهاء إذا. # ifdef BZ_EXPORT. # تعريف BZ_API (func) WINAPI func. # تحديد BZ_EXTERN خارجي. # else / * استيراد windows dll بشكل ديناميكي * / # تعريف BZ_API (func) (WINAPI * func) # تعريف BZ_EXTERN. # إنهاء إذا. #آخر. # تعريف BZ_API (func) func. # تحديد BZ_EXTERN خارجي. #إنهاء إذا.

نقل التعليمات البرمجية المصدر عبر أنظمة التشغيل

يمكن تخفيف هذا الموقف إلى حد ما من خلال إعادة تجميع كود مصدر C / C ++ إلى وحدة المعالجة المركزية الجديدة. ومع ذلك ، قد يختلف نظام التشغيل لوحدة المعالجة المركزية الجديدة. وقد لا يتم ترجمة الكود المصدري دون تغييرات سواء أكانت كبيرة أم ثانوية. حتى التغييرات الطفيفة في إصدارات نظام التشغيل قد تتطلب بعض التغييرات في شفرة المصدر.

وعندما تفكر في أنظمة تشغيل مختلفة مثل Windows و Linux / UNIX ، فإن إمكانية النقل هي لعبة كرة جديدة بالكامل. ما لم تكن تستخدم مجموعة أدوات أو إطار عمل يعزلك تمامًا عن نظام التشغيل ، فإن إمكانية نقل التعليمات البرمجية المصدر أمر مستحيل. وذلك لأن واجهة نظام التشغيل مختلفة تمامًا بين هذه الأنظمة. إذا كنت تستخدم في أي ركن من أركان التعليمات البرمجية الخاصة بك أي بدائية لنظام التشغيل مباشرة ، فلن تكون شفرتك محمولة عبر أنظمة التشغيل المتنوعة هذه.

كيف تختلف جافا؟

في هذا السيناريو ، تقدم جافا نموذجًا جديدًا ، وطريقة جديدة لبناء البرامج. عند البرمجة في جافا ، فإنك تستهدف أ آلة افتراضية. يوجد مثل هذا الجهاز كمفهوم ، وتوفر لغة جافا واجهات للبرمجة ضد هذا الجهاز. على سبيل المثال ، يمكنك الاستعلام عن كمية الذاكرة المتاحة ، وعدد وحدات المعالجة المركزية ، وواجهات الشبكة ، وما إلى ذلك من الجهاز الظاهري.

كود تنفيذ الآلة الافتراضية

كيف يتم بناء تطبيقات Java؟

توفر لغة جافا مترجم جافا الذي يترجم شفرة المصدر إلى رمز الكائن. ثم يتم تنفيذ رمز الكائن بواسطة آلة جافا الافتراضية، وهو برنامج منفصل عن المترجم. نظام التشغيل ، بدوره ، ينظر إلى آلة جافا الافتراضية على أنها مجرد برنامج آخر يعمل على نظام التشغيل هذا.

لقد تحول عبء قابلية النقل الآن من مبرمج التطبيق إلى بائع آلة جافا الافتراضية. مبرمج التطبيق يكتب البرنامج باستخدام بدائية للغة جافا ، ولغة جافا الآلة الافتراضية مسؤولة عن ترجمة هذه الأوليات إلى نظام التشغيل المضيف مرافق. عندما يظهر إصدار جديد من نظام التشغيل ، يتحمل البائع مسؤولية تحديث جهاز جافا الافتراضي بحيث يعمل بشكل صحيح على نظام التشغيل الجديد.

بناء برامج جافا

ما هي مزايا Java Virtual Machine؟

كما ذكرنا من قبل ، توفر آلة جافا الافتراضية عرضًا افتراضيًا لنظام التشغيل والأجهزة لمبرمج التطبيق. هذا العرض الظاهري في شكل واجهات وأساليب مختلفة ، ويعمل على عزل مبرمج التطبيق من الاختلافات في نظام التشغيل المضيف والأجهزة الأساسية. وبالتالي ، يمكن لمبرمج التطبيق الوصول إلى مرافق مثل مجموعة أدوات Windowing ، والشبكات ، والرسومات ثلاثية الأبعاد ، ووحدات المعالجة المركزية المتعددة ، وما إلى ذلك. دون الحاجة إلى اللجوء إلى مكالمات منخفضة المستوى ينتهي بها الأمر بجعل البرنامج غير قابل للنقل.

يتم كتابة برنامج جافا وتجميعه باستخدام مترجم جافا. رمز الكائن الناتج (يسمى كود البايت) يمكن نقلها إلى نظام تشغيل مضيف مختلف يعمل على أجهزة مختلفة ويجب تشغيلها دون مشاكل.

مترجم JIT

يستخدم الجهاز الظاهري جافا مترجم JIT لتحسين كود البايت خصيصا لوحدة المعالجة المركزية المستهدفة. JIT لتقف على في الوقت المناسب ويشير إلى تحسينات وقت التشغيل التي يطبقها JVM على كود البايت لجعله يعمل بشكل أفضل على وحدة المعالجة المركزية الحالية.

ميزة أخرى لاستخدام Java Virtual Machine هي أنه يمكن تطبيق تحسينات مختلفة لحالات الاستخدام المختلفة ، وكلها بنفس كود البايت. على سبيل المثال ، يوفر Oracle JVM خيارين لتشغيل كود البايت: وضع الخادم ووضع العميل. يعمل وضع الخادم على تحسين برامج الخادم التي تعمل لفترة طويلة ، بينما يعمل وضع JVM الخاص بالعميل على تحسين أوقات الاستجابة السريعة نظرًا لأنه من المحتمل استخدامه في الوضع التفاعلي.

للتلخيص ، تم إنشاء تطبيق أصلي لجهاز معين ونظام تشغيل معين. تطبيق جافا ، من ناحية أخرى ، يتبع أ بناء مرة تشغيل في أي مكان فلسفة ، من خلال وجود JVM تشغيل تعليمات كود البايت المترجمة. على الرغم من أن التطبيقات الأصلية يُنظر إليها تقليديًا على أنها أكثر أداءً من تطبيقات جافا ، إلا أنها قد لا تكون دائمًا صحيحة بسبب استخدام مترجم JIT بواسطة JVM.

هل طورت تطبيقًا أصليًا واضطررت إلى الانتقال إلى جافا بسبب قابلية النقل؟ أو العكس بسبب مشاكل في الأداء؟ أخبرنا في التعليقات أدناه.

حقوق الصورة: Profit_Image عبر Shutterstock.com