Saya baru-baru ini beruntung mengobrol dengan Chris Bacon, yang menulis DotNetAnywhere (versi alternatif dari .NET Runtime), dan saya dengan cerdik berkata:
... Anda mungkin salah satu dari sedikit yang membuat runtime .NET mereka sendiri, yang mengagumkan!
jika kita mengecualikan mereka dengan gaji, mis. Insinyur Microsoft / Mono / Xamarin, jumlahnya sangat sedikit.

Ini adalah terjemahan dari Matt Warren ( A History of. NET Runtimes ). Agar tidak menerbitkan ulang, saya akan pergi apa adanya
Dan kemudian saya berpikir: berapa banyak total .NET runtimes ada? Pertama, saya membuat daftar sendiri, dan kemudian menghubungkan tim peneliti bayaran tinggi - pelanggan saya - untuk kasus ini:
Untuk posting ini, dengan .NET runtime, maksud saya segala sesuatu yang diimplementasikan berdasarkan standar ECMA-335 untuk .NET (untuk informasi lebih lanjut, lihat di sini ). Saya tidak tahu apakah ada definisi yang lebih tepat atau cara untuk secara resmi mengkonfirmasi kepatuhan, tetapi dalam praktiknya ini berarti runtime mendukung exe / dll. File NET yang dibuat oleh kompiler C # / F # / VB.NET.
Segera setelah daftar siap, saya naik ke Wikipedia (lihat daftar sumber). Hasilnya adalah urutan kronologis berikut:

Pembuat garis waktu
(Untuk versi interaktif ikuti tautannya)
Jika saya melewatkan runtimes, beri tahu saya.
Untuk memudahkan persepsi kronologi, saya menempatkan masing-masing media dalam salah satu kategori berikut:
- Microsoft .NET frameworks
- Microsoft Runtimes lainnya
- Runtime Mono / Xamarin
- Runtime kompilasi AOT
- Proyek Komunitas
- Proyek penelitian
Sisa posting dikhususkan untuk deskripsi rinci tentang runtimes yang berbeda. Mengapa mereka muncul, apa yang mereka bisa dan mengapa membandingkannya.
Microsoft .NET frameworks
Kerangka NET. Microsoft asli muncul di akhir 90-an dan hanya menjadi lebih efisien sejak itu. Baru-baru ini, perusahaan mengubah arahnya dengan mengumumkan rilis .NET Core framework, yang dibedakan dengan cross-platform dan kode sumber terbuka. Selain itu, dengan mengembangkan spesifikasi .NET Standard, Microsoft telah menyediakan interoperabilitas di seluruh lingkungan runtime.
Spesifikasi .NET Standard menyediakan pembagian kode. Itu mendefinisikan set API yang harus tersedia di semua implementasi .NET untuk memenuhi standar. Ini memastikan keseragaman dari semua .NET runtimes dan mencegah fragmentasi di masa mendatang.
Penyimpangan kecil: jika Anda ingin belajar lebih banyak tentang sejarah .NET, saya sarankan mendengarkan Anders Halesberg atau menonton pidato oleh Richard Campbell - ini adalah pendongeng yang sangat keren.
( Podcast juga tersedia . Selain itu, Campbell menulis buku tentang topik yang sama . Jika Anda ingin mempelajari lebih lanjut tentang sejarah pengembangan seluruh ekosistem .NET, dan bukan hanya runtimes, lihat Legenda halaman .NET ).
Microsoft Runtimes lainnya
Selain inti .NET Framework untuk penggunaan luas, Microsoft telah merilis versi lain dari lingkungan untuk tujuan khusus.
.NET Compact Framework
Kerangka kerja Compact (.NET CF) dan Mikro (.NET MF) adalah upaya untuk membuat versi runtime yang lebih pendek untuk perangkat terbatas sumber daya. Misalnya, .NET CF:
... dirancang untuk perangkat seluler atau tertanam dengan sumber daya dalam jumlah terbatas, seperti PDA, ponsel, pengontrol industri, set-top box, dll. NET Framework. Kerangka kerja menggunakan beberapa perpustakaan dari kelas yang sama dengan versi lengkap dari .NET, serta beberapa perpustakaan yang dibuat khusus untuk perangkat seluler, seperti kontrol .NET Compact. Namun, perpustakaan bukan salinan persis dari yang digunakan dalam .NET Framework. Mereka dikurangi untuk mengambil lebih sedikit ruang.
.NET Micro Framework
Kerangka .NET MF bahkan lebih kecil dan:
... adalah untuk perangkat dengan jumlah sumber daya terbatas yang memiliki setidaknya 256 KB memori dan 64 KB RAM. Ini mencakup versi pengurangan .NET CLR dan mendukung pengembangan dalam C # dan Visual Basic .NET, serta debugging (dalam emulator atau perangkat keras) menggunakan Microsoft Visual Studio. NETMF mengimplementasikan satu set .NET base libraries (sekitar 70 kelas dan 420 metode). Perpustakaan khusus untuk aplikasi tertanam telah ditambahkan. Ini adalah perangkat lunak open source gratis yang dirilis di bawah Lisensi Apache 2.0.
Bagi mereka yang ingin mencoba kerangka kerja dalam aksi, Scott Hanselman telah menulis panduan yang sangat baik untuk .NET Micro Framework - Hardware for Software People .
Silverlight
Terlepas dari kenyataan bahwa platform ini dalam mode dukungan (atau bahkan mati / bergerak menuju matahari terbenam, tergantung pada sudut pandang Anda), menarik untuk kembali ke pengumuman asli dan melihat apa yang dimaksudkan Silverlight untuk:
Silverlight adalah modul ekstensi lintas platform, lintas-browser .NET yang dirancang untuk membuat aplikasi Internet yang kaya untuk browser. Pra-bangun yang dirilis minggu ini mendukung Firefox, IE, dan Safari di Mac dan Windows.
Pada tahun 2007, Silverlight 1.0 mengimplementasikan fitur-fitur berikut (platform bahkan bekerja di Linux):
- dukungan untuk codec bawaan untuk memutar file video VC-1 dan WMV, serta file audio dalam format MP3 dan WMA di browser ...;
- Silverlight mendukung kemampuan mengunduh dan memutar konten media secara bertahap dari server web mana pun ...;
- Silverlight juga secara opsional mendukung streaming media terintegrasi ...;
- menggunakan Silverlight Anda dapat membuat antarmuka dan animasi pengguna multifungsi, menggabungkan grafik vektor dan HTML untuk membuat konten yang menarik ...;
- Silverlight membuatnya mudah untuk membuat konten video interaktif yang kaya ...
Juga, seperti yang disarankan dalam komentar, Silverlight ada di Symbian S60
Runtime Mono / Xamarin
Mono muncul sebagai hasil dari upaya Miguel de Icaz dan pengembang lain untuk mendapatkan .NET untuk bekerja di Linux (dari sejarah awal Mono ):
Tidak masalah bagi saya siapa yang pertama, karena saya pikir Mono adalah sarana untuk mencapai tujuan: teknologi yang membantu Linux mendapatkan pijakan di komputer desktop.
Posting yang sama menjelaskan bagaimana semuanya dimulai:
Adapun Mono, peristiwa itu terjadi kira-kira sebagai berikut.
Segera setelah dokumentasi .NET keluar pada Desember 2000, saya menjadi tertarik dengan teknologi ini dan mulai mempelajarinya, seperti orang lain, dari penerjemah bytecode. Namun, saya segera mengalami masalah - kurangnya spesifikasi untuk metadata .
Perubahan terbaru dalam sumber mesin virtual awal keluar pada 22 Januari 2001. Sekitar waktu ini, saya mulai menulis pesan menggunakan milis .NET dan meminta informasi yang hilang tentang format file metadata.
...
Sekitar waktu yang sama, Sam Ruby berusaha meyakinkan anggota komite ECMA untuk menerbitkan deskripsi format file biner, yang bukan bagian dari rencana mereka. Saya tidak tahu bagaimana semuanya berkembang, tetapi pada April 2001, ECMA menerbitkan deskripsi format file.
Seiring waktu, Mono ( sekarang Xamarin ) telah menyebar ke platform lain. Kerangka kerjanya berjalan di Android dan iOS / Mac. Pada Februari 2016, Microsoft mengakuisisi Xamarin. Perlu diingat kolaborasi lama antara Mono / Xamarin dan Unity , yang bertujuan untuk memberikan dukungan untuk C # di Unity . Pada saat yang sama, Unity sekarang menjadi anggota .NET Foundation.
Runtime kompilasi AOT
Saya mengambil lingkungan seperti itu ke kategori yang terpisah, karena secara tradisional. NET menggunakan kompilasi JIT , tetapi seiring waktu, lebih banyak implementasi dengan AOT muncul.
Sejauh yang saya tahu, yang pertama adalah kerangka Mono, di mana kompilasi AOT muncul pada tahun 2006. Selain itu, Microsoft baru-baru ini merilis .NET Native, dan mereka saat ini bekerja pada CoreRT , lingkungan .NET runtime yang dioptimalkan untuk kompilasi AOT.
Proyek Komunitas
Namun, tidak semua .NET runtime dikembangkan oleh Microsoft atau oleh perusahaan yang kemudian dibeli. Ada proyek yang dilaksanakan oleh masyarakat.
- Yang tertua adalah DotGNU Portable.NET . Pengembangannya dimulai bersamaan dengan Mono dengan tujuan "menciptakan seperangkat alat gratis untuk menyusun dan menjalankan aplikasi dalam kerangka CLI ...".
- Kedua, saya akan beri nama DotNetAnywhere , yang dikembangkan hanya oleh satu orang, Chris Bacon. DotNetAnywhere dikenal sebagai runtime awal untuk proyek Blazor. Ini juga merupakan peluang besar untuk melihat apa yang merupakan runtime yang kompatibel dengan NET. Tanpa harus menjelajahi jutaan baris kode yang membentuk CoreCLR !
- Kemudian muncul CosmosOS ( proyek GitHub ), yang bukan hanya runtime .NET, tetapi sistem operasi yang dikelola. Jika Anda ingin tahu lebih banyak, saya sarankan Anda untuk membaca bagian FAQ ini atau melihat “di balik tudung” . Upaya serupa lainnya adalah SharpOS .
- Akhirnya, saya baru saja menemukan CrossNet . Runtime ini "mem-parsing .NET mengumpulkan dan menghasilkan kode C ++ yang tidak dikelola yang dapat dikompilasi oleh kompiler C ++ apa pun." Untuk mempelajari lebih lanjut, lihat dokumentasi dan contoh kode yang dihasilkan.
Proyek penelitian
Sekarang mari kita beralih ke .NET runtime yang sangat sedikit diketahui. Ini adalah proyek penelitian Microsoft yang diluncurkan untuk melihat seberapa banyak fungsionalitas lingkungan eksekusi terkelola dapat diperluas dan tugas apa yang dapat diselesaikan dengan bantuannya. Beberapa hasil penelitian muncul dalam implementasi komersial lingkungan .NET, misalnya Span <T> tumbuh dari proyek Midori .
Implementasi CLI (.NET framework) dari Microsoft, di mana kode sumber tersedia di bawah lisensi Shared Source. Meskipun SSCLI tidak cocok untuk penggunaan komersial karena spesifik perizinan, dengan bantuan programmer dapat menganalisis fitur implementasi banyak. NET libraries dan membuat versi modifikasi dari CLI. Microsoft menyediakan CLI Sumber Bersama sebagai referensi pendidikan CLI.
Menariknya, dengan rilis Rotor, perusahaan ini dapat merilis proyek Gyro , yang memberikan gambaran tentang bagaimana obat generik muncul dalam runtime .NET .
Midori adalah nama kode untuk sistem operasi kode terkelola yang dikembangkan oleh Microsoft bersama dengan Microsoft Research. Dilaporkan bahwa itu bisa menjadi implementasi komersial dari sistem operasi Singularity, sebuah proyek penelitian yang diluncurkan pada tahun 2003 untuk menciptakan sistem operasi yang sangat andal di mana kernel, driver perangkat, dan aplikasi terdiri dari kode yang dikelola. Itu dirancang untuk komputasi paralel dan dapat menjalankan program yang didistribusikan di beberapa node secara bersamaan. Ini juga menerapkan model keamanan berdasarkan menjalankan aplikasi di lingkungan yang terisolasi. Microsoft telah menyarankan beberapa cara yang mungkin untuk bermigrasi dari Windows ke Midori. Pekerjaan pada sistem operasi dihentikan pada tahun 2015, meskipun banyak ide yang diterapkan di dalamnya jatuh ke proyek Microsoft lainnya.
Rupanya, sebagian besar ide dari proyek Midori kembali ke .NET Framework. Anda dapat membaca lebih lanjut tentang ini dengan Joe Duffy dalam serangkaian artikel tentang Midori :
- Kisah tiga perlindungan
- Objek sebagai Kemampuan Aman
- Asinkronkan semuanya
- Kode asli yang aman
- Model kesalahan
- Budaya kinerja
- 15 Tahun Konkurensi
Singularity adalah sistem operasi eksperimental yang dikembangkan oleh Microsoft Research antara 2003 dan 2010. Itu seharusnya menjadi sistem operasi yang sangat andal di mana kernel, driver perangkat, dan aplikasi terdiri dari kode yang dikelola. Keamanan internal menggunakan keamanan jenis alih-alih perlindungan memori perangkat keras.
Dan lingkungan terakhir namun tidak kalah penting adalah Redhawk :
Nama kode untuk eksperimental, versi minimal runtime kode terkelola yang berevolusi menjadi CoreRT.
Referensi ke sumber
Berikut ini adalah artikel Wikipedia yang saya gunakan untuk membuat skala kronologis:
Lebih banyak opsi ditemukan
Net60
Dalam komentarnya, bmforce menyarankan bahwa ada platform lain, Net60. Tidak ada banyak informasi tentang itu, tetapi berhasil menemukan disebutkan di forum + artikel di CodeGuru :
.NET Compact Framework untuk Symbian S60 3rd akhirnya tiba!
Oleh karena itu, Anda dapat memprogram untuk Symbian dalam bahasa apa pun dari Visual studio 2005. (Visual Basic, Visual C #, Visual C ++). DotNet (net60) sendiri terlampir pada pesan, Anda harus masuk dan menginstalnya di telepon. Omong-omong, ia dapat menjalankan file .exe yang ditulis pada Windows mobile .NET CF dari foldernya sendiri!
Cahaya bulan
Tidak disebutkan tentang Moonlight, yang didasarkan pada versi Mono - opensource dari Silverlight:
Moonlight adalah implementasi open source dari Silverlight, dibuat terutama untuk Linux dan sistem operasi Unix / X11 lainnya. Rilis terbaru Moonlight (Moonlight 4 Pratinjau 1) memberikan dukungan untuk set fitur inti Silverlight 3, plus kompatibilitas dengan Silverlight 4.
Blazor
Juga tidak disebutkan adalah proyek Blazor baru, yang memiliki setiap peluang sukses: .NET untuk Web Assembly. Ini digunakan, misalnya, dalam proyek Try .NET , toolkit untuk membuat contoh kode .NET yang dapat dijalankan di browser.
PageFX
Sepertinya benar-benar fantastis bagi saya, tetapi salah satu pengembang proyek PageFX mengetuk saya dan menjatuhkan tautan ke repositori tempat penerjemah dari .NET CIL ke Flash bytecode disimpan. Ini luar biasa :) Penulis proyek ini adalah @todysh
Terjemahan lebih banyak artikel dari Matt Warren