ماذا يعني حقا أن لغة البرمجة هي تكثيف؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

وفقا لهذه الإجابة

https://stackoverflow.com/Questions/551950/What-Stack-Programming-languages-are-available/671296#671296.

جميع لغات البرمجة هذه هي تكثيف

  • بيثون بلا تكدس
  • بايبيت
  • lisp
  • مخطط
  • TCL.
  • لوا
  • الببغاء VM.

ماذا يعني حقا أن يكونوا مكشوفين؟ هل يعني أنهم لا يستخدمون مكدس المكالمات؟ إذا لم يستخدموا مكدس مكالمة، فماذا يستخدمون؟

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

المحلول

ماذا يعني حقا أن يكونوا مكشوفين؟ هل يعني أنهم لا يستخدمون مكدس المكالمات؟

نعم، هذا عن صحيح.

إذا لم يستخدموا مكدس مكالمة، فماذا يستخدمون؟

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

Languess Langues Langure يدعم مكدسات لعدد من الأسباب، ولكن في كثير من الحالات تستخدم حتى تصبح بنيات برمجة معينة أسهل بكثير. واحد الكنسي هو استمرار. وبعد البلدان المستمرة قوية جدا، وهياكل تحكم بسيطة للغاية يمكن أن تمثل أي من هياكل التحكم المعتادة التي ربما تكون على دراية بها (while, do, if, switch, ، إلى آخره).

إذا كان ذلك مربكا، فقد ترغب في محاولة لف رأسك حول مقالة ويكيبيديا، ولا سيما cutesy استمرار تشبيه ساندويتش:

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

نصائح أخرى

لا يستخدمون مكدس المكالمات، لأنهم يعملون في الاستمرار النمط. وبعد إذا لم تكن معتادا على تحسين دعوة الذيل، فربما تكون هذه الخطوة الأولى الأولى لفهم ما يعنيه هذا.

لمحاكاة المكالمة / العائد التقليدية في هذا النموذج، بدلا من الضغط على عنوان المرسل وتوقع ما تبقى من الفترة المتبقية من الإطار لا يمسح المتصل يغلق على ما تبقى من رمزه وأي متغيرات لا تزال مطلوبة (يتم تحرير الباقي). ثم يقوم بعد ذلك بإجراء مكالمة ذيل إلى Callee، مما يمر هذا الاستمرار كوسيطة. عندما يقوم Callee ب "إرجاع"، فإنه يفعل ذلك عن طريق الاتصال بهذا الاستمرار، مما يمر قيمة الإرجاع كوسيطة به.

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

  1. استثناء / أخيرا / إلخ كتل سهلة النمذين للغاية - إذا كنت تستطيع تمرير استمرار "إرجاع" واحد كوسيطة، فيمكنك تمرير 2 (أو أكثر) بنفس السهولة. كتل LISP-Y "حالة الحالة" (التي قد تكون أو لا ترجع التحكم في المتصل) هي أيضا سهلة - تمرير استمرار لبقية هذه الوظيفة، والتي قد لا يتم استدعاؤها أو قد لا يتم استدعاؤها.
  2. تم صنع قيم عودة متعددة مماثلة بسهولة - تمرير العديد من الحجج إلى استمرار.
  3. العودة المؤقتة / النسخ لم تعد تختلف عن وسيطة الوظيفة التي تمر. هذا غالبا ما يجعل من السهل القضاء على الزخم.
  4. التحسين العودية الذيل تافهة - يمر المتصل ببساطة في مواصلة "العودة" التي تلقتها بدلا من التقاط واحد جديد.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top