Apa Itu NET Fungsi Dan Cara Kerjanya

Halo! Selamat datang kembali di “Seri Belajar Dasar Pemrograman Bahasa C#“. Materi kita kali ini adalah tentang apa itu .NET, fungsi, dan cara kerjanya. Sebelum mempelajari materi ini, pastikan Anda sudah menginstall Visual Studio Code / Visual Studio dan juga .NET Core SDK di komputer Anda.

Bayangkan Anda sedang bekerja sebagai tukang kayu di sebuah pabrik furniture.

Bekerja di pabrik furniture pastinya membutuhkan kerangka kerja yang harus diikuti oleh semua pekerja agar pekerjaan menjadi lebih efisien dan menghasilkan produk yang sesuai (menghasilkan berbagai produk furniture). Tentunya kerangka kerja dari sebuah pabrik furniture adalah bagaimana menjadikan potongan balok kayu menjadi beberapa produk furniture seperti meja, kursi, lemari, dan lain-lain.

Untuk memudahkan Anda mengikuti kerangka kerja yang diberikan, Anda dibekali dengan toolbox yang berisi berbagai peralatan seperti gergaji, palu, paku, meteran dan lain-lain. Selain itu, Anda juga diminta untuk mengerjakan pekerjaan Anda di lingkungan kerja yang juga sudah disediakan, yaitu di dalam pabrik/workshop.

Pada suatu saat, Anda diminta untuk membuat sebuah meja makan, sementara teman Anda diminta untuk membuat kursi.

Ketika Anda membuat meja makan tersebut, Anda bisa menggunakan peralatan yang telah disediakan di dalam toolbox. Begitu pula teman Anda, dia juga bisa menggunakan peralatan yang sama untuk membuat sebuah kursi.

Anda tau, meja dan kursi memang dua jenis barang yang berbeda. Namun untuk membuat keduanya, ada beberapa pekerjaan yang umum dilakukan, yaitu menggergaji, memaku, dan mengukur. Maka dari itu, Anda dan teman Anda bisa memanfaatkan set peralatan yang sama untuk dua pekerjaan yang menghasilkan produk berbeda.

Namun, dengan peralatan dan lingkungan kerja yang diberikan di dalam kerangka kerja sebuah pabrik furniture, apakah Anda juga bisa membuat sebuah pesawat terbang? Tentunya tidak, bukan?

Dengan mengacu pada analogi di atas, mari kita pelajari apa itu .NET yang merupakan kerangka kerja yang diberikan oleh Microsoft untuk mempermudah hidup kita sebagai seorang software developer.

.NET sendiri merupakan software development platform yang menyediakan berbagai framework atau kerangka kerja yang disediakan oleh Microsoftuntuk pengembangan perangkat lunak.

Software development platform sendiri merupakan platform yang menyediakan segala sesuatu yang dibutuhkan untuk mengembangkan sebuah aplikasi perangkat lunak, mulai dari kerangka kerja (framework) sampai dengan proses eksekusinya (runtime).

Sebagai platform, .NET menyediakan beberapa kerangka kerja untuk membuat berbagai jenis aplikasi seperti aplikasi web, mobile, desktop, sampai dengan aplikasi IoT atau Artificial Intelegence.

Seperti halnya sebuah kerangka yang membatasi bentuk suatu benda, maka jenis aplikasi apa saja yang bisa kita kembangkan, nantinya juga akan terbatas tergantung dari kerangka kerja .NET yang kita pilih.

Kembali ke analogi pabrik furniture di atas, menggunakan kerangka kerja di sebuah pabrik furniture juga memberi kita batasan. Kita tidak bisa membuat sesuatu selain produk furniture atau setidaknya produk-produk berbahan kayu, bukan?

Begitu pula, ketika kita sudah memilih salah satu dari beberapa kerangka kerja yang disediakan .NET, konsekuensinya kita tidak bisa membuat aplikasi di luar kerangka kerja dari implementasi tersebut.

Misalnya ketika memilih ASP.NET sebagai kerangka kerja, kita hanya bisa mengembangkan aplikasi berbasis web seperti mengembangkan Web API. Ketika memilih Xamarin, kita hanya bisa mengembangkan aplikasi berbasis mobile. Begitu juga ketika memilih Windows Form atau WPF, kita hanya bisa mengembangkan aplikasi desktop di sistem operasi Windows.

Macam-Macam Implementasi .NET
Pada akhir tahun 2000, Microsoftmerilis generasi pertama dari .NET Framework, yaitu .NET 1.0.

Sampai sekarang, .NET Framework sendiri bertujuan untuk menjadi sebuah platform yang menyediakan berbagai kerangka kerja untuk pengembangan aplikasi yang menargetkan sistem operasi Windows, seperti WPF (Windows Presentation Foundation), UWP (Universal Windows Platform), Windows Form, dan ASP.NET (Aplikasi berbasis web).

Artinya, aplikasi yang dikembangkan menggunakan platform .NET Framework hanya bisa dikompilasi dan dijalankan di sistem operasi Windows saja.

Untuk mengatasi itu, di akhir tahun 2014, Microsoft kembali merilis sebuah implementasi .NET yang tujuannya adalah menjadi platform yang menyediakan kerangka kerja untuk pengembangan aplikasi yang menargetkan berbagai macam sistem operasi seperti Windows, Linux, dan Mac. Implementasi .NET ini kemudian dikenal sebagai .NET Core.

Tidak berhenti di situ, pada awal tahun 2016, Microsoftkembali mengumumkan bahwa Mono Project yang sebelumnya telah dikembangkan oleh para engineer di Microsoft, kini menjadi bagian dari .NET Foundation. Pengumuman ini tidak lama berselang dari proses finalisasi akuisisi terhadap Xamarin di bulan Maret 2016.

Sejak itu, dengan menggunakan Mono for Xamarin sebagai kerangka kerja, kita bisa mengembangkan aplikasi native untuk Android dan iOS dengan kode program dari bahasa pemrograman yang sama (C# adalah bahasa pemrograman yang umum digunakan).

Pada saat bekerja membuat furniture, Anda disediakan linkungan kerja dan berbagai peralatan yang memudahkan Anda bekerja.

Bagaimana dengan .NET? Apa saja komponen-komponen .NET yang bisa membuat pekerjaan kita sebagai software developer menjadi lebih mudah?

.NET memiliki dua komponen utama, yaitu sebuah mesin virtual bernama Common Language Runtime (CLR) dan juga kumpulan pustaka (toolbox) bernama Base Class Library (BCL) untuk .NET Framework atau Core Library untuk .NET Core.

Base Class Library (BCL) atau Core Library
BCL (.NET Framework) atau Core Library (.NET Core) ini bisa kita bayangkan seperti toolbox yang berisi bermacam-macam peralatan di pabrik furniture.

Ketika kita perlu memotong papan kayu, kita tinggal memakai gergaji yang sudah disediakan di dalam toolbox. Kita tidak perlu membuat gergajinya terlebih dulu agar bisa memotong papan kayu, bukan?.

Kebayang kan kalau setiap pekerja di pabrik tersebut harus membuat gergajinya terlebih dulu?

Begitu pula ketika kita ingin mengembangkan sebuah aplikasi, .NET telah menyediakan berbagai peralatan untuk melakukan pekerjaan-pekerjaan yang umum seperti menampilkan tulisan di layar, menulis atau membaca file, melakukan HTTP request, mengakses database, dan lain-lain.

CLR merupakan sebuah mesin virtual yang menyediakan runtime environmentuntuk aplikasi .NET.

Runtime environment sendiri adalah lingkungan di mana sebuah aplikasi dijalankan. Ketika sebuah aplikasi dijalankan, maka aplikasi tersebut bisa dikatakan berada pada kondisi runtime. Pada saat sebuah aplikasi berada pada kondisi runtime inilah “magic” dari CLR akan mengambil perannya.

CLR sendiri memiliki beberapa komponen yang memiliki tugasnya masing-masing, antara lain:

Garbage Collector (GC). Fungsi dari GC adalah untuk mengelola siklus hidup data-data pada sebuah aplikasi yang dialokasikan di memori heap. Dengan adanya GC, kita sebagai developer tidak perlu terlalu pusing memikirkan bagaimana membebaskan sebuah memori dari data yang sudah tidak lagi digunakan di dalam sebuah aplikasi. Ini adalah kemewahan yang tidak akan kita dapatkan ketika mengembangkan aplikasi dengan bahasa pemrograman yang tidak compliant dengan .NET, seperti C dan C++. (Catatan: C++.NET adalah versi .NET compliant dari C++ sehingga bisa dijalankan di platform .NET)

Just-In-Time Compiler (JIT). JIT adalah ujung tombak dari CLR yang membuat sebuah aplikasi .NET bisa dijalankan oleh CPU. Setelah ini, kita akan membahas bagaimana JIT melakukan tugasnya.

Apa Yang Dimaksud Dengan Common Language?

Tujuan utama dari .NET adalah untuk mendukung integrasi bahasa pemrograman agar sebuah aplikasi yang dijalankan di platform .NET bisa ditulis dengan bahasa pemrograman apapun. Lebih jauh lagi, sebuah aplikasi atau class library yang ditulis dengan bahasa pemrograman yang berbeda harus mampu berinteraksi dan memahami satu sama lainnya.

Contohnya, apabila kita membuat sebuah class library dengan bahasa pemrograman VB.NET, maka class library tadi harus bisa digunakan sebagai referensi oleh sebuah aplikasi yang ditulis dengan bahasa pemrograman C#.

Namun, bukankah dua bahasa pemrograman berbeda biasanya memiliki sistem tipe data yang berbeda-beda pula? Misalnya, data dengan tipe bilangan bulat dideklarasikan sebagai int di C#, sedangkan di VB.NET dideklarasikan sebagai integer.

Selain itu, aturan sintaksis (aturan penulisan kode program) dari setiap bahasa pemrograman juga berbeda-beda. Contohnya, C# dan VB.NET menggunakan sintaks yang berbeda untuk melakukan perulangan dari 0 sampai 9 dan menampilkan hasilnya ke layar monitor seperti kode program di bawah ini.

using System;
class Program
{
static void Main()
{ int i = 0; while (i

Imports System
Class Program
Private Shared Sub Main() Dim i As Integer = While i

Jadi bagaimana mungkin sebuah class library yang ditulis dengan Visual Basic bisa dikonsumsi/digunakan oleh kode program yang ditulis dengan C#?

Hal ini dimungkinkan dengan adanya Common Type System (CTS) dan Common Language Spesification (CLS) yang merupakan spesifikasi yang mengatur bagaimana sebuah kode program seharusnya dikompilasi menjadi satu kode yang sama satu sama lainnya.

CTS bertanggung jawab untuk memahami semua sistem tipe data dari semua bahasa pemrograman di .NET dan mengkonversikannya ke sebuah format umum (common format) yang dapat dipahami oleh CLR (maka dari itu disebut Common Language Runtime, yaitu runtime environment untuk kode program dengan format umum).

Contohnya, int di C# dan integer di VB.NET akan dikonversi menjadi int32 yang merupakan format umum untuk tipe data bilangan bulat di platform .NET.

Sementara itu, CLS bertanggung jawab untuk mengkonversi aturan sintaksis dari bahasa pemrograman di .NET ke sebuah format sintaksis yang umum (common syntax). Aturan sintaksis yang bisa dikonversi ke format yang bisa dipahami dan dijalankan oleh CLR disebut dengan Managed Code atau kode yang dikelola oleh CLR. Sementara yang tidak bisa menghasilkan format umum disebut dengan Unmanaged Code. Unamanaged Code ini nantinya dikelola langsung oleh Sistem Operasi di mana kode program tersebut dijalankan.

Agar sebuah sebuah bahasa pemrograman nantinya bisa dijalankan oleh CLR, maka bahasa pemrograman tersebut harus mengikuti spesifikasi dari .NET. Bahasa pemrograman yang bisa dijalankan oleh CLR di platform .NET disebut dengan .NET compliant. Meskipun ada lebih dari 20 Bahasa pemrograman yang termasuk .NET compliant, namun yang umum digunakan adalah C#, VB.NET, dan F#.

Mengenal Intermediate Language
Ketika kita membuat sebuah aplikasi dengan bahasa pemrograman C++, maka kode program tersebut akan langsung dikompilasi atau dikonversi menjadi kode program yang dimengerti oleh CPU. Kode program hasil konversi ini disebut dengan kode native atau bahasa mesin.

Masalahnya adalah ketika kita mengkompilasi sebuah kode program di Sistem Operasi Windows dengan arsitektur x86 (32 bit), hasil kompilasi kode program tersebut bahkan tidak bisa dijalankan di Sistem Operasi Windows dengan arsitektur x64 (64 bit).

Ketika mengkompilasi sebuah kode program, compiler akan menambahkan informasi seperti, apa arsitektur Sistem Operasi dan Hardware yang digunakan untuk mengkompilasi kode program tersebut. Sehingga, kode native yang dihasilkan adalah spesifik untuk arsitektur Sistem Operasi dan hardware tersebut.

Seperti yang sudah kita pelajari sebelumnya, sebuah kode program .NET akan dikompilasi ke sebuah format umum terlebih dahulu supaya bisa dijalankan dan dikelola oleh CLR. Kode dengan format umum ini disebut dengan Intermediate Language (IL).

Contohnya, kode program untuk melakukan perulangan dari 0 sampai 9 yang ditulis dengan bahasa pemrograman C# dan VB.NET sebelumnya, akan menghasilkan kode IL yang identik seperti berikut ini.

.method private hidebysig static void Main() cil managed
{
.entrypoint
.maxstack .locals init ( [0] int32 num)
L_0000: ldc.i4. L_0001: stloc. L_0002: br.s L_000e
L_0004: ldloc. L_0005: call void [mscorlib]System.Console::WriteLine(int32)
L_000a: ldloc. L_000b: ldc.i4. L_000c: add
L_000d: stloc. L_000e: ldloc. L_000f: ldc.i4.s L_0011: blt.s L_ L_0013: ret
}

Namun yang perlu dipahami adalah, kode IL di atas tidak bisa dimengerti oleh CPU. Pada dasarnya, CPU hanya memahami kode native atau bahasa mesin saja.

Lalu bagaimana kode IL di atas dapat dipahami dan dijalankan oleh CPU?

Di sini lah peran dari JIT dimulai. JIT-lah yang melakukan “magic“-nya dengan mengkonversi kode IL ke kode native atau bahasa mesin sesuai arsitektur Sistem Operasi dan hardware di mana aplikasi tersebut dijalankan.

Proses Kompilasi dan Eksesuksi di .NET
Untuk merangkum semua yang sudah kita pelajari di atas, mari kita perhatikan bagaimana proses kompilasi kode program di .NET dari awal sampai eksekusi di CPU.

Dengan proses kompilasi seperti pada diagram di atas, maka kita tidak perlu lagi mengkhawatirkan lingkungan (arsitektur OS, hardware) di mana kode program tersebut dikompilasi dan di mana aplikasi kita dijalankan.

Kode IL sama sekali tidak memuat informasi apapun mengenai lingkungan di mana sebuah kode program dikompilasi (platform agnostic).

Nantinya pada saat runtime, JIT lah yang bertugas mengenali lingkungan di mana sebuah aplikasi .NET dijalankan. Lalu, JIT akan menambahkan informasi tersebut ke dalam kode native atau bahasa mesin yang dia hasilkan.

.NET merupakan sebuah platform yang digunakan sebagai kerangka kerja untuk mengembangkan sebuah aplikasi. Dengan menggunakan .NET sebagai kerangka kerja, kita dibekali dengan kumpulan Base Class Library dan juga sebuah mesin virtual bernama CLR.

Pada saat sebuah aplikasi berada pada kondisi runtime, dengan GC dan JIT, CLR mengambil peran penting untuk mengelola proses eksekusi aplikasi tersebut.

CLS dan CTS memungkinkan berbagai bahasa pemrograman untuk digunakan di platform .NET. Selain itu, CLS dan CTS juga mendukung terwujudnya interoperabilitas antar bahasa pemrograman. Hal itu dikarenakan kompilasi dari setiap bahasa pemrograman menghasilkan format kode yang sama yaitu kode IL.

Menggunakan .NET sebagai platform, membuat kita bisa mengkompilasi kode program dan menjalankan sebuah aplikasi di platform atau arsitektur Sistem Operasi manapun.

Jika Anda merasa kesulitan dalam memahami materi ini, jangan menyerah! Tulis kesulitan atau pertanyaan Anda di kolom komentar, saya akan membantu.}}