(21-06-1394، 12:55 ق.ظ)YN97 نوشته: ۱-وقتی برنامه های سی کامپایل میشوند مستقیما به زبان ماشین تبدیل می شوند؟ و همین طور برنامه هایی که با سی++ نوشته شدند؟ درسته؟
آره ولی این برنامه ها اکثرا بر کتابخانه ها و سرویسهای ارائه شده سیستم عامل هم متکی هستن اینطور نیست همه کار رو خودشون به تنهایی انجام بدن.
نقل قول:خب در این صورت برنامه ای که با gcc روی یک سیستم کامپایل شده نباید روی یکی دیگه با سخت افزار متفاوت اجرا شود.
نمیشه خب.
البته بعضی کامپایلرها مثل gcc میتونن برنامه رو برای چند نوع سخت افزار کامپایل کنن. یعنی کد Native پردازنده های مختلف رو تولید کنن.
ضمنا با محیطهای مجازی ساز و شبیه ساز و اینا هم طبیعتا میشه برنامه های یک پلتفرم رو روی یک پلتفرم دیگه اجرا کرد.
نقل قول:اگر جواب سوال اول منفی باشد پس باید برنامه ای که در محیط گنو لینوکس کامپایل شده روی ویندوز هم اجرا شود. ولی نمیشه چرا ؟
خب توی فایل اجرایی برنامه ها فقط یکسری کد ماشین پردازندهء مورد نظر نیست بلکه یکسری ساختمان داده ها و اطلاعات دیگر هم معمولا هست که توسط سیستم عامل برای اجرای صحیح و مدیریت اون برنامه استفاده میشه. فرمت فایلهای اجرایی و نوع و شکل اطلاعات موجود در اونا و مثلا حتی روش فراخوانی توابع در سطح پایین و استفاده از کتابخانه های دینامیک از سیستم عامل به سیستم عامل تفاوت میکنه. ضمنا مسئلهء متکی بودن برنامه ها بر کتابخانه ها و سرویسهای سیستم عامل رو هم قبلا گفتم. مثلا وقتی برنامه داره از کتابخانهء سی لینوکس استفاده میکنه، درسته ویندوز هم کتابخانهء سی داره ولی یکسری جزییات و فرمت های اینا با هم متفاوت هست و همچنین نامگذاری ها، تعداد و نوع و شکل و ترتیب پارامترها و غیره (حالا اگر فقط از امکانات کتابخانه های استاندارد یک زبان استفاده کرده باشید امکان سازگاری بیشتره). کتابخانه های گرافیک و شتاب دهنده و سرویسهای سیستم عامل مثل سیستم فایل و غیره و غیره. شما حساب کن اینقدر تفاوت هست و اتکا بر ویژگیهای هر سیستم عامل، بنابراین نمیشه انتظار داشت یه برنامهء لینوکس همینطور و به این راحتی روی ویندوز هم بشه بدون شبیه سازی چیزی اجرا کرد. ولی ساده ترین برنامه ها رو که درشون از کتابخانه ها و سرویسهای و ساختار سیستم عامل خاصی استفاده نشه شاید بشه با کمی تغییرات و تنظیم و آماده سازی یا تبدیل به فرمت فایل اجرایی سیستم عامل مقصد، اجرا کرد.
نقل قول:برنامه های جاوا که با کامپایلر جاوای گنو کامپایل میشوند چطور؟ اصلا منظور از native چیست؟ یعنی به چی تبدیل میشوند؟
در این مورد اطلاعات در منابع زیاد هست مهندس شهرکی هم توضیح دادن.
البته با توجه به اینکه من به وراجی علاقه دارم بازم توضیح میدم
خب توی یه فایل اجرایی Native کدهایی که هست دستوراتی هست که پردازنده مستقیما میفهمه. حالا بحث اطلاعات جانبی مورد استفاده سیستم عامل و کتابخانه ها و سرویس های سیستم عامل و اینها به کنار. اونا جزییات و پیچیدگی های خاص خودش رو داره. مثلا ممکنه سیستم عامل قبل از اینکه برنامه بتونه اجرا بشه بیاد و یکسری محتویات اون رو تغییراتی بده کدهایی رو اضافه کنه جایگزین کنه و غیره، که برنامه برای اجرا روی CPU تحت اون سیستم عامل آماده بشه.
برنامه های جاوا و امثالهم هم که حاوی کدهای یک زبان میانی یا ماشین مجازی هستن یا در زمان اجرا به کدهای ماشین مبداء تبدیل میشن یا مستقیما توسط یک مفسر یا ماشین مجازی اجرا میشن؛ بهرحال همینطور مستقیم نمیتونن به سیستم عامل و پردازنده داده بشن برای اجرا.