نمایش نتایج 1 تا 9 از 9

نام تاپیک: سوال پایه ای در مورد مفهوم کد مستقل از پلتفرم

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    نقل قول نوشته شده توسط bita_naz مشاهده تاپیک
    سلام دوستان
    علیک!
    نقل قول نوشته شده توسط bita_naz مشاهده تاپیک
    لطفا به این سوال من نخندید و مسخره نکنید. چون من تازه سال دومم
    قطعا طلب علم موجب تمسخر نخواهد بود
    نقل قول نوشته شده توسط bita_naz مشاهده تاپیک
    وقتی صحبت از کد native می کنیم مگر منظورمون همون کدهای صفر و یک قابل درک واسه کامپوتر نیست؟
    اوهوم
    نقل قول نوشته شده توسط bita_naz مشاهده تاپیک
    پس آیا هنگام اجرای چنین کدهایی بازم باید کامپایلر روی سیستم هدف نصب باشه ؟؟
    طبیعتا خیر
    نقل قول نوشته شده توسط bita_naz مشاهده تاپیک
    و اگر کد صفر و یک هست دیگه چه فرقی داره سیستم عامل چیه؟؟
    بحث اینه که اون کامپایلر عزیز اون صفر و یکا رو چجوری داخل فایل محترم اجرایی نوشته تا سیستم عامل بتونه به یه ترتیب مشخص اونها رو تو حافظه لود کنه. علاوه بر این برنامه ها در عمل مرتب دارن فانکشنهایی از سیستم عامل رو صدا میکنن که همین مساله هم موجب بستگی برنامه به او اس میشه
    نقل قول نوشته شده توسط bita_naz مشاهده تاپیک
    اینکه می گیم بعضی از زبانها مثل C#‎ یا جاوا مستقل از پلتفرم هستند آیا به این معنی هستش که کامپایلر هونا روی هر سیستمی نصب می شه ؟؟
    خیر. اینها یه محیز مجازی برای برنامه های ایجاد میکنن که در مورد جاوا تقریبا همه جا نصبه و در مورد دات نت عمو بیلی فقط رو ویندوز ازش پشتیبانی میکنه؛ گرچه لینوکسیا یه پروژه به اسم مونو واسه پورت کردن دات نت رو لینوکس راه انداختن.
    نقل قول نوشته شده توسط bita_naz مشاهده تاپیک
    آیا این همون بستگی داشتن Runtime هستش؟؟
    ؟؟؟
    نقل قول نوشته شده توسط bita_naz مشاهده تاپیک
    و در آخر اینکه کد بایتهای جاوا , کد های IL ماکروسافت و کدهای Native همه در فایلی با پسوند exe هستن. پس چطور سیستم عامل متوجه تفاوت اونا میشه؟؟
    بازم ؟؟؟

  2. #2
    native در لغت به معنی بومی هست که در هر جا معانی خود را دارد.
    وقتی در مورد برنامه نویسی در سطح سیستم عامل صحبت می شود معمولا native به کد هایی می گویند که خود سیستم عامل بر مبنای آن پیاده سازی شده است و بالاترین performance یا کارآیی را برای ارتباط با سخت افزار نسبت به سایر روش ها دارد.(به این مورد platform-specific native APIs می گویند)

    ولی در بحث مستقل از پلتفرم ، بله به کد صفر و یک که زبان ماشین می نامند و آن را native machine language در سیستم مورد نظر نیز می گویند که به دلیل حضور معماری سخت افزاری مختلف و پردازنده های مختلف با هم متفاوت هستند، پس نباید native در این مورد را با مورد قبل اشتباه بگیرید.

    کدهای EXE درست هست که به زبان ماشین تبدیل می شود ولی وابسته به پلتفرم یا همان سیستم عامل هست، چرا که بسیاری از کارها برای سهولت در توسعه به صورت run-time از طریق کتابخانه های آن سیستم عامل و یا مثلا در ویندوز از dll های مختص به ویندوز فراهم می شود (که به طور معمول آن ها هم به زبان ماشین ترجمه شده اند) و ضمنا بهینه سازی ها بر روی کدها را نیز نباید فراموش کرد و اینکه هر فایلی با پسوند EXE قرار نیست دارای یک محتویات مشخص باشد و حتما روی ویندوز اجرا شود، مانند فایل های EXE ساخته شده برای گوشی های ویندوز موبایل و CE که در ویندوز دسکتاب اجرا نمی شوند. به همین دلایل هست که در سایر سیستم عامل ها و دستگاه ها فرمت های اجرایی مختلفی و مختص آن وجود دارد.

    در مورد کد های مدیریت شده ، .Net Framework شامل دو جزء اصلی هست:
    1- common language runtime یا همان CLR
    .NET Framework class library - 2

    CLR بخشی هست که اعمالی مثل مدیریت حافظه ، اجرای کد ها و thread ها ، حفظ امنیت کدها و کامپایل آن ها و سایر سرویس های سیستمی را انجام می دهد.

    class library همان بخش اصلی .Net برای تولید نرم افزار ها با رابط گرافیکی کاربری (GUI) ، نوشتن برنامه های کنسول ، XML ، ASP.NET و غیره هست.

    وقتی گفته می شود کدهای مدیریت شده مستقل از پلتفرم هست یعنی اینکه هر جایی که CLR وجود داشته باشد امکان اجرای آن وجود دارد، به این شکل:
    ابتدا آن ها باید به زبان میانی مایکروسافت (MSIL) کامپایل شوند و سپس در هنگام اجرا از طریق کامپایلر JIT / just-in-time به کد های Native سیستمی ترجمه شوند که کدهایی مختص CPU هستند و از آنجایی که CLR از طریق کامپایلر JIT همه پردازنده ها را پشتیبانی و پیاده سازی کرده است پس می توانید برنامه هایی بنویسید که در همه کامپیوترها با ساختار معماری مختلف اجرا شود.

    اما این موضوع مهمی است که تا کنون درهمین حد تبلیغاتی باقی مانده است، چرا که اگر در کدهای مدیریت شده از API های Native سیستم عامل یا کتابخانه های مختص آن سیستم عامل استفاده کنید (از جمله class library .NET که چاره ای نیست و باید از آن ها استفاده کرد) لذا برنامه مدیریت شده فقط در همان سیستم عامل قابل اجرا شدن می باشد و تنها راهی که وجود دارد این است که همه شرکت ها یک لیسانس از مایکروسافت با هزینه های بسیار بالا برای کتابخانه های .Net دریافت کنند تا برنامه های نوشته شده در ویندوز که از همان class library استفاده کرده است بتواند در سایر کامپایلرها نیز اجرا و یا کامپایل شود که تا کنون شرکتی این کار را نکرده است و فقط برخی از شرکت ها به شبیه سازی آن اقدام کرده اند.

    توجه کنید که CLR و C#‎ استاندارد جهانی هستند و نیاز به خرید ندارند و هر کسی با دریافت استاندارد ها، می تواند کامپایلر آن را پیاده سازی کند ویا حتی زبان خود را نیز مبتنی بر CLR ارائه کند تا از قابلیت های دات نت بهره مند شود. پس بخش مشکل ساز، بخش class library می باشد که تا کنون مختص ویندوز بوده است.

    در مورد Java هم وضع تقریبا به همین شکل هست اما با آزادی بیشتر، یعنی اینکه کدهای شما به کدهای میانی (کد بایت) تبدیل می شوند و هر جا که java Runtime یا مثلا ماشین مجازی جاوا وجود داشته باشد برنامه شما می تواند اجرا شود چون که کدهای میانی شما در حین اجرا باید خط به خط به زبان قابل فهم سیستم ترجمه و تفسیر شوند.

    در مورد C و ++C هم به همین شکل که اگر همانند کدهای مدیریت شده از API های Native سیستم عامل استفاده نکنند، با طراحی کامپایلر آن به عنوان یک زبان مستقل از پلتفرم هستند، اما با یک تفاوت اساسی نسبت به سایر زبان ها:
    این تفاوت که از همان ابتدا استاندارد و دردسترس همگان بودند و وابسته به کتابخانه های تغییر پذیر مثل کتابخانه های .NET نیز نبودند، لذا با توجه به محبوبیت آن ها با حضور کتابخانه های Cross-platform می توان از API های Native هر سیستم عامل به دلیل ثبات بالای آن ها و البته با درجه اعتماد بالایی استفاده کرد.

    پس با توجه به این مطالب در حال حاضر Java و ++C را می توان پرکاربردترین و مهم ترین ابزار مستقل از پلتفرم مطرح کرد، آن هم به دلیل حضور چشمگیر در سایر ابزارها و پلتفرم های نرم افزاری و سخت افزاری.
    هر چند که در این بین نباید از سایر زبان ها از جمله python غفلت کرد که مسیری همانند این دو زبان را در پیش دارند.

    موفق باشید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •