
آموزش توسعه Source Generator ها در سی شارپ 10
آموزش توسعه Source Generator ها در سی شارپ 10 یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته آموزشی، آموزش توسعه دادن Source Generator ها در سی شارپ 10 است که با نام اصلی Developing Source Generators in C# 10 از شرکت Pluralsight منتشر شده است.
بررسی Source Generator ها
یک Source Generator کمک می کند تا بتوانید کدهایی را مازاد بر کدهایی که خودتان ایجاد کرده اید تولید کنید. قابلیت Source Generator ها بخشی از .NET Compiler Platform SDK می باشند. همانطور که گفته شد استفاده کردن از Source Generator ها به برنامه نویسان سی شارپ کمک میکند تا کدهای نوشته شده را در زمان کامپایل شدن مورد استفاده قرار داده و از آن ها برای ایجاد شدن کدهای بیشتر استفاده کنند. استفاده کردن از Source Generator ها کمک می کند تا فایلهای کد جدید در زمان کامپایل شدن کدهای نوشته شده توسط برنامه نویس ایجاد بگردند. این موضوع در زمان کامپایل شدن برنامه اتفاق می افتد. به عبارت دیگر، یک Source Generator کدهای نوشته شده توسط برنامه نویس را بررسی کرده و دقیقاً در زمان کامپایل شدن پروژه، کدهای جدید را تولید می کند. نهایتاً، کد های تولید شده در کنار کد های نوشته شده توسط برنامه نویس قرار گرفته و پروژه مورد نظر کامپایل می شود.
یک Source Generator یک کامپوننت جدید است که برنامه نویس می تواند از آن به منظور بازیابی کردن یک compilation object که شامل تمامی کد های نوشته شده توسط برنامه نویس می باشد استفاده کند. با استفاده کردن از این object میتوانید با syntax model و semantic model مربوط به کدی که در حال کامپایل شدن است کار کنید. این موضوع دقيقاً در analyzer ها نیز اتفاق می افتد.
استفاده کردن از Source Generator ها کمک می کند تا بتوانید کد های مازاد را به عنوان ورودی به روال کامپایل شدن برنامه وارد کنید. این موضوع باعث می شود تا بتوانید کدهای نوشته شده توسط برنامه نویس را به همراه metadata هایی که کامپایلر در روال کامپایل کردن ایجاد می کند ترکیب کنید. پس از انجام این کار، کد های تولید شده در همان روال کامپایل یکسان که از قبل در حال اجرا شدن بوده است وارد و یا emit می شود.

اگر با Roslyn Analyzer ها آشنا هستید می توانید به Source Generator ها نیز شبیه به Roslyn Analyzer هایی فکر کنید که کدهای زبان سی شارپ را emit می کنند. روال تولید شدن کدها به عنوان فازی از روال compilation که در تصویر زیر نشان داده شده است اجرا می گردد. یک Source Generator در واقع یک اسمبلی ایجاد شده بر اساس .NET Standard است که توسط کامپایلر در کنار دیگر analyzer ها بارگذاری می شود.
بنابراین، امکان استفاده کردن از Source Generator ها در تمامی environment هایی که از کامپوننت های .NET Standard استفاده می کنند وجود دارد.
کاربرد Source Generator در پروژههای پیشرفته C#
Source Generator در C# 10 به توسعهدهندگان امکان میدهد بخشی از کدهای مورد نیاز برنامه را هنگام کامپایل و بر اساس کدهای موجود تولید کنند. این قابلیت برای کاهش کدنویسی تکراری و خودکارسازی تولید ساختارهای مشخص در پروژههای بزرگ کاربرد دارد. بهجای نوشتن دستی کدهای مشابه در چندین بخش برنامه، میتوان منطق تولید آنها را در یک Source Generator پیادهسازی کرد تا فرایند توسعه منظمتر و نگهداری کد سادهتر شود.
استفاده از Source Generator بهخصوص زمانی مفید است که یک الگوی مشخص باید در کلاسها یا بخشهای مختلف برنامه تکرار شود. برای مثال، تولید کدهای کمکی بر اساس ساختار کلاسها یا ویژگیهای تعریفشده در کد منبع میتواند از کارهای دستی و احتمال خطا بکاهد. البته طراحی چنین ابزاری به شناخت فرایند کامپایل و ساختار کدهای C# نیاز دارد. انتخاب موارد استفاده مناسب کمک میکند پیچیدگی پیادهسازی کنترل شود و کد تولیدشده ارزش واقعی برای پروژه داشته باشد.
کار با Syntax API و Semantic Model در Roslyn
Syntax API در .NET Compiler Platform یا Roslyn امکان بررسی ساختار نحوی کدهای C# را فراهم میکند. کد منبع پس از تحلیل به ساختاری درختی تبدیل میشود که Syntax Tree نام دارد و اجزایی مانند کلاسها، متدها و ویژگیها را نمایش میدهد. Source Generator میتواند این ساختار را بررسی کند و بر اساس الگوهای مشخص، کدهای جدیدی تولید کند. شناخت Syntax API برای توسعه ابزارهایی که با ساختار کد سروکار دارند اهمیت زیادی دارد.

Semantic Model اطلاعات معنایی کد را در اختیار برنامهنویس قرار میدهد و امکان بررسی مواردی مانند نوع نمادها و ارتباط میان ارجاعات را فراهم میکند. تفاوت مهم آن با تحلیل صرفاً نحوی این است که میتوان اطلاعات بیشتری درباره معنای اجزای کد به دست آورد. در توسعه Source Generatorهای پیشرفته، ترکیب تحلیل نحوی و معنایی به شناسایی دقیقتر ساختارهای مورد نظر کمک میکند و زمینه تولید کدی متناسب با تعریفهای واقعی برنامه را فراهم میسازد.
ساخت و انتشار پکیج Source Generator در C# 10
پس از پیادهسازی Source Generator، آمادهسازی آن برای استفاده در پروژههای دیگر اهمیت پیدا میکند. سازماندهی ساختار پروژه، تنظیم وابستگیها و آمادهسازی خروجی قابل استفاده از جمله مراحلی هستند که باید در نظر گرفته شوند. هدف این است که ابزار تولید کد بتواند بهصورت مستقل از پروژه اولیه مورد استفاده قرار بگیرد و توسعهدهندگان بتوانند آن را در محیط توسعه خود به کار بگیرند.
بستهبندی Source Generator به شکل یک پکیج قابل استفاده مجدد، امکان توزیع و نگهداری آسانتر آن را فراهم میکند. در این فرایند باید به سازگاری با محیط کامپایل، وابستگیهای مورد نیاز و نحوه ارجاع پروژههای مصرفکننده توجه داشت. همچنین بررسی کدهای تولیدشده و رفتار Generator در شرایط مختلف میتواند به شناسایی مشکلات احتمالی کمک کند. این مهارتها برای توسعهدهندگانی که قصد ساخت ابزارهای برنامهنویسی و قابلیتهای قابل استفاده مجدد در پروژههای C# را دارند، کاربردی هستند.
سرفصل مطالب آموزش ویدئویی توسعه Source Generator ها در سی شارپ 10
فصل اول: مقدمه دوره آموزشی- مقدمه دوره آموزشی
- مقدمه
- یک Source Generator چیست؟
- در این دوره آموزشی چه چیزی را فرا خواهید گرفت
- بررسی پروژه مربوط به این دوره آموزشی
- حل کردن چالش مربوط به پروژه با استفاده از رفلکشن
- استفاده کردن از یک Source Generator
- جمع بندی
- مقدمه
- راه اندازی کردن محیط توسعه
- اضافه کردن یک پروژه Source Generator
- ایجاد کردن یک Source Generator
- افزودن یک رفرنس به پروژه Source Generator
- جمع بندی
- مقدمه
- بررسی کردن Syntax Tree مربوط به یک فایل سی شارپ
- راه اندازی کردن Pipeline
- استفاده کردن از Anonymous Function های Static
- ایجاد کردن یک فایل کد
- حذف کردن حافظه کش ویژوال استودیو
- منتشر کردن و یا Emit کردن فایلهای کد تولید شده
- جمع بندی
- مقدمه
- تولید کردن یک Partial Class
- معرفی کردن Syntax API
- دیباگ کردن Source Generator
- به دست آوردن اطلاعات Namespace
- پشتیبانی کردن از File-scoped Namespace ها
- تولید کردن متد ToString
- شکستن روان تولید کردن متد ToString به دو قسمت
- نوشتن اطلاعات Member ها
- چک کردن Access Modifier ها
- بررسی کردن تولید شدن کدها به صورت زنده
- جمع بندی
- مقدمه
- بررسی کردن کاربرد مربوط به یک Marker Attribute
- ایجاد کردن Attribute مورد نظر
- استفاده کردن از Attribute ایجاد شده بر روی کلاس
- چک کردن Syntax Target
- به دست آوردن Semantic Target
- جمع بندی
- مقدمه
- مشکل استفاده کردن از Attribute ها
- بررسی Semantic Model
- چک کردن حضور Attribute مورد نظر
- یکی دیگر از کاربردهای Semantic Model
- ایجاد کردن یک Model
- استفاده کردن از Model ایجاد شده
- پیمایش کردن Member ها
- تجزیه و تحلیل کردن Performance
- معرفی کردن عملکرد Cache
- پیاده سازی کردن متد Equals بر روی Model ایجاد شده
- استفاده کردن از Collect د ر Pipeline
- جمع بندی
- مقدمه
- ایجاد کردن یک NuGet Package
- استفاده کردن از NuGet Package ایجاد شده
- جمع بندی







