PDA

View Full Version : اجرای رشتهٔ حاوی کد ++C



ilius.gnu
شنبه 14 دی 1387, 03:13 صبح
سلام
می‌خوستم بدونم توی ++C آیا تابعی هست که یک رشته(string) که خودش محتوی یک کد ++C هست رو داخل برنامه اجرا کنه یا نه. یه چیزی مثل تابع exec توی پایتون میخوام.
من از ++g و gcc استفاده می‌کنم(توی لینوکس) مثل CodeBlocks و Dev-Cpp توی ویندوز.
ممنون.

Nima_NF
شنبه 14 دی 1387, 14:59 عصر
خیر، اگر تو python چنین چیزی هست به خاطر خاصیت مفسری بودن آن هست که در حالت run-time اجرا می شود.
در ++C و C باید برنامه ها کامپایل شوند.

ilius.gnu
شنبه 14 دی 1387, 18:48 عصر
خیر، اگر تو python چنین چیزی هست به خاطر خاصیت مفسری بودن آن هست که در حالت run-time اجرا می شود.
در ++C و C باید برنامه ها کامپایل شوند.
مرسی
ولی من متوجه نمیشم چه ربطی به کامپایلری بودن یا تفسیری بودن داره. مگه کامپایلر ++C موقع کامپایل، برنامه رو از توی یه فایل نمی‌خونه، یعنی محتویات یه فایل با پسوند cpp رو میخونه و بصورت رشته(string یا آرایهٔ کاراکتری مهم نیست) ذخیره میکنه بعد اون رو به کد اسمبلی و بعد به کد ماشین تبدیل میکنه و توی فایل ذخیره میکنه. حالا اون رشته‌ای که حاوی کد ++C هست رو میخواد از طریق کد برنامه بگیره(بصورت غیر مستقیم) بجای اینکه مستقیماً از فایل بخونه. فکر می‌کنم خیلی بدیهی باشه و اصلاً انتظار بیجایی از یه کامپایلر نیست، چون خودش بصورت درونی داره این کار رو انجا میده.:متفکر:

ilius.gnu
سه شنبه 17 دی 1387, 02:26 صبح
کسی نمی‌دونه؟:ناراحت:

Saeed_m_Farid
سه شنبه 17 دی 1387, 12:00 عصر
کسی نمی‌دونه؟:ناراحت:

ولی من متوجه نمیشم چه ربطی به کامپایلری بودن یا تفسیری بودن دارهربطش اينه كه كد داخل رشته شما يه مرحله بعد از كامپايل هست كه مقدارش معني دار ميشه، بله كامپايلر كد cpp داخل فايل رو ميخونه و به زبان ماشين ترجمه اش ميكنه و اينكار رو تو چند مرحله انجام ميده چون تعريف متغيرها و دستورات پيش پردازنده و ... ميتونه هرجايي از اين كد قرار بگيرن ولي نه اينكه مقادير داخل متغيرها رو هم در زمان كامپايل مدنظر قرار بده‌: اينكار در زمان runtime اتفاق ميافته كه اون موقع هم كد كامپايل شده و تموم!
ميتوني واسه راهنمايي يه نگاهي به انواع كامپايلرها تو ويكي بندازي : همگردان یا كامپایلر (http://fa.wikipedia.org/wiki/%D9%87%D9%85%DA%AF%D8%B1%D8%AF%D8%A7%D9%86)
شكلهاي تو ضميمه واسه تفهيم تفاوت كامپايلرها ممكنه بهتر كمكتون كنن.

البته اگه اساتيد فن اشتباهي از بنده ديدن (مثلا تو شكلها كه سعي كردم ساده اشن كنم) از تذكراتشون استقبال ميشه.

با تشكر.

Mehdi Asgari
سه شنبه 17 دی 1387, 12:58 عصر
تو برای اجرای دینامیک کد سی پلاس پلاس نیازمند ساپورت رانتایم هستی. (سی پلاس پلاس برخلاف پایتون و روبی و دات نت و جاوا و ... از حمایت رانتایم برخوردار نیست. (عل سریع بودن و مستقل از پلتفرم بودنش هم همینه))
سی پلاس پلاس خیلی سنگینه (به سی پلاس پلاس میگن گوریل 800 پوندی زبان های برنامه نویسی)
اون eval که تو میخوای (به فرم پایتون و لیسپ) وجود نداره ، ولی یه تلاش هایی در این زمینه شده: (نه به صورت eval ولی به صورت اسکریپتی کردن سی پلاس پلاس. نگاه کن شاید به دردت خورد)
http://www.codeproject.com/KB/cpp/Personal_C___Compiler.aspx
http://blog.davber.com/2007/01/29/scripting-in-python-ruby-perl-no-in-c/
http://blog.davber.com/2007/01/24/cpsh-10/
http://blog.davber.com/2006/08/28/cpsh-scripting-in-c/
http://blog.davber.com/2006/12/10/cpsh-a-windows-executable/

ilius.gnu
سه شنبه 17 دی 1387, 14:16 عصر
مرسی

حالا نمیشه خودش توی دو مرحله کامپایل کنه؟
شایدم بهتر باشه اون قسمتش رو با پایتون انجام بدم. یعنی توی اون برنامهٔ ++C با تابع system یه دستور خط فرمان رو اجرا کنم که چند خط کد پایتون رو تفسیر کنه و نتیجه رو برگردونه به اون برنامه ++C . ظاهرا چارهٔ دیگه‌ای نیست.

بالأخره خود کامپایلر(مثلاً gcc) هم با یه زبونی نوشته شوده دیگه(حالا C یا اسمبلی، فکر می‌کنم C). توی اون زبون هم که رشته(یا اشاره گر کاراکتر معنی داره) پس میتونستن یه کلمهٔ کلیدی(نه تابع معمولی) تعریف کنن به اسم مثلاً exec که کامپایلر وقتی به این کلمه میرسه، آرگومانش رو مثل یه رشتهٔ معمولی به یه تابع معمولی پاس نده، بلکه خود اون رشته رو بعنوان قسمتی از کد محسوب کنه. نمیشه؟

Mehdi Asgari
سه شنبه 17 دی 1387, 15:31 عصر
احتمالا زیاد از کامپایلر ها و نحوۀ کارشون سررشته نداری.
بگذریم
فکر می کنم نیاز به یه embedded scripting language داری. از Lua (http://www.lua.org/)استفاده کن (از پایتون هم می تونی ولی Lua ساده تر و کم حجم تره)

ilius.gnu
سه شنبه 17 دی 1387, 20:28 عصر
فکر می کنم نیاز به یه embedded scripting language داری. از Lua (http://www.lua.org/)استفاده کن (از پایتون هم می تونی ولی Lua ساده تر و کم حجم تره)
مرسی
راستی سوال برام پیش اومد که سریعترین زبان اسکریپتی چیه؟ همین Lua باید یکی از سریعترینشون باشه دیگه.
احتمالاً باید بشه از سورس یه زبان اسکریپتی ساده مثل Lua استفاده کردن برای parse کردن عبارت‌های خاص(مثلاً برای ماشین حساب مهندسی). یعنی فایلهای سورس Lua رو به برناممون لینک کنیم و برناممون خودشون یه جور مفسر بشه. میشه دیگه نه؟

ilius.gnu
سه شنبه 17 دی 1387, 21:02 عصر
سی پلاس پلاس برخلاف پایتون و روبی و دات نت و جاوا و ... از حمایت رانتایم برخوردار نیست. (عل سریع بودن و مستقل از پلتفرم بودنش هم همینه)
خداییش مستقل از پلتفرم بودنش قابل قبول نیست. جاوا (که کامپایلری-تفسیر هست) به مستقل از پلتفرم بودن معروفه. حتی پایتون هم از ++C بیشتر مستقل از پلتفرم هست(امکاناتش هم تقریباً با ++C برابری میکنه). به نظر من تنها مزیت C و ++C سرعتشون هست، که همین هم کافیه. به خاطر همین سرعت هم هست که اکثر اپلیکیشن‌ها با C و ++C نوشته میشن. و چون ++C سرعت و شیئ‌گرایی رو همزمان داره، به نظر من میشه ++C رو پادشاه زبانهای برنامه‌نویسی دونست(اینو بدون هیچ تعصبی میگم با اینکه خودم اکثر برنامه‌هام رو به پایتون می‌نویسم). اما دلیل نمیشه که از زبانهای دیگه استفاده نشه. چون به قول یکی از دوستان، زبانهای برنامه‌نویسی مثل آچار هستن، بستگی داره چیکار بخوای باهاش بکنی.
اما در خیلی موارد زبانهای اسکریپتی مثل پایتون بهتر عمل میکنن یا همون کارایی رو دارن(سرعت اجرا قایبل قبول هست) اما سرعت توسعه رو خیلی افزایش میدن.

linux
چهارشنبه 18 دی 1387, 01:12 صبح
خداییش مستقل از پلتفرم بودنش قابل قبول نیست. جاوا (که کامپایلری-تفسیر هست) به مستقل از پلتفرم بودن معروفه. حتی پایتون هم از ++C بیشتر مستقل از پلتفرم هست(امکاناتش هم تقریباً با ++C برابری میکنه). به نظر من تنها مزیت C و ++C سرعتشون هست، که همین هم کافیه. به خاطر همین سرعت هم هست که اکثر اپلیکیشن‌ها با C و ++C نوشته میشن. و چون ++C سرعت و شیئ‌گرایی رو همزمان داره، به نظر من میشه ++C رو پادشاه زبانهای برنامه‌نویسی دونست(اینو بدون هیچ تعصبی میگم با اینکه خودم اکثر برنامه‌هام رو به پایتون می‌نویسم). اما دلیل نمیشه که از زبانهای دیگه استفاده نشه. چون به قول یکی از دوستان، زبانهای برنامه‌نویسی مثل آچار هستن، بستگی داره چیکار بخوای باهاش بکنی.
اما در خیلی موارد زبانهای اسکریپتی مثل پایتون بهتر عمل میکنن یا همون کارایی رو دارن(سرعت اجرا قایبل قبول هست) اما سرعت توسعه رو خیلی افزایش میدن.
این پستها اینجا آرشیو می شه! نظر شما را 2-3 سال بعد باید پرسید.

ilius.gnu
چهارشنبه 18 دی 1387, 04:29 صبح
این پستها اینجا آرشیو می شه! نظر شما را 2-3 سال بعد باید پرسید.
منظورتون چیه؟
او...ه کو تا دو سه سال بعد. من همین الآن دارم از پایتون و ++C همزمان استفاده می‌کنم، اونم در پروژه‌های عملی.
http://ospdev.net/projects/glossary-pywork