Gambaran umum runtime bahasa dinamis

Runtime bahasa umum bahasa pemrogram dinamis (DLR) adalah lingkungan runtime bahasa umum yang menambahkan serangkaian layanan untuk bahasa pemrogram dinamis ke runtime bahasa umum (CLR). DLR memudahkan untuk mengembangkan bahasa dinamis untuk dijalankan di .NET dan menambahkan fitur dinamis ke bahasa yang ditik secara statis.

Bahasa dinamis dapat mengidentifikasi jenis objek pada waktu proses, sedangkan dalam bahasa yang ditik secara statis seperti C# dan Visual Basic (saat Anda menggunakan Option Explicit On), Anda harus menentukan jenis objek pada waktu desain. Contoh bahasa pemrogram dinamis adalah Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra, dan Groovy.

Sebagian besar bahasa pemrogram dinamis memberikan keuntungan berikut bagi pengembang:

  • Kemampuan untuk menggunakan perulangan umpan balik cepat (REPL, atau perulangan baca-evaluasi-cetak). Kemampuan ini memungkinkan Anda memasukkan beberapa pernyataan dan segera menjalankannya untuk melihat hasil.
  • Dukungan untuk kedua pengembangan top-down dan pengembangan bottom-up yang lebih tradisional. Misalnya, saat Anda menggunakan pendekatan top-down, Anda dapat memanggil fungsi yang belum diimplementasikan lalu menambahkan implementasi yang mendasar saat Anda membutuhkannya.
  • Pemfaktoran ulang dan modifikasi kode yang lebih mudah, karena Anda tidak perlu mengubah deklarasi jenis statis di seluruh kode.

Bahasa pemrogram dinamis membuat bahasa pemrogram pembuatan skrip yang sangat baik. Pelanggan dapat dengan mudah memperluas aplikasi yang dibuat dengan menggunakan bahasa pemrogram dinamis dengan perintah dan fungsionalitas baru. Bahasa dinamis juga sering digunakan untuk membuat situs web dan menguji harness, memelihara farm server, mengembangkan berbagai utilitas, dan melakukan transformasi data.

Tujuan dari DLR adalah untuk memungkinkan sistem bahasa dinamis berjalan pada .NET dan memberi mereka interoperabilitas .NET. DLR menambahkan objek dinamis ke C# dan Visual Basic untuk mendukung perilaku dinamis dalam bahasa pemrogram ini dan memungkinkan interoperasinya dengan bahasa pemrogram dinamis.

DLR juga membantu Anda membuat pustaka yang mendukung operasi dinamis. Misalnya, jika Anda memiliki pustaka yang menggunakan objek XML atau JavaScript Object Notation (JSON), objek Anda dapat muncul sebagai objek dinamis ke bahasa pemrogram yang menggunakan DLR. Hal ini memungkinkan pengguna pustaka menulis kode yang lebih sederhana dan lebih alami secara sintaksis untuk beroperasi dengan objek dan mengakses anggota objek.

Misalnya, Anda dapat menggunakan kode berikut untuk menambah penghitung di XML di C#.

Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);

Dengan menggunakan DLR, Anda dapat menggunakan kode berikut sebagai gantinya untuk operasi yang sama.

scriptobj.Count += 1;

Seperti CLR, DLR adalah bagian dari .NET. Ini tersedia untuk diunduh pada repositori IronLanguages/dlr di GitHub.

IronPython adalah contoh bahasa yang dikembangkan dengan menggunakan DLR.

Keuntungan DLR utama

DLR memberikan keuntungan berikut.

Menyederhanakan porting bahasa dinamis ke .NET

DLR memungkinkan pelaksana bahasa pemrogram untuk menghindari pembuatan penganalisis leksikal, pengurai, penganalisis semantik, penghasil kode, dan alat lain yang secara tradisional harus mereka buat sendiri. Untuk menggunakan DLR, bahasa pemrogram perlu menghasilkan pohon ekspresi, yang mewakili kode tingkat bahasa pemrogram dalam struktur berbentuk pohon, rutinitas pembantu runtime bahasa umum, dan objek dinamis opsional yang mengimplementasikan antarmuka IDynamicMetaObjectProvider. DLR dan .NET mengotomatiskan banyak analisis kode dan tugas pembuatan kode. Otomatisasi ini memungkinkan pelaksana bahasa pemrogram untuk berkonsentrasi pada fitur bahasa pemrogram yang unik.

Mengaktifkan fitur dinamis dalam bahasa yang ditik secara statis

Bahasa .NET yang ada seperti C# dan Visual Basic dapat membuat objek dinamis dan menggunakannya bersama dengan objek yang di ketik secara statis. Misalnya, C# dan Visual Basic dapat menggunakan objek dinamis untuk HTML, Model Objek Dokumen (DOM), dan pantulan.

Memberikan manfaat DLR dan .NET di masa mendatang

Bahasa yang diterapkan dengan menggunakan DLR dapat memperoleh manfaat dari peningkatan DLR dan .NET di masa mendatang. Misalnya, jika .NET merilis versi baru yang memiliki pengumpul sampah yang ditingkatkan atau waktu pemuatan perakitan yang lebih cepat, bahasa yang diterapkan dengan menggunakan DLR segera mendapatkan manfaat yang sama. Jika DLR menambahkan pengoptimalan seperti kompilasi yang lebih baik, performa juga meningkat untuk semua bahasa pemrogram yang diterapkan dengan menggunakan DLR.

Mengaktifkan berbagi pustaka dan objek

Objek dan pustaka yang diterapkan dalam satu bahasa dapat digunakan oleh bahasa lain. DLR juga memungkinkan interoperasi antara bahasa pemrogram yang ditulis secara statis dan dinamis. Misalnya, C# dapat mendeklarasikan objek dinamis yang menggunakan pustaka yang ditulis dalam bahasa pemrogram dinamis. Pada saat yang sama, bahasa pemrogram dinamis dapat menggunakan pustaka dari .NET Framework.

Menyediakan pengiriman dan pemanggilan dinamis yang cepat

DLR menyediakan eksekusi operasi dinamis yang cepat dengan mendukung penembolokan polimorfik tingkat lanjut. DLR membuat aturan untuk mengikat operasi yang menggunakan objek ke implementasi runtime bahasa umum yang diperlukan dan kemudian menyimpan cache aturan ini untuk menghindari komputasi pengikatan yang melelahkan sumber daya selama eksekusi berturut-turut dari kode yang sama pada jenis objek yang sama.

Arsitektur DLR

DLR menambahkan serangkaian layanan ke runtime bahasa umum untuk mendukung bahasa komputer dinamis yang lebih baik. Layanan-layanan ini mencakup yang berikut ini:

  • Pohon ekspresi. DLR menggunakan pohon ekspresi untuk mewakili semantik bahasa pemrogram. Untuk tujuan ini, DLR telah memperluas pohon ekspresi LINQ untuk menyertakan alur kontrol, penugasan, dan node pemodelan bahasa lainnya. Untuk informasi selengkapnya, lihat Pohon Ekspresi (C#) atau Pohon Ekspresi (Visual Basic).

  • Memanggil penembolokan situs. Situs panggilan dinamis adalah tempat dalam kode di mana Anda melakukan operasi seperti a + b atau a.b() pada objek dinamis. DLR menyimpan karakteristik a dan b (biasanya jenis objek ini) dan informasi tentang operasi. Jika operasi seperti itu telah dilakukan sebelumnya, DLR mengambil semua informasi yang diperlukan dari cache untuk pengiriman cepat.

  • Interoperabilitas objek dinamis. DLR menyediakan serangkaian kelas dan antarmuka yang mewakili objek dan operasi dinamis dan dapat digunakan oleh pelaksana bahasa pemrogram dan pembuat pustaka dinamis. Kelas dan antarmuka ini termasuk IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject, dan ExpandoObject.

DLR menggunakan pengikat di situs panggilan untuk berkomunikasi tidak hanya dengan .NET, tetapi dengan infrastruktur dan layanan lain, seperti COM. Pengikat merangkum semantik bahasa pemrogram dan menentukan cara melakukan operasi di situs panggilan dengan menggunakan pohon ekspresi. Hal ini memungkinkan bahasa pemrogram dinamis dan yang ditulis statis yang menggunakan DLR untuk berbagi pustaka dan mendapatkan akses ke semua teknologi yang didukung DLR.

Dokumentasi DLR

Untuk informasi selengkapnya tentang cara menggunakan versi sumber terbuka DLR untuk menambahkan perilaku dinamis ke bahasa, atau tentang cara mengaktifkan penggunaan bahasa dinamis dengan .NET, lihat dokumentasi pada repo IronLanguages/dlr di GitHub.

Lihat juga