کامپایلر Roslyn چیست و چه کاربردی دارد ؟
اگر ایده نو و خوب برای شروع کار دارید و میخواهید کسب و کارتان راتوسعه دهید و نمیدانید چگونه در دنیای دیجیتال وارد شوید پیشنهاد میکنم این لینک را کلیک کنید.
چندین دهه است که این دیدگاه به خوبی به ما خدمت کرده است، اما دیگر برای ما کافی نیست. ما به طور فزاینده به ویژگیهای محیط توسعه یکپارچه (IDE) مانند IntelliSense، ریفکتورینگ، تغییر نام هوشمند، “یافتن همه رفرنسها” و “Go to definition” متکی هستیم تا بهرهوری خود را افزایش دهیم. ما برای بهبود کیفیت کد و تولیدکنندگان کد برای کمک به ساخت برنامه به ابزارهای تحلیل کد متکی هستیم. هر چه این ابزارها هوشمندتر شوند، آنها نیاز به دسترسی بیشتر و بیشتر دانش عمیق کد دارند که فقط کامپایلرها در اختیار دارند. این مأموریت اصلی پروژه Roslyn است.
Roslyn چیست؟
سکوی کامپایلر دات نت یا Roslyn (با تلفظ «رازلین») بازنویسی مجدد کامپایلرهای VB.NET و #C توسط همین زبانها است. این سکوی کامپایلر به همراه یک سری کتابخانه و اسمبلی ارائه میشود که امکان آنالیز زبانهای مدیریت شده را به صورت مستقل و یا یکپارچهی با ویژوال استودیو، فراهم میکنند. برای نمونه در VS.NET 2015 تمام سرویسهای زبانهای موجود، با Roslyn API جایگزین و بازنویسی شدهاند. نمونههایی از این سرویسهای زبانها، شامل Intellisense و مرور کدها مانند go to references and definitions، به همراه امکانات Refactoring میشوند. به علاوه به کمک Roslyn میتوان یک کامپایلر و ابزارهای مرتبط با آن، مانند FxCop را تولید کرد و یا در نهایت یک فایل اسمبلی نهایی را از آن تحویل گرفت
چرا مایکروسافت Roslyn را تولید کرد؟
پیش از پروژهی Roslyn، کامپایلرهای VB.NET و #C با زبان ++C نوشته شده بودند؛ از این جهت که در اواخر دههی ۹۰ که کار تولید سکوی دات نت در حال انجام بود، هنوز امکانات کافی برای نوشتن این کامپایلرها با زبانهای مدیریت شده وجود نداشت و همچنین زبان محبوب کامپایلر نویسی در آن دوران نیز ++C بود. این انتخاب در دراز مدت مشکلاتی مانند کاهش انعطاف پذیری و productivity تیم کامپایلر نویس را با افزایش تعداد سطرهای کامپایلر نوشته شده به همراه داشت و افزودن ویژگیهای جدید را به زبانهای VB.NET و #C سختتر و سختتر کرده بود. همچنین در اینجا برنامه نویسهای تیم کامپایلر مدام مجبور بودند که بین زبانهای مدیریت شده و مدیریت نشده سوئیچ کنند و امکان استفادهی همزمان از زبانهایی را که در حال توسعهی آن هستند، نداشتند.
این مسایل سبب شدند تا در طی بیش از یک دهه، چندین نوع کامپایلر از صفر نوشته شوند:
– کامپایلرهای خط فرمانی مانند csc.exe و vbc.exe
– کامپایلر پشت صحنهی ویژوال استودیو (برای مثال کشیدن یک خط قرمز زیر مشکلات دستوری موجود)
– کامپایلر snippetها در immediate window ویژوال استودیو
هر کدام از این کامپایلرها هم برای حل مسایلی خاص طراحی شدهاند. کامپایلرهای خط فرمانی، با چندین فایل ورودی، به همراه ارائهی تعدادی زیادی خطا و اخطار کار میکنند. کامپایلر پشت صحنهی ویژوال استودیوهای تا پیش از نسخهی ۲۰۱۵، تنها با یک تک فایل در حال استفاده، کار میکند و همچنین باید به خطاهای رخ داده نیز مقاوم باشد و بیش از اندازه گزارش خطا ندهد. برای مثال زمانیکه کاربر در حالت تایپ یک سطر است، بدیهی است تا اتمام کار، این سطر فاقد ارزش دستوری صحیحی است و کامپایلر باید به این مساله دقت داشته باشد و یا کامپایلر snippetها تنها جهت ارزیابی یک تک سطر از دستورات وارد شده، طراحی شدهاست.
با توجه به این مسایل، مایکروسافت از بازنویسی سکوی کامپایلر دات نت این اهداف را دنبال میکند:
– بالا بردن سرعت افزودن قابلیتهای جدید به زبانهای موجود
– سبک کردن حجم کاری کامپایلر نویسی و کاهش تعداد آنها به یک مورد
– بالا بردن دسترسی پذیری به API کامپایلرها
برای مثال اکنون برنامه نویسها بجای اینکه یک فایل cs را به کامپایلر csc.exe ارائه کنند و یک خروجی باینری دریافت کنند، امکان دسترسی به syntax trees، semantic analysis و تمام مسایل پشت صحنهی یک کامپایلر را دارند.
– ساده سازی تولید افزونههای مرتبط با زبانهای مدیریت شده.
اکنون برای تولید یک آنالیز کنندهی سفارشی، نیازی نیست هر توسعه دهندهای شروع به نوشتن امکانات پایهای یک کامپایلر کند. این امکانات به صورت یک API عمومی در دسترس برنامه نویسها قرار گرفتهاند.
مأموریت اصلی پروژه Roslyn
وظیفه اصلی پروژه Roslyn باز کردن جعبههای سیاه و اجازه دادن به ابزارها و کاربران نهایی برای اشتراکگذاری اطلاعات باارزشی که کامپایلرها در مورد کد ما دارند میباشد. از طریق پروژه Roslyn کامپایلرها تبدیل به سرویسها میشوند. APIهایی که میتوانید برای کدهای مربوط به وظایفی در ابزارها و برنامههای خود استفاده کنید.
انتقال به کامپایلرها به عنوان سرویسها، جلوگیری از ورود برای ایجاد برنامهها و ابزارهای متمرکز کد را کاهش میدهد. این امر فرصتهای بسیاری برای نوآوری در زمینههایی مانند برنامهنویسی متا، تولید کد و تبدیل، استفاده تعاملی از زبانهای C# و VB، و تعبیه C# و VB در حوزه زبانهای خاص را ایجاد میکند.
سورس کد Roslyn از طریق یک ریپازیتوری در گیتهاب در دسترس است، که به شما اجازه میدهد نحوه کار آن را مشاهده کنید و در صورت بروز خطا، آن را به توسعهدهندگان گزارش دهید.
کار با Workspace
لایه Services نقطه شروع برای انجام تحلیل کد و ریفکتورینگ کل سولوشن است. در این لایه، Workspace API به شما کمک میکند تا تمام اطلاعات مربوط به پروژهها را در یک سولوشن در یک مدل آبجکت واحد سازماندهی کنید، و به شما امکان دسترسی مستقیم به مدلهای آبجکت لایه کامپایلر مانند متن سورس، درختهای سینتکس، مدلهای semantic را بدون نیاز به تجزیه فایلها، پیکربندی گزینهها یا مدیریت وابستگیهای درون پروژهای ارائه میدهد.
محیط میزبان، مثل IDE، workspaceای را برای شما مرتبط با سولوشن باز ارائه میدهد. همچنین استفاده از این مدل خارج از IDE توسط بارگذاری ساده یک فایل سولوشن امکانپذیر است.
کار با Editor Services
APIهای سرویس و کامپایلر برای تجزیه کد و دستکاری کد کافی هستند. با این حال، در بسیاری از سناریوها، شما ممکن است بخواهید یک extension را برای ویژوال استودیو ایجاد کنید یا یک ویژگی موجود در IDE را تقویت کنید. Editor Services APIها به شما امکان میدهند تا منطق تحلیل کد خود را به راحتی با ویژگیهای ویژوال استودیو مثل IntelliSense، تگهای هوشمند، و مواردی برای خطاها متصل کنید.
Editor Services APIs وابسته به ویرایشگر متن Editor Services APIs است.