Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 2796|Απάντηση: 2

[Πηγή] Πλατφόρμα μεταγλωττιστή .NET/C# Roslyn

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 10/3/2024 10:58:32 π.μ. | | | |
Μεταγλωττιστής: Ο μεταγλωττιστής είναι ένα πρόγραμμα που μετατρέπει τον πηγαίο κώδικα (πρωτότυπη γλώσσα) γραμμένο σε μια γλώσσα προγραμματισμού σε μια άλλη (γλώσσα-στόχος). Η μεταγλώττιση είναι η διαδικασία μετάφρασης από τον πηγαίο κώδικα (συνήθως μια γλώσσα υψηλού επιπέδου) σε αντικειμενικό κώδικα (συνήθως μια γλώσσα χαμηλού επιπέδου ή γλώσσα μηχανής) που μπορεί να εκτελεστεί απευθείας από έναν υπολογιστή ή μια εικονική μηχανή.

Στην πλατφόρμα .NET, υπάρχουν δύο διαφορετικοί μεταγλωττιστές σε διαφορετικά στάδια εκτέλεσης του μοντέλου: ο ένας ονομάζεται μεταγλωττιστής Roslyn, ο οποίος μεταγλωττίζει κώδικα C# και VB σε συγκροτήματα. Ο άλλος ονομάζεται μεταγλωττιστής RyuJIT, ο οποίος μεταγλωττίζει τον κώδικα IL (ενδιάμεση γλώσσα) στο συγκρότημα σε κώδικα μηχανής.

Αυτό το άρθρο ξεκινά με τον μεταγλωττιστή Roslyn. Δεν χρειάζεται να εμβαθύνουμε στο πώς λειτουργεί, αλλά για να καταλάβουμε πώς λειτουργεί, για να μάθουμε σε τι μπορεί να χρησιμοποιηθεί.

Αρχικά, ο μεταγλωττιστής της γλώσσας C# γράφτηκε σε C++ και αργότερα η Microsoft παρουσίασε έναν νέο μεταγλωττιστή γραμμένο στην ίδια τη C#: Roslyn, ο οποίος είναι ένας μεταγλωττιστής bootstrap.

Ο μεταγλωττιστής bootstrap σημαίνει ότι ο μεταγλωττιστής μιας συγκεκριμένης γλώσσας προγραμματισμού είναι γραμμένος στην ίδια τη γλώσσα. Κάθε έκδοση του μεταγλωττιστή bootstrap μεταγλωττίζεται με μια έκδοση που προηγήθηκε, αλλά η πρώτη του έκδοση πρέπει να μεταγλωττιστεί από έναν μεταγλωττιστή γραμμένο σε άλλη γλώσσα, όπως η πρώτη έκδοση του Roslyn που μεταγλωττίστηκε από έναν μεταγλωττιστή γραμμένο σε C++. Πολλές γλώσσες προγραμματισμού ωριμάζουν και γράφουν τους δικούς τους μεταγλωττιστές χρησιμοποιώντας την ίδια τη γλώσσα, όπως η C# και η Go.

Στην πλατφόρμα .NET, ο μεταγλωττιστής Roslyn είναι υπεύθυνος για τη μεταγλώττιση κώδικα C# και VB σε συγκροτήματα.

Οι περισσότεροι υπάρχοντες παραδοσιακοί μεταγλωττιστές είναι μοτίβα "μαύρου κουτιού" που μετατρέπουν τον πηγαίο κώδικα σε εκτελέσιμα αρχεία ή αρχεία βιβλιοθήκης και δεν έχουμε τρόπο να γνωρίζουμε τι συμβαίνει ενδιάμεσα. Σε αντίθεση με τη Roslyn, η Roslyn σάς επιτρέπει να έχετε πρόσβαση σε κάθε στάδιο της διαδικασίας μεταγλώττισης κώδικα μέσω API.

Ο μηχανισμός λειτουργίας του βασίζεται σε αγωγούς, με τέσσερα στάδια, καθένα από τα οποία είναι μια ανεξάρτητη ενότητα και κάθε ενότητα παρέχει ένα αντίστοιχο API. Τα ολοκληρωμένα περιβάλλοντα ανάπτυξης (IDE) μπορούν να αξιοποιήσουν αυτά τα API για να παρέχουν βολικά εργαλεία για τη βελτίωση της αποτελεσματικότητας ανάπτυξης, όπως επισήμανση κώδικα, έξυπνες συμβουλές, εργαλεία ανακατασκευής, εργαλεία ανάλυσης απόδοσης και πολλά άλλα. Επιπλέον, με το Roslyn, οι προγραμματιστές μπορούν να χρησιμοποιήσουν τον μεταγλωττιστή ως υπηρεσία στα δικά τους προγράμματα.

Αξιοποιήστε τα API που παρέχονται από τη Roslyn για να δημιουργήσετε δυναμικά δείγματα κώδικα

Αρχικά, δημιουργήστε μια νέα βιβλιοθήκη ClassLibraryGenerator και δημιουργήστε ένα έργο τυπικής βιβλιοθήκης .NET που στοχεύει το ψευδώνυμο netstandard2.0 target framework (TFM). Προσθέστε τα πακέτα NuGet Microsoft.CodeAnalysis.Analyzers και Microsoft.CodeAnalysis.CSharp, το csproj διαμορφώνεται ως εξής:


Δημιουργήστε ένα νέο αρχείο C# που ονομάζεται TestSourceGenerator.cs που καθορίζει τη δική σας γεννήτρια πηγής ως εξής:

Από το αντικείμενο περιβάλλοντος, μπορούμε να έχουμε πρόσβαση στο μεταγλωττισμένο σημείο εισόδου ή στην κύρια μέθοδο. Μια παρουσία mainMethod είναι ένα IMethodSymbol που αντιπροσωπεύει το σύμβολο μιας μεθόδου ή παρόμοιας μεθόδου (συμπεριλαμβανομένων κατασκευαστών, καταστροφέων, τελεστών ή προσθηκών χαρακτηριστικών/συμβάντων). Η μέθοδος Microsoft.CodeAnalysis.Compilation.GetEntryPoint επιστρέφει το IMethodSymbol του σημείου εισόδου του προγράμματος. Άλλες μέθοδοι σάς επιτρέπουν να βρείτε οποιοδήποτε σύμβολο μεθόδου στο έργο σας. Σε αυτό το αντικείμενο, μπορούμε να συμπεράνουμε τον χώρο ονομάτων (αν υπάρχει) και τον τύπο που περιέχει. Η πηγή σε αυτό το παράδειγμα είναι μια παρεμβαλλόμενη συμβολοσειρά που καθορίζει τον πηγαίο κώδικα που θα δημιουργηθεί, με τα παρεμβαλλόμενα κενά να συμπληρώνουν τον περιεχόμενο χώρο ονομάτων και τις πληροφορίες τύπου. Προσθέστε την πηγή στο περιβάλλον με το όνομα της προτροπής. Για αυτό το παράδειγμα, το πρόγραμμα δημιουργίας δημιουργεί ένα νέο αρχείο προέλευσης δομής που περιέχει την υλοποίηση της μερικής μεθόδου στην εφαρμογή της κονσόλας. Μια γεννήτρια πηγών μπορεί να γραφτεί για να προσθέσει οποιαδήποτε αγαπημένη πηγή.

Δημιουργήστε μια νέα εφαρμογή κονσόλας ConsoleApp4 (χωρίς δηλώσεις ανώτατου επιπέδου) με τον ακόλουθο κώδικα:

Ταυτόχρονα, προσθέστε την αναφορά έργου ClassLibraryGenerator, ως εξής:

Δοκιμάστε να εκκινήσετε την εφαρμογή κονσόλας με την έξοδο ως εξής:



Στο Visual Studio, κάντε κλικ στο έργο "Εξαρτήσεις" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", κάντε διπλό κλικ στο αρχείο "Program.g.cs" για να δείτε τον κώδικα που δημιουργήθηκε, ως εξής:



Προτροπή:Η τροποποίηση του κώδικα του προγράμματος δημιουργίας ενδέχεται να απαιτεί επανεκκίνηση του Visual Studio για να τον δείτε

Διεύθυνση Roslyn GitHub:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Αναφορά:

Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.




Προηγούμενος:Εκτέλεση κώδικα στο Visual Studio χρησιμοποιώντας το διαδραστικό παράθυρο C#
Επόμενος:Λήψη αρχικού αρχείου εικόνας ISO των Windows 11
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 10/3/2024 10:59:12 π.μ. |
Εισαγωγή και διαφορά μεταξύ της μεταγλώττισης JIT και AOT στο .NET
https://www.itsvse.com/thread-10734-1-1.html
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 6/7/2024 4:59:59 μ.μ. |
Χρησιμοποιήστε το Roslyn για να μεταγλωττίσετε δυναμικά τον κώδικα C# και να τον εκτελέσετε
https://www.itsvse.com/thread-10786-1-1.html
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com