اللغات الديناميكية Vs ثابت اللغات (يمكن هذا يكون معا في نفس المكان)

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

سؤال

لغات البرمجة يتم تجميع ذلك 2 فئات رئيسية "ديناميكية" & "ثابت". هل هذا هو الحال دائما لغة البرمجة هو في واحد منهم وليس في كليهما ، أعني أن اللغة تكون ثابتة وديناميكية في نفس الوقت ؟

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

المحلول

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

تفسير/تجميع

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

  • هاسكل (GHC / GHCI / العناق)
  • C++ (G + + / Ch)
  • F#

جمعت بعض اللغات أيضا إمكانية ترجمة التعليمات البرمجية الخاصة بهم في وقت التشغيل (.NET).

ثابت/ديناميكية الكتابة

والدينامية كتابة (بطة الكتابة) يمكن الجمع في لغة واحدة.انظر C#'s dynamic, VB مع Option Explicit/صارمة قبالة أو بو.هيكلية الكتابة التي يمكن استخدامها لصياغة صارمة الكتابة دون صريحة نوع الهرمية.متعددة الأشكال قاعدة أنواع (System.Object) دعم بعض نوع من السلوك الديناميكي كذلك ، على الرغم من أن نوع معين بشكل ثابت.

ميتا بنيات (مثلا ، انعكاس, وقت التشغيل نوع الجيل)

تتوفر في جاوة .صافي جدا.

وظيفية تقنيات(على سبيل المثال.الوظائف العليا ، متابعات)

يمكن تكرارها في ثابت-كتابة اللغات كذلك.انظر هاسكل أو سكالا.

نصائح أخرى

C# 4.0 هو ثابت كتابة اللغة التي يدعم ديناميكية القرار وكذلك.على dynamic الكلمة الأساس يقول المترجم:لا تقلق بشأن هذا الآن.إذا كان لا يمكن أن تحل من نوع في وقت التشغيل يتم طرح استثناء.

الهدف-C هو مثال آخر.انها صارمة شاملة من C و C هو ثابت كتابة.لكن "الهدف" الأشياء يمكن أن تكون ديناميكية تماما (كل الكائنات كما أعلن النوع id).مترجم يفعل بعض ساكنة نوع التحقق من الهدف-C الكائنات ، على الرغم من أنها محدودة منذ العديد من الأساليب القياسية العودة id.على سبيل المثال ، NSArray عادت مجموعة كائنات من نوع id, لذا فإن المترجم لا يستطيع الإمساك:

NSMutableArray *a = [NSMutableArray arrayWithObject:@"I am a string"];
NSNumber *n = [a objectAtIndex:0]; //assigning a string to a number!

على الرغم من أنه يمكن العلم ، NSNumber *n = @"I am a string", في وقت الترجمة.

نعم.فمن الممكن أن يكون كل والدينامية معا.

إذا كان أحد يستخدم C#, ثم نحن على ساكنة تتبع حركة نستخدم جديد System.linq.Expression tree API في مقابل 2010 (.NET 4.0).نحن نستهدف رمز لدينا نحو إطار ما يسمى (DLR ديناميكية وقت تشغيل اللغة) طبقة فوق CLR.

حتى التعليمات البرمجية التي تم إنشاؤها من قبل expression class يمكن أيضا استخدام غيرها من اللغات الديناميكية مثل IronPython الخ..

وبالمثل يمكننا استخدام الحديد كود بايثون على CLR.كل ما نحن بحاجة للتأكد من أنها تنبعث من شجرة التعبير موجهة نحو DLR.

أن اللغة تكون ثابتة وديناميكية في نفس الوقت ؟

ثابتة وديناميكية الرجوع إلى العديد من الأشياء المختلفة في الكثير غامضة الطريق.ولا سيما اللغات بشكل ثابت أو حيوي كتبته يعني نوع التحقق إما القسري إلى حد ما في تجميع أو هو تماما تأجيلها إلى وقت التشغيل.لكن الناس غالبا ما تشير إلى لغة "ديناميكية" لأنه يحتوي على REPL حتى التعاريف والتعابير التي يمكن تقييمها بشكل تفاعلي.في الواقع, F# هو ثابت كتابة اللغة التي كان صوت أفضل لغة ديناميكية في المسح.ديناميكية يمكن أن يشير أيضا إلى القدرة على القيام التأمل/التأمل.

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

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