۱۳۹۰/۰۶/۲۹

خلاصه‌اي كوتاه در مورد WinRT


WinRT چيست؟

مايكروسافت جهت سهولت توليد برنامه‌هاي جديد Metro-style ، لمسي (touch-centric) و tablets ويندوز 8 ، اقدام به بازنويسي مجدد Windows-API كرده و نام آن‌را WinRT گذاشته است. بنابراين همانند آنچه كه در مورد API‌ ويندوز از روز اول پيدايش آن مرسوم بوده، اين API جديد، از نوع native (نوشته شده با CPP) مي‌باشد و با كمك دات نت فريم ورك تهيه نشده است. اين API جديد مبتني بر فناوري قديمي COM است، بنابراين مطابق معمول توسط هر نوع برنامه‌ و سيستمي در ويندوز قابل دسترسي است. تفاوتي نمي‌كند كه CPP يا دلفي باشد يا دات نت. به صورت خلاصه ويندوز 8 دو طراحي جديد (WinRT) و قديم (Win32 API) را با هم پشتيباني مي‌كند. اگر آن‌را صحيح‌تر بخواهيم معرفي كنيم، WinRT درحقيقت محصور كننده‌ي (Wrapper) همان Win32 API سابق است (در پشت صحنه همان dll هاي سابق ويندوز را بارگذاري و استفاده مي‌كند) جهت تطابق با نيازهاي دهه اخير و سال‌هاي پيش رو.


سازگاري دات نت فريم ورك با WinRT چگونه است؟

اينبار WinRT برخلاف Win32 API (كه در زمان ارائه آن اصلا دات نتي در كار نبود)، جهت سازگاري با دات نت طراحي شده است. اين طراحي جديد ILDasm metadata را در اختيار برنامه نويس‌هاي دات نت قرار مي‌دهد و به اين ترتيب IntelliSense و قابليت‌هاي Debugging ويژوال استوديو همانند كدهاي مديريت شده‌ي دات نت جهت برنامه نويسي مبتني بر WinRT در اختيار برنامه نويس‌ها خواهد بود (فرمت ارائه شده، ECMA 335 metadata format مي‌باشد). همچنين اشياء COM متعلق به WinRT به خوبي توسط GC (آشغال جمع كن) دات نت جهت مديريت بهتر حافظه، تحت نظر مي‌باشند.
بنابراين از ديدگاه يك برنامه نويس دات نت، كل WinRT به صورت managed assemblies مشاهده مي‌شود، اينترفيس‌هاي آن همان اينترفيس‌هاي دات نتي خواهند بود و كلاس‌هاي آن نيز به همين ترتيب. اين مشكلي بود/هست كه با Win32 API در دات نت وجود دارد و دسترسي به آن به اين سادگي و يكپارچگي ميسر نيست (هر چند تا الان كل اينترفيس آن جهت استفاده در دات نت نيز ترجمه شده است). در اينجا شما ارجاعاتي را به فايل‌هايي با پسوند winmd يا windows metadata، به پروژه‌ي دات نتي خود اضافه مي‌كنيد و سپس CLR قادر خواهد بود تا كليه اطلاعات لازم جهت كار با WinRT را از آن‌ها استخراج كند (اين فايل‌ها در پوشه C:\Program Files (x86)\Windows Kits\8.0\Windows Metadata و C:\Windows\system32\winmetadat ويندوز 8 قابل مشاهده و دسترسي هستند).


تفاوت‌هاي مهم امكانات نمايشي WinRT با Win32 API كدامند؟

تفاوت مهم WinRT با Win32 API از ديدگاه برنامه نويس‌ها، امكان دسترسي بيشتر به آن از طريق زبان‌هاي مختلف مي‌باشد. WinRT همانند Win32 API توسط CPP ، دات نت و ساير روش‌هاي مرسوم ديگر قابل دسترسي و توسعه است. اما اينبار WinRT برخلاف Win32 API ، از طريق HTML و جاوا اسكريپت هم قابل توسعه است. در اين حالت كدهاي شما توسط Chakra JavaScript engine كه از اينترنت اكسپلورر 9 به بعد ارائه شده، اجرا خواهد شد. بنابراين «برفراز» WinRT دو لايه نمايشي (presentation layer) قابل طراحي و دسترسي است. XAML و زبان‌هاي متداول برنامه نويسي موجود مانند سي شارپ و وي بي دات نت و غيره. همچنين HTML/CSS هم مجال ابراز وجود يافته است. البته XAML تنها لايه نمايشي كليه زبان‌هاي قديمي موجود مانند سي شارپ، وي بي دات نت، CPP و غيره خواهد بود. به همين جهت Expression Blend جديد نيز از HTML 5 پشتيباني مي‌كند.
همچنين در WinRT ، قسمت‌هاي GDI و Message loop متداول Win32 API حذف شده است و از DirectX استفاده مي‌كند. براي نمونه كدهاي XAML شما توسط DirectX رندر مي‌شود. البته اين مطلب جديدي نيست و از زمان ارائه WPF شاهد اين مساله بوده‌ايم.


وضعيت توسعه پذيري WinRT  چگونه است؟

علاوه بر اين‌ها، برخلاف Win32 API ، اينبار WinRT قابل توسعه است و Extensions SDK براي آن ارائه شده است.


آيا WinRT شاهد تغييرات امنيتي خاصي هم بوده است؟

نكته‌ي مهمي كه در طراحي WinRT به آن توجه شده است، امنيت مي‌باشد. برنامه‌هاي WinRT شبيه به برنامه‌هاي سيلورلايت در يك Sandbox اجرا مي‌شوند. به اين معنا كه جهت ذخيره سازي اطلاعات خود از يك isolated storage استفاده مي‌كنند. براي كار با file system نياز به تائيد كاربر دارند و خلاصه ديگر به سادگي نمي‌توان از مرزهاي اين نوع برنامه‌ها رد شد و سيستم عاملي را root كرد. براي نمونه برنامه نويس‌هاي دات نت دسترسي به فضاي نام System.IO.FileStream را ديگر نخواهند داشت و تنها قسمتي از دات نت «برفراز» WinRT و مدل امنيتي جديد آن معنا پيدا مي‌كند. همچنين برفراز اين API جديد، توليد مثلا Device drivers هم ديگر معنا پيدا نمي‌كند. اين محدوديت‌هاي امنيتي براي برنامه‌ نويس‌هاي native هم وجود دارد و تفاوتي نمي‌كند. كلا برنامه‌هاي جديد Metro-style در يك قرنطينه‌ي كامل امنيتي اجرا مي‌شوند. براي مثال اگر برنامه‌اي نياز به دسترسي به يك WebCam را داشته باشد، همانند برنامه‌هاي سيلورلايت ابتدا بايد كاربر تائيد كرده و سپس برنامه مجوز امنيتي كار با مثلا يك WebCam را خواهد يافت. همچنين تمام برنامه‌هاي جديد Metro-style بايد جهت ارائه در فروشگاه جديد ويندوز 8، داراي امضاي ديجيتال معتبر نيز باشند.


آيا جهت توسعه‌ي برنامه‌هاي چندريسماني و غيرهمزمان تمهيدات خاصي در WinRT پيش‌بيني شده است؟

در طراحي جديد WinRT به اعمال asynchronous به شدت توجه شده است. هر عملي كه بيش از 50 ميلي ثانيه طول بكشد به صورت خودكار تبديل به يك عمل asynchronous خواهد شد تا برنامه‌ها مرتبا در حين اجراي اعمال زمانبر هنگ نكرده و ترد اصلي برنامه را بلاك نكنند. علاوه بر اين‌ها WinRT از طريق IAsyncOperation interface خود، امكان استفاده از واژه‌هاي جديد كليدي async/await سي شارپ 5 را نيز مهيا مي‌سازد.


آيا WinRT آمده است تا جايگزيني براي دات نت و سيلورلايت و امثال آن باشد؟

خير. WinRT نگارش دوم Win32 API است با هدف توسعه پذيري، استفاده از دايركت ايكس و فناوري‌هاي جديد كه عموما از شتاب دهنده‌هاي سخت افزاري هم بهره‌مند هستند بجاي GDI سابق، استفاده ساده‌تر در زبان‌هاي ديگر به كمك فايل‌هاي استاندارد Windows Meta data آن مي‌باشد. همچنين اين API جديد دسترسي به امكانات ويندوز را هم توسط HTML و جاوا اسكريپت، علاوه بر امكانات مهياي سابق ميسر ساخته است. هم اكنون نگارش 4 و نيم دات نت در ويندوز 8 ارائه شده است و توسط هر دو سيستم سابق و جديد قابل استفاده مي‌باشد. البته بايد در نظر داشت كه جهت استفاده از WinRT به دلايل محدوديت‌هاي امنيتي اعمال شده به آن و همچنين استفاده از XAML به تنها عنوان لايه نمايشي سيستم‌هاي متداول غير HTML ايي، دات نت فريم ورك به امكانات و كلاس‌هاي كمتري نسبت به حالت متداول كار با آن، دسترسي دارد (جهت درك بهتر اين محدوديت‌ها مي‌توان به طراحي سيلورلايت مراجعه كرد). اين را هم بايد اضافه كرد كه ويندوز 8 توانايي اجراي هر دو نوع برنامه‌هاي سبك جديد مترو و متداول دسكتاپ قديمي را دارا است.


جهت آشنايي بيشتر با WinRT مي‌توان به مجموعه‌اي از ويديوهاي مرتبط آن مراجعه كرد:
http://channel9.msdn.com/Events/BUILD/BUILD2011?t=windows%2Bruntime