|
برنامه نويسي توارثي در C++ : موارد اجرايي
هدف از تحقيق جاري بررسي طرح و اجراي پلتفرم برنامهنويسي توارثي در++
C، به همراه تمركز اوليه بر كارايي و انعطاف پذيري مربوطه ميباشد. در
اين فصل ما ويژگيهاي اجرايي سطح پايين چنين پلتفرمي، عليالخصوص مفسر
توارثي، را بررسي مينمائيم. اين حقيقت كه برنامه نويسي توارثي ار نظر
محاسباتي عملي پرهزينه و گران محسوب ميگردد، بدان معناست كه كارايي
كلي پلتفرم در زمان و حافظه حياتي و مهم ميباشد. بويژه، نماد گرهاي
يكي از قسمتهاي اصلي اجرايي بوده كه در آن اورهد (مقدار پردازش مورد
نياز براي اتمام پروسه) مورد توجه قرار خواهد گرفت. ما در ابتدا چندين
روش ذخيره توپولوژي يا جانمايي درختي را مورد مقايسه قرار ميدهيم.
موثرترين نماد همهجانبه در اين زمينه روشي ميباشد كه در آن درختچه
برنامه داراي آرايه خطي از گرهها با نظم پيشوندي، در مقابل ساختار
درختي بر مبناي اشارهگر، ميباشد. ما اين امر را با ديگر معرفها يا
نمادهاي خطي، اكثرا بصورت پسوندي و قراردهي دلخواه توابع و آرگومانهاي
آن، مورد توجه قرار ميدهيم. پس از آن توجه ما بر چگونگي معرفي آنكه
كدام تابع يا ترمينال معرف هر گره ميباشد معطوف شده و همچنين روش
بسيار موثر ارائه يك بايت به دو بايت را نشان ميدهيم. در نهايت ما اين
ديدگاهها را با هم تركيب نموده و يك ديدگاه جدول پيشوند / پرش يا جست (PJT)،
كه موجب اورهد بسيار كوچكي در گره هم در زمان و هم در فضا در مقايسه با
موارد ديگري كه مطالعه نمودهايم ميشود، را پيشنهاد مينمائيم. علاوه
بر كارايي داشتن ، مفسر ما بسيار انعطاف پذير ميباشد. نهايتا، ما
روشها و ديدگاههايي را به منظور اداره نمودن جريان كنترل يك برنامه،
كپسوله سازي، بازگشت و برنامه نويسي موازي شبيهسازي شده ارائه مينمائيم...
مقدمه
در اين فصل ما موارد اجرايي سطح
پايين كه آن را بنام مفسر توارثي ميخوانيم را مورد بررسي قرار ميدهيم...
كاربردهايي بر مبناي اشارهگر
كوزا (1992) و تكت (1993) كاربردهايي بر مبناي اشارهگر براي استفاده
در برنامه نويسي كلي، كه در آن هر برنامه يك درخت تجزيه بوده و هر گره
داراي يك اشارهگر به هر چايلد (يك ركورد داده كه تنها با توجه به
محتواي ركورد ديگر ميتواند ايجاد شود) يا هر ورودي ميباشد، را
پيشنهاد نمودند. اين ديدگاه سنتي براي معرفي ساختار درختي، معمولا
بصورت زير در C كد
ميشود:...
ديدگاه پسوندي، بر اساس پشته
ما هم اكنون ديدگاهي را بر اساس پشته معرفي مينمائيم كه در آن هر تابع
و ترمينال مسئول بدست آوردن آرگومانهاي خود (در صورت وجود) بوسيله
برداشتن آنها از پشته و نشاندن خروجي واحد آن در پشته ميباشد. اين
روتين، مشابه زبان برنامهنويسي فورت
(FORTH) است...
كارايي حافظه
استفاده از آرايههاي اندازه ثابت جهت نگهداري ژنومهاي با اندازه-
متغير ميتواند بطور آشكاري باعث بوجود آمدن ميزان مشخصي از فضاي بدون
استفاده شود. بنابر اين، با وجود آنكه هر گره در طرح ارتباط – ضمني
تنها ميتواند 2 بايت را نگهداري نمايد، اندازه گره موثر (Se)
بزرگتر از اندازه واقعي گره (Sa) در مقايسه با ميانگين فضاي آرايه
استفاده نشده (Uave) و ميانگين اندازه ژنوم (Gave) ميباشد:...
كار با برنامههاي پسوندي
جهت انجام درست اپراتورهاي
GP سنتي، ما بايد
اطمينان داشته باشيم كه پس از راهاندازي، تمركز نخستين بر روي كار و
اعمال تغييرات، داراي نماد معتبري از درخت هستيم...
آغاز يا راهاندازي پسوند
ما ميتوانيم يك آرايه خط گرهها
را بعنوان درخت ضمني، در حالت بازگشتي مشابه با آغاز درختهاي بر مبناي
اشارهگر، راهاندازي و آغاز نمائيم...
تمركز پسوندي
قاعده طلايي ما، كه موجب جمع
StackCount به 1 بر
هر عبارت پسوند مجاز ميگردد، را ميتوان به زيردرخت نيز تعميم داد...
مشكل كنترل جريان با پسوند
مشكل اصلي با طرح مرتبه پسوندي
عدم توانايي آن جهت اداره جريان كنترل ميباشد...
تركيب وند
راهي وجود دارد كه از طريق آن
ميتوان از اجراي بخشهاي درخت ممانعت نمود. براي اين امر ميبايست
نيازهاي مقادير توابع دريافت برگشت به پشته را مرتفع نمود...
مرتب سازي پيشوندي
ما دريافتيم كه بهترين روش جهت حل
مشكل كنترل جريان بصورت طبيعي در حالي كه از مزيت كارايي حافظه براي
كاربردهاي خطي سود ميبريم، استفاده از مرتب سازي پيشوندي در يك آرايه
ژنوتايپ (با مشخصات برابر توارثي) ميباشد...
ارائه گره
تا بحال، ما تنها چگونگي ارائه
توپولوژي درخت را نشان داده ايم و كمتر به مسئله كاربرد تابع اشارهگر
جهت ارائه اطلاعات مورد نياز جهت ارزيابي گره پرداختهايم. در اين بخش،
ما ديدگاه خود را در خصوص ارائه يك گره بيان ميداريم...
مكانيزم جدول جهش
مكانيزم جدول جهش ما بسادگي آرايهاي از آبجكتهاي نشانه ميباشد. مزيت
اصلي چنين جدول جهشي آن است كه هم اكنون ميتوانيم انتخاب كنيم كه كدام
تابع را با حذف ارجاع آرايه، در مقابل جمله
case، اجرا كنيم...
ديدگاه پيشوند، جدول- جهشي (PJT)
ما تصور ميكنيم كه بهترين حالت
اجراي همه جانبه مفسرهاي ژنوم استفاده از اين 4 مفهوم كليدي باشد: طرح
مرتبسازي پيشوندي، پشتيباني داده عمومي، ارائه گره 2 بايتي و مكانيزم
جدول – جهش...

|