PDA

View Full Version : دستوری شبیه تابع eval در زبان های اسکریپتی



amir001
سه شنبه 12 بهمن 1389, 01:09 صبح
سلام دوستان

یکی از ویژگی های زبانهای اسکریپتی این هست که میتونیم در حین اجرای برنامه ، کدهای برنامه را که در یک رشته ذخیره شده است اجرا کنیم.
مثلا در PHP


eval("echo 'HI' ");آیا چنین کاری را میشه درون C# انجام داد؟؟
مثلا چنین دستوری


eval('MessageBox.Show("Is Running")');پی نوشت:
توی فروم جست جو کردم و درون تاپیک "نمونه برنامه های کوچک و مفيد در سي شارپ (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE)" یک نمونه کد دیدم که اون میاد و برنامه را کامپایل میکنه و یک فایل اجرایی از روی اون میسازه.
من میخوام دستورات درون همون برنامه اجرا بشه.

شبیه این برنامه:
http://www.alvas.net/alvas.scriptor.aspx

میخوام بدونم آیا خود سی شارپ مستقیم چنین متد هایی داره یا باید حتما از کامپوننت و ... اضافه کرد؟؟

سوال دوم:
اگر جواب سوال اول نه هست، آیا میشه چنین کاری را با خروجی کامپایل شده یک برنامه انجام داد؟ مثلا یک برنامه را کامپایل کنم و اون را به صورت رشته کد هکز در بیارم و در برنامه دیگری اون کدهای هگز را که مثلا درون یک استرینگ قرار دادم مستقیم اجرا کنم؟؟؟

eshpilen
چهارشنبه 04 اسفند 1389, 08:55 صبح
سوال خوب و مهمي هست.
بنده هم ميخوام جوابش رو بدونم!
و اصلا اينكه چرا دات نت تابعي مشابه Eval رو نداره؟
البته تاجايي كه ميدونم و به فكرم ميرسه، ايجاد اين تابع در زبانهاي اسكريپتي بسيار ساده تر هست، بنظرم چون اين زبانها اساسا بصورت تفسيري اجرا ميشن و همهء قسمتهاي اونها يجورايي داره Evaluate ميشه! يعني يك مفسر دارن كه مثل يجور كامپايلر عمل ميكنه و براش چندان فرقي نميكنه كه شما كد رو در متن مستقيم برنامه نوشته باشيد يا با تابع eval اجراش كنيد. اما در زبانهايي كه كامپايلر دارن اگر بخوان چنين امكاناتي رو بذارن، بايد يك مفسر يا كامپايلر كامل رو درون اونها كار بذارن. بعد تازه اينكه كدهاي دايناميك تفسير/كامپايل شده چطور با كدهاي خود برنامه پيوند كاملي داده بشن احتمالا كار خيلي پيچيده تري هست، چون روش اجراي اين دو بخش با هم تفاوت داره و پاي بهينه سازي سرعت اجرا و احتمالا مسائل ريز و درشت ديگه اي پيش مياد. يعني ميخوام بگم اگر بقيهء برنامه بخواد پيوند دايناميك كاملي با كدهايي كه بصورت دايناميك اجرا ميشن داشته باشه، احتمالا كل سيستم بايد كم و بيش بصورت تفسيري دربياد و اين باعث ميشه عملا مرحلهء كامپايل حذف بشه يا به يك كامپايل ناقص تر تبديل بشه و سرعت سيستم بر اثر نيازها و روش اجراي تفسيري، پايين بياد.
اينا كه گفتم بر اساس اطلاعات اندكي كه در اين زمينه دارم و تحليل شخصي خودم بود.