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 غفلت کرد که مسیری همانند این دو زبان را در پیش دارند.
موفق باشید