سؤال

لقد كانت لدينا دائمًا لغات مفضلة لاستخدامها في سيناريو معين.للتطوير السريع للنموذج الأولي، كان VB6 خيارًا واضحًا.تم اختيار VB6 في المشاريع التي تحتوي على واجهة مستخدم بسيطة لسطح المكتب ومتطلبات تفاعل قاعدة البيانات القياسية وغير المعقدة.إذا كنت ترغب في تطوير برنامج تشغيل الجهاز باستخدام إجراءات منخفضة المستوى، فمن المحتمل أنك اعتمدت على لغة C أو Visual C++.كان ASP خيارًا قياسيًا لتطوير واجهات الويب.كان لكل لغة "مجال" أو "تخصص" معين، وتتحدث بشكل فظ.

مع إطار عمل .NET، تكون جميع اللغات قابلة للتشغيل المتبادل ومن المفترض أنها متسقة.يمكن أن يكون لديك مشروع يحتوي على وحدات من لغات مختلفة معًا ولكن يتم التعامل معها جميعًا بشكل مشابه إلى حد ما (يتم تجميعها جميعًا إلى IL).

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

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

المحلول

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

والميزة الكبرى من صافي رغم ذلك، وهذا قد ألهمت هذه المسألة، هو أنه يمكنك استخدام رمز موضوع اللغة 1 في مكتبة مكتوبة بلغة 2 تربطها تطبيق مكتوبة بلغة 3.

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

نصائح أخرى

والفروق لا تزال موجودة. على سبيل المثال، تدعم VB.NET حاليا IDispatch وفي وقت متأخر ملزم بطريقة أجمل من C # (باستثناء C # 4.0) وVB.NET ديه حرفية XML متوافقة مع قانون مما يجعلها أداة قوية لمعالجة XML مقارنة مع لغات NET الأخرى. C ++ لا يميل إلى أن يكون ذلك مناسبة تماما ل.NET، حتى مع وجود البديل C ++ / CLI، ولكن انه لامر رائع للبرمجة الأصلي (كما هو الحال دائما) وتوفير طبقة إمكانية التشغيل المتداخل بين التعليمات البرمجية المدارة وغير المدارة.

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

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

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

إذا كان أي شيء، وأعتقد أنه قد يكون تصاعدت التمييز بين اللغات، على وجه التحديد لأن فهي قابلة للتشغيل المتبادل.التركيز الآن على لغة.

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

على سبيل المثال، للعمل مع COM المتأخر، قد أختار (على مضض) VB (أو قد أنتظر الإصدار C# 4.0).بالنسبة لبعض الأعمال المالية/المحاكاة المحددة، قد أفكر جديًا في F#.بالنسبة لبرمجة الأعمال العادية، سيكون خياري المباشر هو C#.

ولكن يمكنك اتخاذ هذه الاختيارات بناءً على لغة مناسبة للكتل المختلفة، وربط التطبيق المكتمل معًا من ملفات dll المختلفة بلغات مختلفة.في السابق، ربما كان عليك القتال مع جزء من الكود، لأنك يملك لاستخدام اللغة س لجعله يتفاعل مع بقية التعليمات البرمجية.

واعتقد انها حقا يتوقف على السياق الذي يتم طرح السؤال.

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

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

والآن، لنفترض أن كنت تكتب مكتبتك في VB. NET و قررت استخدام المعلمات الاختيارية بدلا من طريقة الحمولة الزائدة. في هذه الحالة، وصافي وتسليط الضوء على التمييز بين اللغات لأن المعلمات الاختيارية ليست CLS المتوافقة (على الرغم C # تدعم لهم في. NET 4.0 على ما يبدو.) لشخص ما باستخدام اللغة التي لا تدعم المعلمات الاختيارية، قد تكون مكتبتك من المستحيل أو في أحسن الأحوال من الصعب استخدام. كل لغة لها عدد قليل من السمات التي ليست متوافقة مع CLS، عند استخدام هذه أنت ذاهب لربما يجعل من الصعب على مستخدمي بعض اللغات .NET لتستهلك المكتبات.

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

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