هل هناك أي لغات برمجة مُدارة يتم تجميعها إلى كود الجهاز؟

StackOverflow https://stackoverflow.com/questions/1213043

  •  06-07-2019
  •  | 
  •  

سؤال

اللغات المُدارة هي التي تتولى تنظيف الذاكرة نيابةً عنك.

يحرر أنا لا أتحدث عن جمع القمامة.كنت مهتمًا فقط بمعرفة اللغات التي من شأنها free() الذاكرة بالنسبة لي تلقائيًا، ولا يزال يتم تجميعها إلى رمز الجهاز.

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

المحلول

يبدو أنك تخلط بين "مُدار" و"جمع البيانات المهملة"، فبينما تحتوي اللغات المُدارة غالبًا (على سبيل المثال C# وJava) على مجموعة تلقائية من البيانات المهملة، تشير كلمة "مُدار" في الواقع إلى حقيقة وجود "جهاز افتراضي" ينفذ التعليمات البرمجية الخاصة بك (يرى http://en.wikipedia.org/wiki/Managed_code).

على سبيل المثال، CLR (وقت تشغيل اللغة العامة) هو الجهاز الظاهري الذي ينفذ تعليمات برمجية .Net، وJVM (جهاز Java الظاهري) هو الجهاز الظاهري الذي ينفذ تعليمات برمجية Java.

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

يمكن في الواقع تجميع كل من Java وC# مباشرة في كود الجهاز، لذلك يتم تنفيذهما مباشرة وليس باستخدام جهاز افتراضي - بالنسبة إلى كود .Net يتم ذلك باستخدام NGEN (في الواقع يقوم CLR بتجميع تجميعات .Net في كود الجهاز كما تريد تنفيذه، ما يسمى تجميع "في الوقت المناسب")

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

هل يمكنني أن أسأل - هل هذا سؤال "خارج نطاق الاهتمام"، أم أنك تحاول اختيار لغة لمشروع ما - إذا كان الأخير، فلماذا أنت مهتم جدًا بتجميع لغتك إلى كود الآلة؟بالتأكيد في حالة .Net، فإن تجميع التعليمات البرمجية الخاصة بك بواسطة JIT يوفر عددًا من مزايا الأداء (في معظم الحالات)، كما أن NGENing التعليمات البرمجية الخاصة بك لا يزيل الاعتماد على إطار عمل .Net.

نصائح أخرى

الكثير:

LISP (والمتغيرات)، Erlang، C# (تحت Mono)، Haskell، Java (مع gcj)

بالتأكيد هناك.جافا، على سبيل المثال.(GCJ)

ومع ذلك، فإن المصطلح مُدار في حد ذاته يعني أنه يتعين عليك تحمل بعض وقت التشغيل.

المزيد، بالمعنى الأوسع للمعنى "المُدار" الآمن (من خلال فحص نوع وقت التشغيل أو التحليل الثابت الشامل) و/أو جمع البيانات المهملة:

  • أوكامل
  • د
  • آدا
  • مقدمة
  • ينظف
  • ايفل

تناظريًا لإجابة Efraims، سيتم ترجمة أي برنامج .NET إلى كود الجهاز أيضًا، عادةً في خطوتين (JIT) ولكن هناك أداة NGEN لتجميع MSIL مسبقًا إلى اللغة الأصلية.

هناك خيار شبه GC:GLIB.

يستخدم Gilb العد المرجعي لإدارة عمر الكائن.عندما يلتقي عدد الانكسار بالصفر، يتم تنظيف الكائن.

إنه أكثر إزعاجًا بكثير من .NET أو Java أو Python، ولكن عندما يتعين عليك استخدام لغة C، فهو أفضل من لا شيء.

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