Menjelajahi Runtime Bahasa Dinamis di .Net

Bahasa yang diketik secara statis adalah bahasa yang Anda perlukan untuk menentukan jenis objek pada saat Anda menentukannya. Contoh bahasa yang diketik secara statis termasuk C #, VB, dan C ++. Sebaliknya, dalam bahasa yang diketik secara dinamis, jenis objek ditentukan saat runtime - hanya pada saat nilai ditetapkan ke jenis tersebut. Python, Ruby, dan JavaScript adalah contoh bahasa yang diketik secara dinamis.

DLR (Dynamic Language Runtime) berjalan di atas CLR (Common Language Runtime) dan menambahkan dinamisme ke lingkungan terkelola .Net - Anda dapat menggunakannya untuk mengimplementasikan fitur dinamis dalam aplikasi Anda. Intinya, DLR memungkinkan interoperabilitas antara bahasa yang diketik secara statis dan bahasa yang diketik secara dinamis di dalam konteks CLR. Anda dapat menggunakan DLR untuk berbagi pustaka dan objek dengan bahasa dinamis. Pada artikel ini saya akan menyajikan gambaran umum lingkungan Dynamic Language Runtime di Microsoft .Net.

Anda bisa mendapatkan versi open source DLR dari Codeplex.

Apa itu DLR?

DLR adalah hasil dari upaya Microsoft untuk menjalankan layanan di atas CLR dan menyediakan interoperabilitas di antara bahasa yang diketik secara statis dan dinamis. Dukungan untuk lingkungan Dynamic Language Runtime difasilitasi oleh namespace System.Dynamic. MSDN menyatakan: "Runtime bahasa dinamis (DLR) adalah lingkungan runtime yang menambahkan sekumpulan layanan untuk bahasa dinamis ke runtime bahasa umum (CLR). DLR membuatnya lebih mudah untuk mengembangkan bahasa dinamis untuk dijalankan di .Net Framework dan untuk menambahkan fitur dinamis ke bahasa yang diketik secara statis. "

Bagaimana itu membantu?

Layanan yang disediakan oleh DLR mencakup dukungan untuk sistem tipe dinamis, model hosting standar, serta pembuatan dan pengiriman kode dinamis. Sekilas, manfaat yang diberikan oleh DLR meliputi:

  1. Memberikan dukungan untuk fitur dinamis dalam bahasa yang diketik secara statis. Dengan DLR di tempat, Anda dapat membuat objek yang diketik secara dinamis dan menggunakannya bersama dengan objek yang diketik secara statis di aplikasi Anda.
  2. Memungkinkan porting bahasa dinamis yang mulus ke .Net Framework. DLR memungkinkan Anda memasukkan bahasa dinamis ke dalam .Net Framework dengan mudah. Untuk memanfaatkan fitur DLR, semua bahasa dinamis Anda perlu memiliki kemampuan untuk menghasilkan pohon ekspresi dan rutinitas pembantu runtime.
  3. Memfasilitasi berbagi perpustakaan dan objek. DLR memungkinkan Anda membuat objek dan pustaka dalam satu bahasa untuk diakses dari bahasa lain.
  4. Memberikan dukungan untuk pengiriman dan pemanggilan metode dinamis. DLR menyediakan dukungan untuk pemanggilan dan pengiriman metode dinamis menggunakan cache polimorfik lanjutan.

Subsistem Waktu Proses Bahasa Dinamis

Subsistem DLR pada dasarnya terdiri dari tiga lapisan. Ini termasuk yang berikut:

  1. Pohon ekspresi - DLR menggunakan pohon ekspresi untuk mewakili semantik bahasa.
  2. Panggil cache situs - panggilan metode yang menggunakan objek dinamis di-cache dalam memori sehingga DLR dapat menggunakan riwayat cache untuk panggilan berikutnya ke metode yang sama untuk pengiriman lebih cepat.
  3. Interoperabilitas objek dinamis - DLR memungkinkan interoperabilitas antara bahasa yang diketik secara statis dan dinamis. DLR mencakup kumpulan jenis - kelas dan antarmuka di namespace System.Dynamic. Anda dapat memanfaatkan antarmuka IDynamicMetaObjectProvider dan kelas DynamicMetaObject, DynamicObject, dan ExpandoObject untuk membuat kerangka kerja dinamis.

Pengikat Bahasa

Pengikat bahasa di DLR membantunya untuk berbicara dengan bahasa lain. Jadi, untuk setiap bahasa dinamis Anda biasanya memiliki pengikat yang dapat berinteraksi dengannya. Sebagai contoh, berikut ini adalah pengikat yang umum digunakan di DLR.

  • .Net Binder - ini digunakan untuk berbicara dengan objek .Net
  • JavaScript Binder - ini digunakan untuk berbicara dengan objek yang dibuat dalam objek JavaScript
  • IronRuby Binder - memungkinkan DLR untuk berbicara dengan objek IronRuby
  • IronPython Binder - membantu DLR untuk berbicara dengan objek IronPython
  • COM Binder - ini membantu DLR untuk berbicara dengan objek COM

Kata kunci "dinamis"

Anda dapat memanfaatkan kata kunci dinamis untuk mengakses objek dinamis. Kata kunci dinamis pertama kali diperkenalkan di .Net Framework 4. Ini memungkinkan aplikasi Anda untuk beroperasi dengan tipe dinamis. Jadi, Anda dapat menggunakan kata kunci dinamis untuk mengakses objek COM atau objek yang dibuat dalam bahasa dinamis seperti, Python, Ruby, atau JavaScript.

Berikut ini potongan kode yang menggambarkan bagaimana kata kunci dinamis dapat digunakan.

menggunakan System.Dynamic;

dynamic excelObj = System.Runtime.InteropServices.Marshal.GetActiveObject ("Excel.Application");

Kita tidak perlu lagi menggunakan refleksi untuk mengakses objek COM - kode Anda jauh lebih bersih tanpa kode refleksi yang seharusnya Anda tulis tanpa kata kunci dinamis.

Bacaan yang disarankan

//msdn.microsoft.com/en-us/library/dd233052(v=vs.110).aspx