Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 2796|Jawab: 2

[Sumber] Platform kompiler .NET/C# Roslyn

[Salin tautan]
Diposting pada 10/03/2024 10.58.32 | | | |
Kompiler: Kompiler adalah program yang mengubah kode sumber (bahasa asli) yang ditulis dalam satu bahasa pemrograman menjadi bahasa lain (bahasa target). Kompilasi adalah proses menerjemahkan dari kode sumber (biasanya bahasa tingkat tinggi) ke kode objek (biasanya bahasa tingkat rendah atau bahasa mesin) yang dapat dijalankan langsung oleh komputer atau mesin virtual.

Dalam platform .NET, ada dua kompiler berbeda pada tahap yang berbeda dalam mengeksekusi model: satu disebut kompiler Roslyn, yang mengkompilasi kode C# dan VB ke dalam rakitan; Yang lainnya disebut kompiler RyuJIT, yang mengkompilasi kode IL (bahasa perantara) dalam rakitan menjadi kode mesin.

Artikel ini dimulai dengan kompiler Roslyn. Kita tidak perlu mempelajari cara kerjanya, tetapi untuk memahami cara kerjanya, untuk mengetahui untuk apa itu dapat digunakan.

Awalnya, compiler bahasa C# ditulis dalam C++, dan kemudian Microsoft memperkenalkan compiler baru yang ditulis dalam C# itu sendiri: Roslyn, yang merupakan compiler bootstrap.

Kompiler bootstrap berarti bahwa kompiler bahasa pemrograman tertentu ditulis dalam bahasa itu sendiri. Setiap versi kompiler bootstrap dikompilasi dengan versi yang mendahuluinya, tetapi versi pertamanya harus dikompilasi oleh kompiler yang ditulis dalam bahasa lain, seperti versi pertama Roslyn yang dikompilasi oleh kompiler yang ditulis dalam C++. Banyak bahasa pemrograman matang dan menulis kompiler mereka sendiri menggunakan bahasa itu sendiri, seperti C# dan Go.

Pada platform .NET, kompiler Roslyn bertanggung jawab untuk mengkompilasi kode C# dan VB ke dalam rakitan.

Sebagian besar kompiler tradisional yang ada adalah pola "kotak hitam" yang mengubah kode sumber menjadi file yang dapat dieksekusi atau perpustakaan, dan kami tidak memiliki cara untuk mengetahui apa yang terjadi di antaranya. Tidak seperti Roslyn, Roslyn memungkinkan Anda mengakses setiap tahap proses kompilasi kode melalui API.

Mekanisme kerjanya berbasis alur, dengan empat tahap, yang masing-masing merupakan modul independen, dan setiap modul menyediakan API yang sesuai. Lingkungan pengembangan terintegrasi (IDE) dapat memanfaatkan API ini untuk menyediakan alat yang nyaman untuk meningkatkan efisiensi pengembangan, seperti penyorotan kode, petunjuk cerdas, alat pemfaktoran ulang, alat analisis kinerja, dan banyak lagi. Selain itu, dengan Roslyn, pengembang dapat menggunakan kompiler sebagai layanan dalam program mereka sendiri.

Manfaatkan API yang disediakan oleh Roslyn untuk menghasilkan sampel kode secara dinamis

Pertama, buat pustaka ClassLibraryGenerator baru dan buat proyek pustaka standar .NET yang menargetkan moniker kerangka kerja target netstandard2.0 (TFM). Tambahkan paket NuGet Microsoft.CodeAnalysis.Analyzers dan Microsoft.CodeAnalysis.CSharp, csproj dikonfigurasi sebagai berikut:


Buat file C# baru yang disebut TestSourceGenerator.cs yang menentukan generator sumber Anda sendiri sebagai berikut:

Dari objek konteks, kita dapat mengakses titik masuk yang dikompilasi atau metode Main. Instans mainMethod adalah IMethodSymbol yang mewakili simbol metode atau metode serupa (termasuk konstruktor, destruktor, operator, atau pengakses atribut/peristiwa). Metode Microsoft.CodeAnalysis.Compilation.GetEntryPoint mengembalikan IMethodSymbol dari titik masuk program. Metode lain memungkinkan Anda menemukan simbol metode apa pun dalam proyek Anda. Dalam objek ini, kita dapat menyimpulkan namespace (jika ada) dan jenis yang dikandungnya. Sumber dalam contoh ini adalah string interpolasi yang membuat templat kode sumber yang akan dibuat, dengan celah yang diinterpolasi mengisi namespace yang terkandung dan informasi jenis. Tambahkan sumber ke konteks dengan nama prompt. Untuk contoh ini, pembuat membuat file sumber build baru yang berisi implementasi metode parsial dalam aplikasi konsol. Generator sumber dapat ditulis untuk menambahkan sumber favorit apa pun.

Buat aplikasi konsol ConsoleApp4 baru (tanpa pernyataan tingkat atas) dengan kode berikut:

Pada saat yang sama, tambahkan referensi proyek ClassLibraryGenerator, sebagai berikut:

Coba luncurkan aplikasi konsol dengan output sebagai berikut:



Di Visual Studio, klik proyek "Dependensi" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", klik dua kali pada file "Program.g.cs" untuk melihat kode yang dihasilkan, sebagai berikut:



Cepat:Memodifikasi kode pembuat mungkin memerlukan restart Visual Studio untuk melihatnya

Alamat GitHub Roslyn:Login hyperlink terlihat.

Referensi:

Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat.




Mantan:Eksekusi kode di Visual Studio menggunakan jendela Interaktif C#
Depan:Unduh file gambar ISO asli Windows 11
 Tuan tanah| Diposting pada 10/03/2024 10.59.12 |
Pengantar dan perbedaan antara kompilasi JIT dan AOT di .NET
https://www.itsvse.com/thread-10734-1-1.html
 Tuan tanah| Diposting pada 06/07/2024 16.59.59 |
Gunakan Roslyn untuk mengkompilasi kode C# secara dinamis dan menjalankannya
https://www.itsvse.com/thread-10786-1-1.html
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com