ما الفرق بين المدارة/بايت التعليمات البرمجية غير المدارة/الأم رمز ؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

في بعض الأحيان من الصعب وصف بعض الأشياء التي "نحن المبرمجين" قد يظن بسيطة غير المبرمجين وإدارة الأنواع.

لذا...

كيف تصف الفرق بين التعليمات البرمجية المدارة (أو جافا بايت كود) وغير المدارة/التعليمات البرمجية الأصلية غير مبرمج ؟

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

المحلول

وإدارتها كود == "القصر البيت مع جميع الموظفين أو الخدم، خدم، الطباخون وحدائق للحفاظ على مكان لطيف"

والتعليمات البرمجية غير المدارة == "أين كنت تعيش في جامعة"

نصائح أخرى

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

وهذه المساحة تعادل موارد الكمبيوتر مثل ذاكرة الوصول العشوائي، القرص الصلب، الخ.

والتعليمات البرمجية المدارة يسمح النظام تلقائيا اختيار متى وماذا تنظيف. التعليمات البرمجية غير المدارة يجعل من عملية "يدوية" - في هذا مبرمج يحتاج لنقول للنظام ما وعندما لتنظيف

أنا استغرب ما يخرج من هذا النقاش (حسنا, ليس حقا ولكن خطابيا).اسمحوا لي أن أضيف شيئا ، حتى إذا أنا في وقت متأخر.

الأجهزة الظاهرية (VMs) وجمع القمامة (GC) هي العقود القديمة و مفهومين منفصلين.القمامة التي تم جمعها الأصلي رمز جمعت اللغات موجودة حتى هذه من عقود (الكنسي على سبيل المثال: ANSI Common Lisp;حسنا, هناك ما لا يقل عن وقت التحويل البرمجي القمامة التي تم جمعها التعريفي اللغة الزئبق - ولكن على ما يبدو الجماهير تصرخ في فاتحة مثل اللغات).

فجأة التعليم لمواطنة عالمية بايت رمز القائمة VMs هي الدواء الشافي من كل الأمراض. وضع الحماية الموجودة الثنائيات (أمثلة أخرى هنا, هنا و هنا)? مبدأ الأقل السلطة (بولا)/القدرات القائمة على الأمن? سليم الثنائيات (أو الحديثة البديل SafeTSA)? المنطقة الاستدلال?لا يا سيدي:مايكروسوفت & الشمس لا تأذن لنا حتى مجرد التفكير في مثل هذه الانحرافات.لا أفضل كتابة لدينا كامل مجموعة البرامج الرائعة لهذا(???) جديدة(???) لغة§/API.باعتبارها واحدة من مضيفينا يقول انها النار و الحركة في جميع أنحاء مرة أخرى.

§ لا تكن سخيفا:وأنا أعلم أن C# ليست فقط لغة الهدف .Net/أحادية ، الغلو.

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

وجهة نظري هو أن الناس غير التقنية لا تحتاج إلى أن تكون ازعجت مع الشكليات في هذا المستوى من التفصيل.

على الجانب الآخر, إذا أعجب من مايكروسوفت/الشمس التسويق فمن الضروري أن يشرح لهم أنه يجري ينخدع - التعليم لمواطنة عالمية بايت رمز القائمة VMs لا هذه بدعة كما يزعمون أنهم لا حل سحريا كل ذلك المشكلة وبدائل التنفيذ هذه التقنيات موجودة (بعض أفضل).

تحرير 2: جمع القمامة هو إدارة الذاكرة تقنية ، كما في كل تنفيذ تقنية تحتاج إلى أن تفهم على استخدامها بشكل صحيح.انظر كيف في هيئة تقنية المعلومات والبرمجيات ، أنها تجاوز GC للحصول على الأداء الجيد:

4 - لأن لدينا حوالي 2 جيجا من البيانات الثابتة علينا الوصول السريع ، نحن نستخدم C++ رمز الذاكرة-خريطة ضخمة الملفات التي تحتوي على pointerless ج البنيات (الرحلات ، فارس ، الخ) ، ثم الوصول إلى هذه من Common Lisp باستخدام الخارجية بالوصول إلى البيانات.البنية الميدانية access برمجيا إلى اثنين أو ثلاثة تعليمات ، لذلك ليس هناك حقا أي الأداء.عقوبة الوصول إلى ج بدلا من يسب الكائنات.عن طريق القيام هذا ، علينا أن نحافظ على اللثغة القمامة جامع من رؤية البيانات (إلى يسب كل مؤشر إلى ج الكائن مجرد fixnum, على الرغم من أننا في كثير من الأحيان مؤقتا التفاف هذه المؤشرات في اللثغة الأشياء لتحسين debuggability).لدينا اللثغة الصور ولذلك فقط حوالي 250 الجنايات "العمل" هياكل البيانات المدونة.

...

9 - يمكننا أن نفعل 10 ثوان من يسب حساب على 800mhz مربع وسلبيات أقل من 5 ك من البيانات.وهذا لأن نحن قبل تخصيص جميع هياكل البيانات لدينا تحتاج ويموت على الاستفسارات التي تتجاوز لهم.وهذا قد يجعل العديد من يسب المبرمجين ارتد ، ولكن مع 250 ميج صورة في الوقت الحقيقي القيود ، نحن لا تستطيع أن تولد القمامة.بالنسبة على سبيل المثال, بدلا من استخدام سلبيات ، ونحن استخدام "سلبيات!", التي تجذب الخلايا من مجموعة من 10,000,000 الخلايا لقد preallocated و الذي يحصل على إعادة تعيين كل استعلام.

تحرير 3: (لتجنب سوء الفهم) هو GC أفضل من تافه مباشرة مع المؤشرات ؟ معظم الوقت, بالتأكيد, ولكن هناك بدائل سواء.هل هناك حاجة إلى عناء المستخدمين مع هذه التفاصيل ؟ أنا لا أرى أي دليل على أن هذا هو الحال ، إلى جانب تبديد بعض الضجيج التسويق عند الضرورة.

أنا متأكد الأساسية التفسير:

  • تمكنت = الموارد تنظيف يديرها وقت التشغيل (أيجمع القمامة)
  • غير المدارة = طهر نفسك (أي malloc & free)

وربما مقارنتها مع الاستثمار في سوق الأسهم.

ويمكنك شراء وبيع الأسهم نفسك، في محاولة لتصبح خبيرا في ما سيعطي أفضل المخاطر / مكافأة - أو يمكنك الاستثمار في الصندوق الذي يديره "الخبير" الذي سوف نفعل ذلك لك - في تكلفة كنت تفقد بعض السيطرة، وربما بعض عمولة. (ومن المسلم به أنا أكثر من مروحة الأموال تعقب، وسوق الأوراق المالية "الخبراء" لم تكن قد فعلت بالضبط الرائعة في الآونة الأخيرة، ولكن ....)

هنا جوابي:

تمكنت (.NET) أو البايت كود (جافا) سيوفر لك الوقت والمال.

الآن دعونا نقارن اثنين:

غير المدارة أو التعليمات البرمجية الأصلية

تحتاج إلى القيام الموارد الخاصة بك (RAM / الذاكرة) تخصيص تنظيف.إذا كنت قد نسيت شيئا ، كنت في نهاية المطاف مع ما يسمى "تسرب الذاكرة" التي يمكن أن تحطم جهاز الكمبيوتر.تسرب الذاكرة هو مصطلح عند بدء تشغيل تطبيق باستخدام (تلتهم) Ram/الذاكرة ولكن ليس تركه حتى يمكن للكمبيوتر ان التطبيقات الأخرى ؛ في نهاية المطاف يؤدي هذا إلى تعطل الكمبيوتر.

من أجل تشغيل التطبيق الخاص بك على مختلف أنظمة التشغيل (Mac OSX ، Windows, الخ.) تحتاج إلى تجميع التعليمات البرمجية الخاصة بك على وجه التحديد لكل نظام تشغيل ، وربما تغيير الكثير من التعليمات البرمجية التي هو نظام التشغيل المحددة لذلك يعمل على كل نظام التشغيل.

.صافي التعليمات البرمجية المدارة أو جافا بايت كود

جميع الموارد (RAM / الذاكرة) تخصيص تنظيف القيام به بالنسبة لك و خطر خلق "تسرب الذاكرة" إلى الحد الأدنى.وهذا يسمح لمزيد من الوقت إلى رمز الميزات بدلا من الإنفاق على إدارة الموارد.

من أجل تشغيل التطبيق على مختلف أنظمة التشغيل (Mac OSX ، Windows, الخ.) كنت مجرد تجميع مرة واحدة, و سوف تعمل على كل طالما أنها تدعم الإطار أنت التطبيق يعمل على أعلى من (.NET Framework / مونو أو جافا).

باختصار

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

أيضا, قبل أي شخص يشير إلى أن .NET Framework لا يدعم أنظمة تشغيل متعددة, أريد أن أشير إلى أنه من الناحية الفنية ويندوز 98, ويندوز إكس بي 32 بت, ويندوز إكس بي 64 بت, WinVista 32 بت, WinVista 64-bit Windows Server جميع أنظمة التشغيل المختلفة, ولكن نفس .صافي سيتم تشغيل التطبيق على كل.و هناك أيضا أحادية المشروع أن يجلب .صافي لينكس و ماك.

والتعليمات البرمجية غير المدارة هي قائمة تعليمات للكمبيوتر لمتابعة. التعليمات البرمجية المدارة هي قائمة من المهام للكمبيوتر تابع أن الكمبيوتر هو حر في تفسير من تلقاء نفسها حول كيفية تحقيقها.

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

وهناك اختلافات أخرى، ولكن إدارة الذاكرة وربما كان أكبر.

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

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

وأو استخدام كرة القدم مع الجدران بدلا من هامش وendlines، أو البيسبول دون مساندة، أو الهوكي دون شبكة خلف المرمى، أو NASCAR دون حواجز، أو كرة القدم من دون خوذ ...)

scroll top