سؤال

لقد قرأت عددًا لا يحصى من المدونات والمشاركات وأسئلة StackOverflow حول الميزات الجديدة لـ C# 4.0. حتى ميزات WPF 4.0 الجديدة بدأت في الظهور في العراء. ما لم أتمكن من العثور عليه وأود أن أعرفه:

  1. ما هي التغييرات الرئيسية في CLR 4.0 من منظور مطور C#/WPF؟
  2. ما هي التغييرات الرئيسية في CLR 4.0 ككل؟

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

وإذا كانت الميزات المذكورة أعلاه هي الوحيدة ، فقط بالنسبة لهذه الميزات ، يتم تغيير الإصدار إلى 4.0 ، والذي أعتقد أنه 4.0 بسبب الإصدار .NET 4.0 (أي بعد 1.0/1.1 و 2.0 و 3.0/3.5). هل الزيادة في الإصدار مبرر؟

تحرير:

كما أشار بافيل مينيف في التعليقات ، حتى هاتين الميزتين هما CLR مستقل. كانت هناك سرعة وغيرها من التحسينات في 3.0 و 3.5 أيضا. فلماذا زيادة الإصدار؟

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

المحلول

شيء واحد جديد CLR أعرفه هو شكل من أشكال الكتابة الهيكلية للواجهات والهياكل والمندوبين من أجل دعم Nopia - في الأساس ، يتيح لوقت التشغيل أنواعًا متميزة مع تعريفات مكافئة كما لو كانت متماثلة - لذلك إذا كانت هناك تجميعتين A و B لكل منهما واجهة مستوردة IFoo أعلن فيها ، مع نفس IID ونفس الأعضاء ، سوف يعاملهم وقت التشغيل كنوع مكافئ ؛ لذلك إذا كان هناك مثيل بعض الفئة Foo تنفيذ [A]IFoo, ، يمكنك إلقاءها على [B]IFoo, ، وستعمل الممثلون.

شيء آخر هو القدرة على استضافة العديد من إصدارات CLR جنبًا إلى جنب في عملية واحدة. لا يمكنك استضافة 1.x و 2.0 في عملية واحدة ، على سبيل المثال ، ولكن يمكنك استضافة 2.0 و 4.0. الفائدة الرئيسية لذلك هي القدرة على تحميل الإضافات المكتوبة لإصدار CLR بشكل متزامن.

جزء صغير واحد هو أن بعض الاستثناءات أصبحت غير قابلة StackOverflowException كان في 2.0 - لا يمكنك التقاط AccessViolationException بعد الآن ، على سبيل المثال.

ايضا، هنا هو عرض تقديمي لـ PowerPoint على CLR 4.0 من PDC 2008. قد يكون مؤرخًا بعض الشيء الآن ، ولكن يبدو أن معظم الأشياء المذكورة هناك في بيتا.

نصائح أخرى

هناك عدد كبير من التغييرات.

في CLR نفسها ، هناك بعض التغييرات. يتم تغيير جامع القمامة لدعم المجموعة المتزامنة من Gen0/1 و Gen2 في وضع محطة العمل. أيضا ، هناك بعض التغييرات في كيفية تنفيذ الأمن. يغير الإطار الموازي بعضًا من تنفيذ CLR لـ ThreadPool (والذي لم يتم إدارته بالكامل ، ولكن جزءًا من وقت التشغيل نفسه). أيضًا ، هناك بعض التغييرات على نظام النوع ، المتعلق في الغالب بدعم PIA COM الجديد.

من المحتمل أن تكون أكبر التغييرات هي التغييرات في المكتبة/الإطار ، بدلاً من التغييرات CLR. مثل دمج DLR في الإطار ، والنوع الديناميكي الجديد. فيما يتعلق بالإطار ، لديك إطار تفاعلي ، ملحقات مكتبة متوازية ، عقود التعليمات البرمجية ، دعم tuple ، والكثير من التغييرات الصغيرة (أي: Enum.TryParse, Lazy<T>, وأطنان من التحسينات الصغيرة ، ولكن لطيفة ،).

لا أعتقد أن هناك أي تعليمات جديدة IL. لدى CLR الجديد تحسينات على أشياء مثل التحديد وجمع القمامة التي تقوم بنفس الوظيفة مثل 2.0 CLR ، ولكن أفضل. الجهاز الظاهري (مثل CLR أو JVM) هو مفهوم مجردة مع تطبيقات متعددة ممكنة. أعتقد أن CLR 4.0 هو نفس الآلة المجردة كما في CLR 2.0 ، فقط مع تنفيذ محسّن.

حتى الأشياء الديناميكية الجديدة هي مجرد خدعة برمجية مع واجهات برمجة التطبيقات الجديدة (على عكس في جافا حيث يتم اقتراحها كرمز Opcode جديد.)

إذا كنت مخطئًا في هذا ، أحب أن أعرف!

لكل فرق توثيق الإصدار تنشئ مستندات "ما الجديد".

هنا هو واحد لـ C# 4.0 beta2: ما الجديد في Visual C# 2010

وهنا هو واحد لـ .NET Framework 4.0 Beta2: ما الجديد في .NET Framework الإصدار 4

هذه هي قوائم التغييرات الأكثر اكتمالا التي يمكنك العثور عليها.

تم تحديث العديد من أنواع الواجهة الأساسية والفوضى في CLR لدعم التباين العام والانتهاك. فمثلا، IEnumerable<T> تم تغييره إلى IEnumerable<out T>.

حاولت النظر إلى بعض الأشياء C# الجديدة في Reflector ، لمعرفة ما إذا كان هناك أي شيء جديد أسفل:

  • متحرك تتم ترجمة الأنواع إلى هدفS ، عبر برنامج التحويل البرمجي ، الذي يضيف مكالمات المكتبة للتعامل مع ربط وقت التشغيل.
  • يتم التعامل مع المعلمات الاختيارية عبر المترجم. إذا قمت بالاتصال بـ Foo (int x = 5) ، دون تحديد قيمة لـ x ، فسترى المكالمة كـ foo (5) في Reflector.

لذلك أعتقد أن التغييرات ليست شيئًا يمكنك اكتشافه بسهولة (مثل الدعم العام في CLR 2.0).

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