Apa itu "kode terkelola"?

Saat bekerja dengan .NET, Anda akan sering menemukan istilah "kode terkelola". Artikel ini menjelaskan apa arti kode terkelola dan memberikan informasi tambahan di sekitarnya.

Sederhananya, kode terkelola hanyalah bahwa: kode yang eksekusinya dikelola oleh runtime. Dalam hal ini, runtime bahasa umum yang dimaksud disebut Common Language Runtime atau CLR, terlepas dari implementasinya (misalnya, Mono, .NET Framework, atau .NET Core/.NET 5+). CLR bertugas mengambil kode terkelola, mengkompilasinya ke dalam kode mesin dan kemudian mengeksekusinya. Selain itu, runtime menyediakan beberapa layanan penting seperti manajemen memori otomatis, batas keamanan, dan keamanan jenis.

Kontraskan ini dengan cara Anda akan menjalankan program C/C++, juga disebut "kode tidak terkelola". Di dunia yang tidak terkelola, programmer bertanggung jawab atas hampir semua hal. Program aktual, pada dasarnya adalah biner yang dimuat sistem operasi (OS) ke dalam memori dan dimulai. Segala sesuatu yang lain, mulai dari manajemen memori hingga pertimbangan keamanan adalah beban programmer.

Kode terkelola ditulis dalam salah satu bahasa tingkat tinggi yang dapat dijalankan di atas .NET, seperti C#, Visual Basic, F# dan lainnya. Ketika Anda mengkompilasi kode yang ditulis dalam bahasa tersebut dengan pengkompilasi masing-masing, Anda tidak mendapatkan kode mesin. Anda mendapatkan kode Bahasa Perantara yang runtime bahasa umum kemudian mengkompilasi dan mengeksekusi. C++ adalah satu pengecualian untuk aturan ini, karena juga dapat menghasilkan biner asli dan tidak terkelola yang berjalan pada Windows.

Bahasa Perantara & eksekusi

Apa itu "Bahasa Perantara" (atau IL singkatnya)? Ini adalah produk kompilasi kode yang ditulis dalam bahasa .NET tingkat tinggi. Setelah Anda mengkompilasi kode Anda yang ditulis dalam salah satu bahasa ini, Anda akan mendapatkan biner yang terbuat dari IL. Penting untuk dicatat bahwa IL independen dari bahasa tertentu yang berjalan di atas runtime bahasa umum; bahkan ada spesifikasi terpisah untuk itu yang dapat Anda baca jika Anda sangat cenderung.

Setelah Anda menghasilkan IL dari kode tingkat tinggi Anda, Kemungkinan besar Anda ingin menjalankannya. Di sinilah CLR mengambil alih dan memulai proses kompilasi Just-In-Time, atau JIT-ing kode Anda dari IL ke kode mesin yang benar-benar dapat dijalankan pada CPU. Dengan cara ini, CLR tahu persis apa yang dilakukan kode Anda dan dapat mengelolanya secara efektif.

Bahasa Perantara terkadang juga disebut Common Intermediate Language (CIL) atau common intermediate language (CIL).

Interoperabilitas kode tidak terkelola

Tentu saja, CLR memungkinkan melewati batas antara dunia terkelola dan tidak terkelola, dan ada banyak kode yang melakukan itu, bahkan di pustaka kelas .NET. Ini disebut interoperabilitas, atau interop untuk singkatnya. Ketentuan ini akan memungkinkan Anda untuk, misalnya, membungkus pustaka yang tidak dikelola dan memanggilnya. Namun, penting untuk dicatat bahwa setelah Anda melakukan ini, ketika kode melewati batas runtime bahasa umum, manajemen eksekusi yang sebenarnya lagi berada di tangan kode yang tidak dikelola, dan dengan demikian berada di bawah batasan yang sama.

Mirip dengan ini, C# adalah salah satu bahasa yang memungkinkan Anda menggunakan konstruksi yang tidak dikelola seperti pointer langsung dalam kode dengan menggunakan apa yang dikenal sebagai konteks yang tidak aman, yang menunjuk bagian kode yang eksekusinya tidak dikelola oleh CLR.

Sumber daya lainnya