سؤال

يحول Dotnet CLR رمز اللغة إلى MSIL. بينما يتم تحويل رمز Java إلى رمز أصلي مستقل منصة. هل يمكننا تحويل هذا MSIL إلى الكود الأصلي؟ لذلك ستصبح dotnet تلقائيًا مستقلة من النظام الأساسي.

هل كانت مفيدة؟

المحلول

كن حذرًا بشأن المصطلحات الخاصة بك هنا:

  • لا يقوم CLR بتحويل "رمز اللغة" إلى MSIL - إنه يحول MSIL إلى الكود الأصلي أثناء الطيران.
  • لم يتم تحويل كود Java إلى "رمز أصلي مستقل منصة" ؛ هذا هو الأكسيمورون. يتم تحويل رمز مصدر Java إلى منصة Java Bytecode المستقلة. يحول JVM Bytecode إلى رمز أصلي بنفس الطريقة التي يقوم بها CLR مع MSIL (جيدًا ، إلى حد ما)

لاحظ أن كل من Msil و Bytecode تستطيع تم تفسيرها؛ سوف تفسر النقطة الساخنة في بعض الأحيان ، وأحيانًا ترجمة JIT ، وغالبًا ما يتم ترجمة JIT عدة مرات. يقوم .NET Desktop CLR دائمًا بتجميع وقت واحد في الوقت الحالي.

تجدر الإشارة أيضًا إلى أن Bytecode هو فقط منصة مستقلة فقط إلى الحد الذي يتوفر فيه JVM للمنصة التي تهتم بها. وينطبق الشيء نفسه على MSIL. يمكنك تجميع برنامج C# على Windows ثم تشغيله على Linux تحت Mono لو هناك مجموعة من أحادي المنصات الخاصة بك و لو لا تستخدم أي مكتبات غير متوفرة على Mono.

الآن أما بالنسبة لتحويل MSIL إلى Java Bytecode ... العكس أكثر جدوى ، لأن MSIL عموما أقوى من Java Bytecode. على سبيل المثال ، لن تترجم أنواع القيمة المخصصة والأيليات في MSIL بسهولة إلى رمز bytecode. ربما تحتاج إلى شيء أقرب إلى CLR مكتوبة في جافا. أجرؤ على القول أن هناك بعض الاحتمالات الذكية ، ولكن هناك صعوبات أساسية هناك. من غير المرجح أن يكون العكس سهلاً - خاصةً إذا قدمت Java 7 الاحتجاج الديناميكي إلى رمز Bytecode (في حين أن الكتابة الديناميكية في .NET يتم تنفيذها بواسطة DLR كمكتبة).

نصائح أخرى

قد يكون هذا الرد بعض الشيء ، ولكنه يستحق الذكر. قد يكون رمز MSIL إلى Java Byte صعبًا كما هو مفصل من قبل الآخرين الذين يجيبون على السؤال. ولكن يمكنك التعامل مع التحويل من إطار عمل إلى آخر على مستوى رمز المصدر.

إذا كان لديك مكتبة Java التي ترغب في استخدامها في تطبيق .NET - استخدم IKVM. يقوم بتجميع كود Java في مجموعات .NET باستخدام IKVMC ، وهو رمز Java bytecode إلى .NET IL Translator. تحقق من شروط الترخيص قبل القفز إلى استخدام هذا!

كما أنني أشعر بالفضول لمعرفة ما إذا كان العكس ممكنًا ، أي رمز مصدر .NET إلى Java؟

يمكنني الإجابة على سؤالك جزئيًا فقط.

نعم ، يمكن تحويل MSIL إلى رمز أصلي باستخدام ngen.exe. ومع ذلك ، في هذه الحالة ، تفقد القدرة على الجري بكفاءة على بنيات مستهدفة مختلفة ، على سبيل المثال 32 بت مقابل 64 بت. أيضًا ، ستحتاج إلى إنشاء إصدارات متعددة ، واحدة لكل منصة مستهدفة.

بصرف النظر عن ذلك أقترح استخدام إجابة كورت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top