A better tomorrow for source code with Roslyn – The focused generalist

வணக்கம் தோழர்களே,

Roslyn API ஐப் பயன்படுத்தி, இன்டர்ன்ஷிப்பிலும், கூகுள் சம்மர் ஆஃப் கோட் 2015 இன் போதும் நான் சில நேரம் செலவிட்டுள்ளேன். அதை இங்கே வழங்குவது சிறந்த யோசனையாக இருக்கும் என்று நினைத்தேன்.

ரோஸ்லின் என்ற பெயரால் அறியப்பட்ட .NET கம்பைலர் பிளாட்ஃபார்ம், விஷுவல் ஸ்டுடியோவின் விரிவாக்கமாக 2010 இல் பொதுமக்களுக்குக் கிடைத்தது. பில்ட் 2014 இன் போது, ​​மைக்ரோசாப்ட் மூலம் இது ஒரு திறந்த மூல திட்டமாக மாற்றப்பட்டது. சுருக்கமாக, ரோஸ்லின் .NET மொழிகளுக்கான ஓப்பன் சோர்ஸ் கம்பைலர் மற்றும் குறியீடு பகுப்பாய்வு API ஆகியவற்றின் தொகுப்பை வழங்குகிறது ஆனால் விஷுவல் சி# மற்றும் விஷுவல் பேசிக் மட்டுமே தற்போது ஆதரிக்கப்படுகிறது.

முன்னதாக, புரோகிராமர்கள் ஏதேனும் ஒரு சிக்கலைத் தீர்க்கும் பொருட்டு சில குறியீட்டை எழுதும் போது, ​​அவர்கள் குறியீட்டை உருவாக்கி, அதன் மீது சில சோதனைகளை நடத்துவார்கள் என்று நம்பினர், இறுதியாக, அதை TFS இல் உருவாக்கி அது செயல்படும் என்று நம்புகிறார்கள். கம்பைலர்கள் ஒருவித மாயாஜாலக் கருவியாகக் காணப்படுகின்றன, அது குறியீடு வேலை செய்ததா இல்லையா என்பதைச் சரிபார்க்கும். கடந்த காலத்தில், இந்த அமைப்பு செயல்பட்டது, ஆனால் நாம் முன்னேறி, மிகவும் சிக்கலான மென்பொருளைப் பெறும்போது, ​​​​புரோகிராமர்களாகிய எங்களுக்கு, எங்கள் உற்பத்தித்திறனை அதிகரிக்க மறுசீரமைப்புகள் போன்ற சிறந்த கருவிகள் தேவை.

இங்குதான் ஓப்பன் சோர்ஸ் திட்டம் செயல்படும். .NET கம்பைலர் பிளாட்ஃபார்ம் பயனர்கள் தங்கள் மூலக் குறியீடு பற்றிய கூடுதல் தகவல்களைப் பெற உதவுகிறது. வெறுமனே குறியீட்டை எழுதுவதற்கும் சிறந்ததை எதிர்பார்ப்பதற்கும் பதிலாக, குறியீடு பகுப்பாய்வு போன்ற பல்வேறு பணிகளுக்குப் பயன்படுத்தக்கூடிய வெவ்வேறு APIகள் உள்ளன. சுருக்கமாக, மூலக் குறியீட்டு பகுப்பாய்வு என்பது மூலக் குறியீட்டில் உள்ள பிழைகளைக் கண்டறியும் நம்பிக்கையில் மூலக் குறியீட்டை தானாகவே சோதிக்கும் செயலாகும், இதனால் அதை சரிசெய்ய முடியும். குறியீடு பகுப்பாய்வு போன்ற ஒரு கருவியைப் பயன்படுத்துவது குறியீடு மாற்றம் போன்ற பல சாதகமான சூழ்நிலைகளுக்கு வழிவகுக்கும்.

கம்பைலர் இயங்குதளம் சி# மற்றும் விஷுவல் பேசிக் கம்பைலர்களின் மேல் கட்டப்பட்டது. ரோஸ்லினை ஒரு சேவையாக கம்பைலர் போல் காணலாம். “ஒரு சேவையாக கம்பைலர்” அல்லது CaaS என்ற சொல்லானது பிளாட்ஃபார்ம் ஒரு சேவையாக (PaaS) அல்லது உள்கட்டமைப்பு ஒரு சேவையாக (IaaS) போன்ற பிற சேவைகளைப் போல் பார்க்கக்கூடாது. ரோஸ்லின் C# மற்றும் VB.NET இன் தொகுப்பியை மறுசீரமைப்பதற்காக உருவாக்கப்பட்டது. தொகுக்கும் நேரம் போன்ற வளர்ச்சி கட்டத்தின் பல்வேறு கட்டங்களை இது வெளிப்படுத்துகிறது.

CaaS வழங்கும் சேவை, முன்னெப்போதும் இல்லாத வகையில் புரோகிராமர்களை மேம்படுத்துகிறது. முன்பே குறிப்பிட்டது போல், தொகுக்கப்பட்ட குறியீடு இப்போது அம்பலமானது மற்றும் பயனர்களால் கையாளப்படலாம். அடிப்படையில், இந்த கருப்புப் பெட்டி (.நெட் கம்பைலர்) இப்போது பல துண்டுகளாகப் பிரிக்கப்பட்டுள்ளது, அவை அனைத்தும் ஒன்றாக இணைக்கப்படும்போது, ​​அது தொடரியல் மரம் என்று அழைக்கப்படுவதை உருவாக்குகிறது. சுருக்கமாக, தொடரியல் மரம் என்பது ஒரு மூல கோப்பில் எழுதப்பட்ட குறியீட்டின் பிரதிநிதித்துவமாகும். தொடரியல் மரம் குறியீடு அஞ்ஞானம்; .cs அல்லது .vb மூலக் கோப்பிலிருந்து குறியீட்டைப் பிரதிநிதித்துவப்படுத்துவதில் எந்தச் சிக்கலும் இருக்காது.

இந்த தொடரியல் மரம் மூன்று வெவ்வேறு கூறுகளைப் பயன்படுத்துகிறது; தொடரியல் முனை, தொடரியல் ட்ரிவியா மற்றும் தொடரியல் டோக்கன். SyntaxNode என்பது மரத்தின் முக்கிய அங்கத்தினர்கள், டோக்கன்கள் மற்றும் ட்ரிவியா நேரடியாக அவற்றைச் சார்ந்துள்ளது. முனைகள் ஒரு “எல்லையற்ற” தொடரியல் எண்ணைக் குறிக்கலாம், இது ஒரு வகுப்பு அறிவிப்பிலிருந்து ஒரு பொருளைத் துவக்குவது வரை செல்லலாம். டோக்கன்கள் மற்றும் ட்ரிவியாவைப் பொறுத்தவரை; அடையாளங்காட்டிகள் (எ.கா: மாறியின் பெயர்) அல்லது முக்கிய வார்த்தைகள் (எ.கா: int) போன்ற குறியீட்டில் உள்ள சிறிய துண்டுகளை டோக்கன்கள் பிரதிநிதித்துவப்படுத்துகின்றன, மேலும் ட்ரிவியா கோப்பில் எஞ்சியிருக்கும் இடைவெளி அல்லது கருத்துகள் போன்ற அனைத்தையும் குறிக்கும்.

அவர்கள் மூலக் குறியீட்டைப் பற்றி நிறைய தகவல்களைக் கொடுத்தாலும், அவர்கள் போதுமான அளவு கொடுக்கவில்லை. சின்னங்கள் விளையாடுவது இங்குதான். மூலக் குறியீட்டைப் பற்றி தொகுப்பாளருக்குத் தெரிந்த சொற்பொருள் தகவல்களை அவை வழங்குகின்றன. மூலக் கோப்பில் உள்ள உறுப்புகளைப் பற்றி கம்பைலர் அறிந்த தகவலை குறியீடுகள் கொண்டிருக்கும். சின்னங்களின் உள்ளே, எந்த அசெம்பிளியில் ஒரு வகை அறிவிக்கப்பட்டது அல்லது வகுப்பு அல்லது பெயர்வெளி தொடர்பான பல்வேறு தகவல்கள் போன்ற தகவல்களைக் கண்டறிய முடியும். இந்த வகையான தகவலுடன், குறியீடு பகுப்பாய்வின் போது கணு வகையைச் சரிபார்க்க இப்போது சாத்தியமாகும். சின்னங்கள் இரண்டு வெவ்வேறு வகைகளில் (இடைமுகங்கள்) பிரிக்கப்படுகின்றன: ISymbol மற்றும் ITypeSymbol. பயனர்கள் தகவலைப் பெற ISymbol உதவும்.

இதைக் கருத்தில் கொண்டு, இப்போது குறியீடு பகுப்பாய்விகள் மற்றும் குறியீடு திருத்த வழங்குநர்களுக்குச் செல்ல முடியும். Roslyn பகுப்பாய்விகள் டெவலப்பர்கள் தங்கள் குறியீட்டு அடிப்படைக்குள் “var” ஐ மட்டும் உள்ளூர் மாறி வகையாகப் பயன்படுத்துவது போன்ற சில விதிகளைச் செயல்படுத்த உதவுகிறது. Roslyn பகுப்பாய்வியானது அடிப்படை வகுப்பு DiagnosticAnalyzer இலிருந்து பெற வேண்டும், இது பகுப்பாய்வாளர் பொறுப்பேற்க வேண்டிய நோயறிதல்களின் தொகுப்பை அம்பலப்படுத்த வேண்டும், இது “SupportedDiagnostics” எனப்படும் சொத்தைப் பயன்படுத்தி. கண்டறியும் பகுப்பாய்விகளைப் பற்றிய மற்றொரு முக்கியமான உண்மை என்னவென்றால், பகுப்பாய்விகள் DiagnosticAnalyzer துணை வகுப்பினுள் Initialize முறை மூலம் துவக்கப்படுகின்றன. “பகுப்பாய்வு சூழல்” வகையின் அளவுருவைப் பயன்படுத்தி, பகுப்பாய்வி கொடுக்கப்பட்ட முனையின் வகையைப் பதிவு செய்கிறது. கீழே உள்ள உதாரணத்தைப் பாருங்கள். இது நிலையான வகுப்பு SyntaxKind ஐப் பயன்படுத்துகிறது. இந்த வகுப்பில் அனைத்து வகைகளும் டோக்கன்களும் உள்ளன. டோக்கன் என்பது கமாவா என்பதைக் கண்டறிய அல்லது உங்கள் பகுப்பாய்விக்கான பொருளை உருவாக்கும் வெளிப்பாட்டைத் தேடுகிறீர்களா என்பதைக் குறிப்பிட இந்த வகுப்பு மிகவும் உதவியாக இருக்கும்.


public override void Initialize(AnalysisContext context)

{

context.RegisterSyntaxNodeAction(

(nodeContext) =>

{

Diagnostic diagnostic;

if (TryGetRedundantNullableDiagnostic(nodeContext, out

diagnostic))

{

nodeContext.ReportDiagnostic(diagnostic);

}

},

SyntaxKind.ObjectCreationExpression //When users creates object

);

}

ஒரு கண்டறியும் பகுப்பாய்வி விதியை பூர்த்தி செய்ததா என்பதைக் கண்டறிய மட்டுமே பயன்படுத்தப்படுகிறது. விசித்திரமான விதியில், அடிப்படை கட்டமைப்பாளருக்கான அழைப்பு தேவையற்றது என்று வைத்துக்கொள்வோம், கண்டறியும் பகுப்பாய்வி பொருள் உருவாக்கும் வெளிப்பாடுகளை மட்டுமே பார்த்து, கொடுக்கப்பட்ட அல்காரிதம் மூலம் அவற்றை பகுப்பாய்வு செய்யும். ஒரு குறியீடு பிழைத்திருத்த வழங்குநர் சரிசெய்ய வேண்டிய மூலக் குறியீட்டை சரிசெய்வார். குறியீடு பிழைத்திருத்த வழங்குநரின் மிக முக்கியமான உறுப்பு “RegisterCodeFixesAsync” முறையாகும். டெவலப்பர்கள் மனதில் கொள்ள வேண்டிய தகவல் என்னவென்றால், மூலக் குறியீட்டைப் பற்றிய தகவல் மாறாதது, அதை மாற்ற முடியாது.
CodeFixContext வகுப்பின் ஆவணப் பண்புகளைப் பயன்படுத்தி, GetSyntaxRootAsync(CancellationToken) முறையை அழைப்பதன் மூலம் மூலக் குறியீட்டின் தொடரியல் மூலத்தை அணுக முடியும். டெவலப்பருக்கு மீதமுள்ள வேலை, கண்டறியும் கருவியை உருவாக்கிய SyntaxNode பொருளை மீட்டெடுப்பதாகும். இறுதியாக, டெவலப்பர் ஒரு புதிய ரூட் ட்ரீயை உருவாக்க வேண்டும், அங்கு கணு அகற்றப்பட்டது அல்லது அது கண்டறியும் விதியை மதிக்கிறது என்பதை உறுதிசெய்து மாற்றுகிறது.

சரி, அது வாசகர்களைப் பற்றியது. குறியீடு பகுப்பாய்வு உலகில் மூழ்க விரும்புவோருக்கு இது ஒரு சிறந்த அறிமுகமாக இருக்க வேண்டும்.

கெவின் அவுட்.

Leave a Comment