رزلین (به انگلیسی: Roslyn) مجموعه‌ای از کامپایلرهای متن‌باز و رابط‌های برنامه‌نویسی کاربردی یا ای‌پی‌آی (به انگلیسی: Application Programming Interface به اختصار API) برای تحلیل برنامه‌هایی به زبان #C و Visual Basic .NET است و توسط مایکروسافت ارائه شده‌است.

این پروژه به‌طور خاص شامل نسخه‌های self-hosting کامپایلرهای #C و VB.NET است. کامپایلرها از طریق برنامه‌های خط فرمان (به انگلیسی: command-line) در دسترس هستند اما همچنین به عنوان APIهایی به زبان .NET هم در دسترس هستند. Roslyn ماژول‌هایی را برای تجزیه و تحلیل نحوی (واژگانی)، تحلیل معنایی، تدوین پویا به زبان میانی مشترک (به انگلیسی: Common Intermediate Language، به اختصار CIL) و انتشار کد در معرض دید قرار می‌دهد.

تاریخچه
-------

نام "رزلین" اولین بار توسط اریک لیپرت (مهندس سابق مایکروسافت) در پستی که برای استخدام توسعه دهندگان برای یک پروژه جدید منتشر کرد، نوشته شد. او ابتدا گفت که اصل این نام به خاطر رزلین، واشنگتن بوده است، اما بعداً او در پستی با کنایه درباره "چشم انداز شمالی" (به انگلیسی: Northern Exposure) دفتر کارش صحبت کرد. شهر روزلین یکی از مکان‌هایی بود که مجموعه تلویزیونی *Northern Exposure* در آن فیلمبرداری شد.

مایکروسافت پیش نمایش فناوری جامعه (به انگلیسی: *community technology preview*, به اختصار CTP) را در اکتبر 2011 برای بارگیری عمومی در دسترس قرار داد. این نسخه به عنوان افزونه Visual Studio 2010 SP1 نصب شد.

CTP در سپتامبر 2012 به روزرسانی شد تا شامل بسیاری از به روزرسانی‌های API های رزلین که در CTP های ژوئن 2012 و اکتبر 2011 معرفی شده اند, باشد. در حالی که CTP API ژوئن 2012 برای کامپایلرها کامل است، اما همه ویژگی ها برای زبان های #C و VB.NET اجرا نشده است.

در کنفرانس Build 2014 در سانفرانسیسکو در آوریل 2014، مایکروسافت پروژه "رزلین" را متن باز (به انگلیسی: open-source) کرد و پیش نمایش یکپارچه سازی زبان را برای Visual Studio 2013 منتشر کرد. از 3 آوریل 2014، رزلین تحت مجوز Apache License 2.0 است. سپس پروژه به نظارت بنیاد تازه تأسیس .NET منتقل شد. در همان کنفرانس ، Xamarin اعلام کرد که آنها در حال کار روی یکپارچه سازی کامپایلرها و ابزارهای جدید در Xamarin Studio هستند.

در این نسخه کامپایلرها از نظر ویژگی کامل نبودند. هر یک از کامپایلرها حاوی ویژگی‌هایی است که برای نسخه های بعدی زبان (C# 6 و Visual Basic.NET 14) برنامه ریزی شده است. و API ها از طریق مدیر بسته NuGet نیز در دسترس هستند.

اولین نسخه RTM برای رزلین با Visual Studio 2015 ارائه شد. رزلین در حال حاضر فقط از VB و #C پشتیبانی می‌کند و کامپایلرها به زبان‌های مربوط به آن‌ها نوشته شده‌اند.

در ژانویه 2015، مایکروسافت کد منبع رزلین را از CodePlex به GitHub منتقل کرد.

معماری
------

معمولاً کامپایلرها یک جعبه سیاه برای توسعه دهندگان برنامه‌ها بوده اند. با افزایش پیچیدگی و نیاز برای تجزیه و تحلیل کد منبع در محیط های توسعه یکپارچه مدرن (به انگلیسی: integrated development environments، به اختصار IDE), کامپایلرها نیاز دارند که رابط‌های برنامه نویسی برنامه (API) را ارائه دهند که به توسعه دهندگان کمک کند تا مراحل تدوین از قبیل تجزیه و تحلیل ساختار واژگانی و نحوی کد منبع را انجام دهند. رزلین از همان ابتدا با همین هدف طراحی شده است. این موضوع, موانع موجود در ابزارهایی را که برای تجزیه و تحلیل کد منبع طراحی شده‌اند را کاهش می‌دهد.

APIهای رزلین سه نوع هستند: APIهای ویژگی، APIهای فضای کار و APIهای کامپایلر.

APIهای ویژگی به توسعه دهندگان ابزار کد منبع اجازه می‌دهد تا اصلاح کد را انجام دهند.

APIهای فضای کار به توسعه دهندگان پلاگین اجازه می‌دهد اقدامات خاصی را که در محیط توسعه یکپارچه (IDE) مانند Visual Studio مورد نیاز است مانند پیدا کردن منابع از یک متغیر یا قالب بندی کد، انجام دهند.

API های کامپایلر با قرار دادن فراخوانی‌های مستقیم برای ایجاد درخت نحو و تجزیه و تحلیل جریان اتصال، تجزیه و تحلیل پیچیده تری از کد منبع را امکان پذیر می‌کند.

امکانات
-------

برجسته‌ترین ویژگی‌های اصلی Roslyn عبارتند از:

* کامپایلرهای زبان‌های #C و Visual Basic .NET از طریق APIهایی ارائه می‌شوند.
* وجود APIها برای تجزیه و تحلیل کد و بازسازی.

صفحات مرتبط
-----------

* List of compilers
* Phoenix (compiler framework)

منابع
-----


1. ↑  "C# and Visual Basic - Use Roslyn to Write a Live Code Analyzer for Your API". *msdn.microsoft.com*. Retrieved 2019-01-07.
2. ↑  .NET Compiler Platform ("Roslyn") on GitHub
3. ↑  Neil McAllister, Microsoft's Roslyn: Reinventing the compiler as we know it, *DEVELOPER\_WORLD*, 2011-10-20