Common Language Runtime menyediakan infrastruktur yang umum pada semua bahasa .NET. Infrastruktur ini bertanggung jawab mengambil kontrol atas eksekusi aplikasi dan mengatur tugas seperti manajemen memori, akses ke sumber sistem, layanan skuritas, dan lain sebagainya. Infrastruktur ini menjadi penjembatan antara bahasa poemrograman Win32 yang berbeda sebab semua bahasa .NET memiliki kemungkinan yang sama. Selain itu, Common Language Runtime memungkinkan aplikasi untuk menjalankan dalam lingkungan yang ter’managed’ alias dikelola. Kata ‘managed’ (dikelola) adalah dasar pengembangan .NET seperti yang dijelaskan sebentar lagi.
Menulis ‘managed code’
Saat berbicara mengenai pengembangan Visual Basic 2010 dan, lebih umum, disebut .NET, anda mungkin mendengar mengenai menulis ‘managed code’. Sebelum versi pertama dari .NET (atau masih dengan lingkungan pengembangan bukan .NET), pengembang (developer) hanya satu-satunya orang yang bertanggung jawab untuk berinteraksi dengan sumber sistem (System resources) dan sistem operasi. Sebagai contoh, mengurusi akses bagian sistem operasi atau mengelola alokasi memori untuk objek adalah tugas bahwa developer harus pertimbangkan. Dengan kata lain, aplikasi bisa interaksi secara langsung dengan sistem, namun seperti yang mudah dimengerti pendekatan ini memiliki beberapa batasan besar baik karena isu skuritas maupun karena kerusakan menjadi sebuah masalah yang berbahaya. .NET Framework menyediakan lingkungan yang terkelola (managed). Hal ini berarti bahwa aplikasi komunikasi dengan .NET Framework bukan dengan sistem operasi, dan runtime .NET bertanggung jawab mengelola eksekusi aplikasi, termasuk manajemen memori, manajemen resource, dan akses ke resource sistem. Sebagai contoh, Common Language Runtime mampu melindungi aplikasi dari mengakses resource sistem yang khusus jika tidak dipandang sebagai ‘full-trusted’ menurut zona skuritas .NET.
Kita masih bisa interaksi secara langsung dengan sistem operasi, sebagai contoh, meminta Windows APIs (juga dikenal dengan Platform Invoke atau P/Invoke). Teknik ini diketahui sebagai menulis ‘unmanaged code’ yang seharusnya digunakan hanya ketika sangat diperlukan. Topik ini akan didiskusikan pada bagiannya sendiri.
Menulis ‘managed code’ dan adanya Common Language Runtime juga mempengaruhi bagaimana aplikasi diproduksi oleh Compiler.
.NET Assemblies
Pada lingkungan pengembangan klasik Win32, seperti Visual Basic 6 atau Visual C++, source code diuraikan oleh Compiler yang memproduksi file binary executable yang bisa secara langsung diinterpretasikan dan dijalankan oleh sistem operasi. Hal ini mempengaruhi baik aplikasi standalone maupun dynamic/type libraries. Sebenarnya, aplikasi Win32 dibangun dengan Visual Basic 6 dan C++, menggunakan runtime, namun jika punya aplikasi yang dikembangkan dengan bahasa pemrograman yang berbeda, butuh menginstal runtime yang sesuai. Pada pengembangan .NET segala sesuatunya sungguh berbeda. Bagaimanapun juga, apikasi yang dibangun dengan bahasa .NET, Compiler menghasilkan assembli, yang merupakan sebuah file berisi kode eksekusi .NET dan disusun pada dasarnya oleh dua jenis elemen: kode MSIL dan metadata. MSIL kependekan dari Microsoft Intermediate Language dan merupakan bahasa pemrograman asembli tingkat tinggi yang juga berorientasi objek, menyediakan sekumpulan instruksi yang CPU-independent (daripada membangun executable yang mengimplementasikan sekumpulan instruksi CPU-dependent). MSIL merupakan bahasa umum dalam arti bahwa tugas pemrograman yang ditulis dalam bahasa .NET yang berbeda menghasilkan kodel IL yang sama. Metadata merupakan sekumpulan informasi yang berhubungan dengan tipe yang diimplementasikan dalam kode. Seperti informasi yang berisi signature, fungsi dan prosedur, member dalam tipe, dan member dalam tipe bereferensi eksternal. Pada dasarnya, tujuan metadata adalah mendeskripsikan kode ke .NET Framework. Nyatanya, meskipun asembli bisa memiliki ekstensi file .exe, disebabkan oleh struktur yang dijelaskan, dia tak bisa secara langsung dieksekusi oleh sistem operasi. Pada kenyataannya, ketika menjalankan aplikasi .NET sistem operasi bisa mengenalinya sebagai asembli .NET (karena antara .NET dan Windows ada hubungan yang erat) dan meminta Compiler ‘just-in-time’.
Proses Eksekusi dan Compiler ‘Just-in-time’
Compiler .NET menghasilkan asembli yang menyimpan kode IL dan metadata. Ketika menjalankan asembli untuk eksekusi, .NET Framework mempaket semua informasi dan menerjemahkannya menjadi executable yang mana sistem operasi mampu mengerti dan menjalankannya. Tugas ini merupakan tanggung jawab dari Compiler ‘Just-in-Time’ (JIT Compiler). JIT Compiler mengkode dengan cepat sesaat sebelum eksekusinya dan siap mengkopile kode untuk siap dieksekusi. Dia bertindak pada level method. Hal ini berarti dia pertama-tama mencari entry point aplikasi (khususnya sub main) dan kemudian mengkompile prosedur dan fungsi lainnya (method dalam terminologi .NET) yang dirujuk dan diminta oleh entry point dan seterusnya, sesaat sebelum kode dieksekusi. Jika anda memiliki kode yang dinyatakan di dalam asembli eksternal, sesaat sebelum method dieksekusi Compiler JIT memanggil asembli ke dalam memori dan kemudian mengkompile kodenya. Tentu saja memanggil asembli eksternal ke dalam memori membutuhkan waktu dan mempengaruhi performa, namun itu bisa menjadi ide bagus untuk menempatkan method yang jarang digunakan dalam asembli eksternal, cara yang sama seperti itu bisa menjadi ide bagus untuk menempatkan kode yang jarang digunakan dalam metode yang terpisah.
0 comments:
Posting Komentar