Kääntäjä: Kääntäjä on ohjelma, joka muuntaa yhdellä ohjelmointikielellä kirjoitetun lähdekoodin (alkuperäinen kieli) toiseksi (kohdekieleksi). Kääntäminen on prosessi, jossa lähdekoodista (yleensä korkean tason kieli) käännetään objektikoodiksi (yleensä matalan tason kieli tai konekieli), joka voidaan suorittaa suoraan tietokoneella tai virtuaalikoneella.
.NET-alustalla on kaksi eri kääntäjää eri vaiheissa mallin suoritusta: toinen nimeltä Roslyn-kääntäjä, joka kääntää C#- ja VB-koodia kokoonpanoiksi; Toinen on nimeltään RyuJIT-kääntäjä, joka kääntää kokoonpanon IL (välikieli) -koodin konekoodiksi.
Tämä artikkeli alkaa Roslynin kääntäjällä. Meidän ei tarvitse syventyä siihen, miten se toimii, vaan ymmärtää, miten se toimii, tietää, mihin sitä voi käyttää.
Aluksi C#-kielen kääntäjä kirjoitettiin C++:lla, ja myöhemmin Microsoft esitteli uuden kääntäjän, joka oli kirjoitettu itse C#:lla: Roslyn, joka on bootstrap-kääntäjä.
Bootstrap-kääntäjä tarkoittaa, että tietyn ohjelmointikielen kääntäjä on kirjoitettu itse kyseisellä kielellä. Jokainen bootstrap-kääntäjän versio käännetään yhdessä sitä edeltäneen version kanssa, mutta sen ensimmäinen versio täytyy kääntää toisella kielellä, kuten Roslynin ensimmäinen versio, joka on käännetty C++-kielellä kirjoitetun kääntäjän toimesta. Monet ohjelmointikielet kypsyvät ja kirjoittavat omia kääntäjiään itse kielellä, kuten C# ja Go.
.NET-alustalla Roslyn-kääntäjä vastaa C#- ja VB-koodin kääntämisestä kokoonpanoiksi.
Suurin osa nykyisistä perinteisistä kääntäjistä on "musta laatikko" -kuvioita, jotka muuntavat lähdekoodin suoritettaviksi tiedostoiksi tai kirjastotiedostoiksi, eikä meillä ole keinoa tietää, mitä niiden välissä tapahtuu. Toisin kuin Roslyn, Roslyn mahdollistaa pääsyn jokaiseen koodin käännösprosessin vaiheeseen API:n kautta.
Sen toimintamekanismi perustuu putkistoon, ja siinä on neljä vaihetta, joista jokainen on itsenäinen moduuli, ja jokainen moduuli tarjoaa vastaavan API:n. Integroidut kehitysympäristöt (IDE:t) voivat hyödyntää näitä API-rajapintoja tarjotakseen käteviä työkaluja kehityksen tehokkuuden parantamiseksi, kuten koodin korostuksen, älykkäiden vihjeiden, refaktorointityökalujen, suorituskyvyn analyysityökalujen ja paljon muuta. Lisäksi Roslynin avulla kehittäjät voivat käyttää kääntäjää palveluna omissa ohjelmissaan.
Hyödynnä Roslynin tarjoamia rajapintoja dynaamisesti tuottaaksesi koodinäytteitä
Ensiksi luo uusi ClassLibraryGenerator-kirjasto ja luo .NET-standardikirjastoprojekti, joka kohdistuu netstandard2.0-kohdekehykseen (TFM). Lisää NuGet-paketit Microsoft.CodeAnalysis.Analyzers ja Microsoft.CodeAnalysis.CSharp, ja csproj on konfiguroitu seuraavasti:
Luo uusi C#-tiedosto nimeltä TestSourceGenerator.cs, joka määrittelee oman lähdegeneraattorisi seuraavasti:
Kontekstiobjektista pääsemme käsiksi käännettyyn aloituspisteeseen tai päämetodiin. mainMethod-instanssi on IMethodSymbol, joka edustaa metodin tai vastaavan metodin symbolia (mukaan lukien konstruktorit, tuhoajat, operaattorit tai attribuuttien/tapahtuma-avustajat). Microsoft.CodeAnalysis.Compilation.GetEntryPoint -metodi palauttaa ohjelman aloituspisteen IMethodSymbolin. Muut menetelmät mahdollistavat minkä tahansa metodisymbolin löytämisen projektistasi. Tässä oliossa voimme päätellä nimiavaruuden (jos se on olemassa) ja sen sisältämän tyypin. Tämän esimerkin lähdekoodi on interpoloitu merkkijono, joka mallintaa luotavan lähdekoodin, ja interpoloidut aukot täyttävät sisällä olevan nimiavaruuden ja tyyppitiedon. Lisää lähdekoodi kontekstiin kehotteen nimellä. Tässä esimerkissä rakentaja luo uuden build-lähdetiedoston, joka sisältää osittaisen metodin toteutuksen konsolisovelluksessa. Lähdegeneraattori voidaan kirjoittaa lisäämään mikä tahansa suosikkilähde.
Luo uusi ConsoleApp4-konsolisovellus (ilman ylätason lauseita) seuraavalla koodilla:
Samalla lisää ClassLibraryGenerator-projektin viite seuraavasti:
Kokeile käynnistää konsolisovellus ja tulosta seuraavasti:
Visual Studiossa klikkaa projektia "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", kaksoisklikkaa "Program.g.cs"-tiedostoa nähdäksesi luodun koodin seuraavasti:
Ripeä:Rakentajan koodin muokkaaminen saattaa vaatia Visual Studion uudelleenkäynnistystä sen näkemiseksi。
Roslyn GitHubin osoite:Hyperlinkin kirjautuminen on näkyvissä.
Viittaus:
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä. |