Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
lingkungan runtime bahasa dinamis (DLR) adalah lingkungan runtime yang menambahkan satu set layanan untuk bahasa dinamis ke dalam 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 saat runtime, 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 dinamis adalah Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra, dan Groovy.
Sebagian besar bahasa dinamis memberikan keuntungan berikut bagi pengembang:
- Kemampuan untuk menggunakan perulangan umpan balik cepat (REPL, atau perulangan baca-evaluasi-cetak). Ini memungkinkan Anda memasukkan beberapa pernyataan dan segera menjalankannya untuk melihat hasilnya.
- Dukungan untuk pengembangan top-down dan juga 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 dinamis membuat bahasa skrip yang sangat baik. Pelanggan dapat dengan mudah memperluas aplikasi yang dibuat dengan menggunakan bahasa 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 ini dan memungkinkan interoperasinya dengan bahasa 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 yang menggunakan DLR. Ini memungkinkan pengguna pustaka menulis kode yang lebih sederhana dan lebih alami secara sintetis untuk beroperasi dengan objek dan mengakses anggota objek.
Misalnya, Anda dapat menggunakan kode berikut untuk menambahkan nilai 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 di IronLanguages/dlr repo di GitHub.
IronPython adalah contoh bahasa yang dikembangkan dengan menggunakan DLR.
Keunggulan utama DLR
DLR memberikan keuntungan berikut.
Menyederhanakan porting bahasa dinamis ke .NET
DLR memungkinkan pelaksana bahasa untuk menghindari pembuatan penganalisis leksikal, pengurai, penganalisis semantik, generator kode, dan alat lain yang secara tradisional harus mereka buat sendiri. Untuk menggunakan DLR, bahasa perlu menghasilkan pohon ekspresi , yang mewakili kode tingkat bahasa dalam struktur berbentuk pohon, rutinitas pembantu runtime, dan objek dinamis opsional yang mengimplementasikan antarmuka IDynamicMetaObjectProvider. DLR dan .NET mengotomatiskan banyak analisis kode dan tugas pembuatan kode. Ini memungkinkan pelaksana bahasa untuk berkonsentrasi pada fitur bahasa 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 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 interoperaksi antara bahasa yang ditik secara statis dan dinamis. Misalnya, C# dapat mendeklarasikan objek dinamis yang menggunakan pustaka yang ditulis dalam bahasa dinamis. Pada saat yang sama, bahasa dinamis dapat menggunakan pustaka dari .NET Framework.
Menyediakan pengiriman dan pemanggilan dinamis yang cepat
DLR menyediakan eksekusi operasi dinamis yang cepat dengan mendukung cache polimorfik tingkat lanjut. DLR membuat aturan untuk mengikat operasi yang menggunakan objek ke implementasi runtime yang diperlukan lalu menyimpan 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 CLR untuk mendukung bahasa dinamis yang lebih baik. Layanan-layanan ini mencakup hal-hal berikut:
Pohon ekspresi. DLR menggunakan pohon ekspresi untuk mewakili semantik bahasa. Untuk tujuan ini, DLR telah memperluas pohon ekspresi LINQ untuk menyertakan alur kontrol, penugasan, dan simpul pemodelan bahasa lainnya. Untuk informasi selengkapnya, lihat Expression Trees (C#) atau Expression Trees (Visual Basic).
Penyiapan cache pada lokasi pemanggilan. Situs panggilan dinamis adalah tempat dalam kode tempat Anda melakukan operasi seperti
a + bataua.b()pada objek dinamis. DLR menyimpan karakteristikadanb(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 dan penulis pustaka dinamis. Kelas dan antarmuka ini termasuk IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject, dan ExpandoObject.
DLR menggunakan binder di lokasi pemanggilan untuk berkomunikasi tidak hanya dengan .NET, tetapi juga dengan infrastruktur dan layanan lainnya, seperti COM. Binder menyediakan semantik bahasa dan menentukan cara melakukan operasi di call site dengan menggunakan pohon ekspresi. Hal ini memungkinkan bahasa dinamis dan berjenis 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 tentang IronLanguages/dlr repo di GitHub.
Lihat juga
- ExpandoObject
- DynamicObject
- Runtime Bahasa Umum
- Pohon Ekspresi (C#)
- Pohon Ekspresi (Visual Basic)
- Langkah-langkah : Membuat dan Menggunakan Objek Dinamis