سؤال

لماذا الأعداد الصحيحة غير الموقعة غير متوافقة مع CLS؟

لقد بدأت أعتقد أن مواصفات النوع مخصصة للأداء فقط وليس للصحة.

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

المحلول

ليست كل اللغات لديها مفهوم ints غير الموقعة.على سبيل المثال، لم يكن لدى VB 6 مفهوم ints غير الموقعة والذي أعتقد أنه دفع مصممي VB7/7.1 إلى عدم تنفيذه أيضًا (يتم تنفيذه الآن في VB8).

يقتبس:

http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

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

تحديث:لقد تساءلت عن هذا الأمر منذ بضع سنوات مضت، وبينما لا أستطيع أن أرى سبب عدم إمكانية التحقق من سلامة نوع UInt، أعتقد أنه كان على رجال CLS أن يكون لديهم نقطة قطع في مكان ما فيما يتعلق بما سيكون الحد الأدنى لعدد خط الأساس من أنواع القيمة المدعومة.أيضًا عندما تفكر في المدى الطويل حيث يتم نقل المزيد والمزيد من اللغات إلى CLR، فلماذا يجبرهم على تنفيذ ints غير الموقعة للحصول على الامتثال لـ CLS إذا لم يكن هناك أي مفهوم على الإطلاق؟

نصائح أخرى

أعتقد أن جزءًا من المشكلة يدور حول حقيقة أن أنواع الأعداد الصحيحة غير الموقعة في لغة C مطلوب منها أن تتصرف كأعضاء في حلقة جبرية مجردة وليس كأرقام [بمعنى، على سبيل المثال، إذا كان المتغير الصحيح ذو 16 بت غير الموقع يساوي الصفر ، يتناقص هو مطلوب لتنتج 65,535، وإذا كانت تساوي 65,535، فإن زيادتها مطلوبة للحصول على صفر.] هناك أوقات يكون فيها هذا السلوك مفيدًا للغاية، لكن الأنواع الرقمية تظهر مثل هذا السلوك ربما يتعارض مع روح بعض اللغات.أعتقد أن قرار حذف الأنواع غير الموقعة ربما يسبق قرار دعم السياقات الرقمية المحددة وغير المحددة.شخصيًا، كنت أتمنى لو كان هناك أنواع صحيحة منفصلة للأرقام غير الموقعة والحلقات الجبرية؛إن تطبيق عامل ناقص أحادي على رقم 32 بت غير موقّع يجب أن يؤدي إلى نتيجة موقعة 64 بت [إن إلغاء أي شيء آخر غير الصفر سيؤدي إلى رقم سالب] ولكن تطبيق ناقص أحادي على نوع حلقة يجب أن يؤدي إلى العكس الإضافي داخل تلك الحلقة.

على أية حال، السبب وراء عدم توافق الأعداد الصحيحة غير الموقعة مع CLS هو أن Microsoft قررت أن اللغات لا تحتاج إلى دعم الأعداد الصحيحة غير الموقعة حتى يتم اعتبارها "متوافقة مع CLS".

لا تكسبك int غير الموقعة الكثير في الحياة الواقعية، ولكن وجود أكثر من نوع واحد من int يسبب لك الألم، لذا فإن الكثير من اللغات تحتوي فقط على ints.

يهدف توافق CLS إلى السماح بالاستفادة من الفصل الدراسي من خلال الكثير من اللغات...

تذكر أنه لا أحد يجعلك متوافقًا مع CLS.

لا يزال بإمكانك استخدام ints غير الموقعة داخل طريقة، أو parms ل خاص الطريقة، حيث أن واجهة برمجة التطبيقات العامة فقط هي التي يقيدها توافق CLS.

الأعداد الصحيحة غير الموقعة ليست متوافقة مع CLS لأنها غير قابلة للتشغيل المتبادل بين لغات معينة.

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