سؤال

أعلم أن هذا مجردة للغاية ، لكنني أعتقد أنه مركّز للغاية.

هناك الكثير من اللغات عالية المستوى اليوم: ج#, جافا, VB, بيثون, ، وما إلى ذلك ، كلها تم إنشاؤها لتجريد التعقيد منخفض المستوى وتوفير تجربة برمجة أكثر سهولة في الاستخدام. يمكن أن تقلل اللغات عالية المستوى ، ومعظم الوقت تزيلها تمامًا ، وضرورة إجراء عمليات محددة من المستوى المنخفض (مثل معالجة المؤشرات وإدارة الذاكرة). يزيل الكثيرون أيضًا تفاصيل النظام الأساسي (مثل معالجة الملفات ، وتوليد واجهة المستخدم ، وما إلى ذلك)

سئني هما:

  1. ماذا يمكن/يجب استخلاصه؟ هل هناك أي دلالات منخفضة المستوى موجودة في اللغات عالية المستوى التي سيتم تجريدها/يجب تجريدها أكثر من ذلك؟
  2. في أي نقطة تصبح لغة عالية المستوى وعالية المستوى المستوى العالي جدا, ، الملقب ب موجهة نحو الهدف?
هل كانت مفيدة؟

المحلول

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

Java ، على سبيل المثال ، ليست حتى تلك اللغة عالية المستوى ، ولكنها مصممة لتكون آمنة (بمعنى أن التجريدات لا تتسرب) أولاً وقبل كل شيء. لذلك ، من المستحيل القيام ببعض الأشياء في جافا. على سبيل المثال ، لا يمكنك كتابة جامع القمامة في Java داخل Java ، أو قم بتشغيل نظام الكائن الخاص بك باستخدام تعدد الأشكال المصبوب للمؤشر ، أو كتابة نظام تشغيل (على الأقل ليس تقليديًا).

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

نصائح أخرى

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

في الواقع على الرغم من ... الخط تعسفي تماما بالطبع.

TCL لديه اقتراح رسمي (اقتراح تحسين TCL (نصيحة) 131 أن يحل المشكلة إلى حد كبير. كل ما تحتاجه هو متطوع للقيام بالعمل. هناك حتى تنفيذ هيكلي مع عدد قليل من التفاصيل التي تم تركها.

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

The fireplace is scenery in the Entrance Hall. The description is "Unlit, vacant
[if Search is happening]. It is almost as though you are not expected[end if]."
The sound of the fireplace is "whistling wind". Understand "fire" or "whistling" 
or "wind" as the fireplace. Instead of burning the fireplace: say "There is no 
fuel prepared for a fire."

هذا هو رمز المصدر الفعلي. قون

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

في الأساس ، لغة منطقية مع تحسينات سخيفة مقارنة مع الغاشمة التي تجبر الإجابة.

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

فمثلا:

int32 Remainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures Math.Abs(result) < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures result >= 0
    ensures result < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}

النتائج في:

//warning: suggested precondition: denominator != int32.MinValue due to Math.Abs
int32 Remainder(int32 numerator, int32 denominator) {
    return numerator % denominator;
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    return ((numerator % denominator) + denominator) % denominator;
}

HRM ، أعتقد أن بعض اللغات تحاول قيادة بعض التجريدات الإضافية: clojure مع STM و Erlang مع نموذج الممثل.

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

أعتقد أن الأطر هي الخطوة التالية.

  • حاليا بعض "اللغات" uat (وهو قريب مما يمكن للمرء أن يسميه هدفًا و الهدف يتطلب الاختبارات لأنها هي الطريقة الوحيدة التي يمكن شرحها ، على سبيل المثال ملائم لجزء الاختبار) ؛ يمكن دمجها مع لغات البرمجة.
  • إلى حد كبير كل لغة يمكنها الوصول إلى المزيد والمزيد واجهات عالية المستوى (بمعنى آخر، التجريد) تتطلب رمزًا أقل وأقل منك وتجريدها من نظام التشغيل (انظر مدى سهولة جعل تطبيق واجهة المستخدم الرسومية الآن في C#، مقارنة بـ C ++ MFC ، مقارنة بـ C ++ Win32 API).
  • أما بالنسبة لغات البرمجة ، يمكنهم الحصول على المزيد من أفضل ميزات طرق التطوير الأخرى: أفكر في الجانب برمجة والتي يمكن أن تساعد في حل العديد من مشكلة OO ويتم تنفيذها جزئيًا بالفعل في شكل ما في C# و Java (مثل المشكلات المتعلقة بالمسجل والمعاملات ...).
  • UML الهدف الأسمى (كنت؟) للسماح لـ UML VIESW جنبًا إلى جنب مع تفاصيل المخططات لتكون كافية لترميز النظام ؛ UML هي أيضا لغة (بالمعنى الأكبر).
  • IDE يجب أيضًا تضمينه: يمكنك الآن تعيين كيفية تغيير حجم مربع الحوار من IDE بينما كان عليك في كثير من الأحيان ترميزه من قبل. في وقت لاحق قد تكون قادرًا على ذلك نمط تطبيقك بالكامل أو موقع الويب الخاص بك من قائمة إسقاط من السمات تمامًا مثل أي تطبيق يمكن للبشرة. ويمكن أن يأتي الكثير.

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

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