Apa yang baru di Microsoft .NET 5

Kandidat rilis kedua Microsoft .NET 5 tiba pada 13 Oktober, membawa penggabungan .NET Framework dan .NET Core selangkah lebih dekat ke penyelesaian. Platform .NET terpadu yang baru akan tersedia untuk umum pada 10 November 2020. 

Microsoft menjelaskan Kandidat Rilis 2 sebagai rilis yang mendekati final dan yang terakhir dari dua RC. RC awal diterbitkan pada 13 September. Kandidat rilis .NET 5.0 dapat diunduh dari dotnet.microsoft.com.

Sasaran tingkat tinggi untuk .NET 5 mencakup penyediaan pengalaman .NET SDK yang terpadu, dengan satu BCL (pustaka kelas dasar) di semua aplikasi .NET 5, dan dengan dukungan untuk aplikasi asli dan web di beberapa sistem operasi. Sebuah proyek aplikasi asli .NET 5 akan mendukung target seperti Windows, Microsoft Duo (Android), dan Apple iOS menggunakan kontrol asli pada platform tersebut.

Sasaran tambahan .NET 5 mencakup dukungan untuk membangun aplikasi cloud berkinerja tinggi, algoritme yang lebih cepat di BCL, dukungan yang lebih baik untuk container dalam runtime, dan dukungan untuk HTTP3. .NET 5.0 menyertakan dukungan untuk format biner WebAssembly, melalui Mono runtime dan pustaka .NET. Satu set anotasi jenis referensi nullable juga ditampilkan.

.NET 5 juga menjanjikan untuk memungkinkan pengembang menemukan bug laten secara otomatis dalam kode. Fitur baru lainnya termasuk Halftipe, floating-point biner yang menempati 16 bit, dan pemangkasan perakitan, yang memotong rakitan yang tidak digunakan untuk mengurangi ukuran aplikasi. Pemangkasan yang disesuaikan juga disorot. Pencocokan pola baru di C # 9 mencakup pola tipe relasional, logis, dan sederhana. Opsi penyebaran ClickOnce sekarang didukung untuk aplikasi Windows .NET 5.0 dan aplikasi .NET Core 3.1.

Platform .NET baru juga menjanjikan peningkatan kinerja. Buletin yang berkaitan dengan Pratinjau 7, yang tiba 21 Juli, mengakui sekitar 250 permintaan tarik berorientasi kinerja di .NET 5 dan mencatat bahwa kejutan menyenangkan tersedia bagi mereka yang telah mengikuti kinerja Inti .NET. 

Penambahan dan peningkatan lain yang dicatat di buletin .NET 5 Pratinjau 7:

  • System.text.json JSON API yang baru menyediakan kemampuan untuk mengabaikan nilai default untuk properti tipe nilai saat membuat serial, berguna untuk mengurangi serialisasi dan biaya kabel. Ini adalah perubahan besar. Juga ditambahkan untuk System.text.json adalah kemampuan untuk menangani referensi melingkar saat membuat serial, dengan bentuk API sekarang diharapkan sudah final.
  • Pengumpulan sampah sekarang memperlihatkan data mendetail tentang pengumpulan terbaru, menggunakan GetGCMemoryInfometode, yang mengembalikan GCMemoryInfostruct. GCMemoryInfomenyajikan informasi tentang mesin dan memori heap dan koleksi terbaru, atau koleksi terbaru dari jenis GC yang ditentukan - ephemeral, pemblokiran penuh, atau latar belakang. Kasus penggunaan yang paling mungkin untuk API ini adalah logging / pemantauan atau untuk menunjukkan kepada penyeimbang beban bahwa mesin harus dikeluarkan dari rotasi untuk meminta GC penuh. Perubahan GC lainnya, sementara itu, dilakukan untuk menunda operasi memori reset yang mahal ke situasi memori rendah.
  • Ryujit, generator kode perakitan untuk .NET, memperoleh peningkatan mulai dari mengaktifkan penghapusan beberapa pemeriksaan batas hingga perbaikan duplikasi ekor dan peningkatan untuk menghilangkan nol init yang berlebihan. Juga ditampilkan di Ryujit adalah intrinsik perangkat keras ARM64 dan pengoptimalan API.

.NET 5 Preview 6, dirilis 25 Juni, menghapus dukungan built-in untuk WinRT (Windows Runtime), kumpulan API untuk membangun aplikasi Universal Windows Platform. Ini adalah perubahan besar; Aplikasi .NET Core 3.x yang menggunakan WinRT harus dikompilasi ulang. Tim .NET dan Windows telah bekerja untuk mengubah cara kerja WinRT dengan Windows, menggantikan dukungan WinRT dengan toolchain C # / WinRT di .NET 5. C # / WinRT adalah perangkat paket NuGet yang menawarkan dukungan proyeksi WinRT untuk C #.

Perubahan lain di .NET 5 Pratinjau 6: 

  • .NET 5 Preview 6 SDK menyertakan dukungan untuk Windows Forms pada perangkat Windows ARM64. Pekerjaan terus menambahkan dukungan untuk Windows Presentation Foundation di Windows ARM64.
  • Peningkatan kualitas kode RyuJIT mencakup penanganan dan pengoptimalan struct untuk menghapus inisialisasi nol yang berlebihan. Selain itu, kemajuan telah dibuat dalam pengoptimalan intrinsik perangkat keras ARM64 serta dalam meningkatkan kode yang dihasilkan untuk ARM64, dengan ukuran kode yang dikurangi.
  • Paket dukungan platform telah diperbarui.

.NET 5 Preview 5, dirilis 10 Juni, berisi fitur-fitur baru berikut ini:

  • Kompiler RyuJIT JIT memiliki implementasi tailcall helper yang lebih cepat dan portabel. JIT meminta bantuan runtime setiap kali ia menyadari bahwa ia membutuhkan helper untuk melakukan tailcall. Juga untuk RyuJIT, telah ada kemajuan berkelanjutan dalam implementasi intrinsik perangkat keras ARM64. Peningkatan lain dalam RyuJIT melibatkan kecepatan yang lebih baik dalam kasus yang memengaruhi kompilasi ekspresi reguler dan peningkatan kinerja arsitektur Intel.
  • Ekspor untuk biner asli dengan panggilan ke kode .NET telah diaktifkan. Bagian terpenting dari kemampuan ini adalah menghosting dukungan API untuk UnManagedCallersOnlyAttribute. Proyek ekspor asli memungkinkan pengungkapan ekspor asli khusus. Itu tidak memerlukan teknologi interop tingkat yang lebih tinggi seperti COM dan lintas platform.
  • DirectoryServices.Protocols dukungan sedang diperluas ke Linux dan MacOS.
  • Distribusi Alpine 3.12 Linux sekarang didukung.

Kandidat rilis .NET 5.0 dapat diunduh dari dot.net.microsoft.com.

.NET 5 Preview 4, dirilis pada 19 Mei, memperkenalkan kemampuan baru berikut ini:

  • Dukungan bahasa C # 9 dan F # 5.
  • Peningkatan kinerja tailcall yang digunakan oleh F #.
  • Peningkatan kinerja ToUpperInvariant, string.ToLowerInvariantdan pola terkait.
  • Peningkatan kinerja HTTP 1.1 dan HTTP 2.
  • Mekanisme penghitungan panggilan yang ditingkatkan.
  • Perluasan dinamis dari kamus generik internal untuk menghilangkan hambatan kinerja yang terkena kode generik.
  • Heap objek yang disematkan untuk mengurangi fragmentasi heap.
  • Aplikasi file tunggal berdasarkan jenis penerbitan file tunggal baru yang menjalankan aplikasi dari biner tunggal.

Perangkat tambahan di .NET 5 pratinjau 3, diluncurkan pada 23 April, termasuk yang berikut ini: 

  • Kelas BitArray untuk mengelola larik nilai bit telah diupdate untuk menyertakan implementasi yang dipercepat hardware untuk ARM64 menggunakan intrinsik ARM64. Peningkatan kinerja BitArray sangat signifikan, kata Microsoft. Selain itu, penggantian On Stack (OSR) di CLR diimplementasikan untuk memungkinkan kode yang dieksekusi dengan metode yang sedang berjalan diubah di tengah eksekusi metode, sementara metode tersebut aktif "di stack". Kemampuan ini, untuk meningkatkan karakteristik kinerja kompilasi berjenjang, sekarang menjadi fitur opt-in eksperimental di x64. Peningkatan lain untuk RyuJIT meningkatkan kualitas kode untuk struct sebagai argumen dalam panggilan posisi "panggilan ekor". RyuJIT juga diharapkan menawarkan kinerja obat generik yang lebih baik. 
  • Penambahan dukungan untuk memelihara referensi telah ditambahkan ke System.Txt.Json, yang memungkinkan penanganan loop referensi untuk serialisasi JSON. Selain itu, class dan struct yang tidak dapat diubah sekarang didukung untuk JsonSerializer. Juga didukung sekarang adalah penanganan nilai null.
  • .NET SDK sekarang akan secara otomatis mereferensikan paket NETFramework.ReferenceAssemblies NuGet yang diberi kerangka kerja target .NETFramework dalam file proyek. Perubahan ini memungkinkan pembangunan proyek .NETFramework pada mesin tanpa paket penargetan .NETFramework yang diinstal. Peningkatan ini khusus untuk paket penargetan dan tidak memperhitungkan kemungkinan ketergantungan proyek lainnya.

Peningkatan khusus dalam .NET 5 pratinjau 2, dirilis 2 April, termasuk: 

  • Sejumlah perubahan telah dilakukan pada RyuJIT untuk meningkatkan kualitas kode mesin yang dihasilkan, termasuk inisialisasi nol duplikat yang dihilangkan secara lebih agresif dan pengoptimalan kotak nullable dipanggil lebih awal.
  • Pengumpulan sampah server pada utas yang berbeda sekarang dapat bekerja-mencuri sambil menandai objek gen0 / 1 yang dipegang langsung oleh objek generasi yang lebih lama. Pekerjaan mencuri di seluruh utas mempersingkat jeda GC sementara untuk skenario di mana beberapa utas GC membutuhkan waktu lebih lama untuk menandai daripada yang lain. Selain itu, bagian dari fitur Pinned Object Heap (POH) telah diimplementasikan, bagian internal untuk pengumpulan sampah, untuk memungkinkan kolektor mengelola objek yang disematkan secara terpisah. Ini untuk menghindari efek negatif dari objek yang disematkan pada tumpukan generasi.

Pratinjau 1, dirilis 16 Maret, termasuk peningkatan kinerja ekspresi reguler serta peningkatan kualitas kode di RyuJIT.

Karena rilis produksi pada November 2020, .NET 5 diatur untuk menyertakan:

  • ASP.NET Core, kerangka kerja sumber terbuka untuk aplikasi web.
  • Teknologi akses data Entity Framework Core.
  • WinForms.
  • WPF (Yayasan Presentasi Windows).
  • Model perangkat aplikasi seluler Xamarin.
  • ML.NET.

Microsoft mengatakan bahwa .NET 5 akan menyediakan satu platform terpadu untuk membangun semua jenis aplikasi. Perusahaan mengarahkan setengah dari lalu lintas ke lalu lintas situs web .NET ke versi .NET 5 sebagai kasus uji, menggunakan penyeimbangan beban Azure. 

Microsoft menganjurkan agar pengembang membangun aplikasi baru dengan .NET Core 3.1 dan kemudian memigrasikannya ke .NET 5. Perusahaan mencatat bahwa aplikasi .NET Framework dapat dibiarkan di .NET Framework, yang akan tetap didukung selama Windows itu sendiri didukung.