Meneroka Masa Jalan Bahasa Dinamik di .Net

Bahasa yang ditaip secara statik adalah bahasa di mana anda perlu menentukan jenis objek pada masa anda menentukannya. Contoh bahasa yang ditaip secara statik termasuk C #, VB, dan C ++. Sebaliknya, dalam bahasa yang ditaip secara dinamik, jenis objek ditentukan pada waktu runtime - hanya pada saat nilai diberikan kepada jenisnya. Python, Ruby, dan JavaScript adalah contoh bahasa yang ditaip secara dinamik.

DLR (Dynamic Language Runtime) berjalan di atas CLR (Common Language Runtime) dan menambah dinamisme ke persekitaran yang diuruskan .Net - anda boleh menggunakannya untuk menerapkan ciri dinamik dalam aplikasi anda. Pada dasarnya, DLR memungkinkan interoperabilitas antara bahasa yang ditaip secara statik dan yang ditaip secara dinamik dalam konteks CLR. Anda boleh menggunakan DLR untuk berkongsi perpustakaan dan objek dengan bahasa dinamik. Dalam artikel ini saya akan memberikan gambaran keseluruhan persekitaran Dynamic Language Runtime di Microsoft .Net.

Anda boleh mendapatkan versi sumber terbuka DLR dari Codeplex.

Apakah DLR itu?

DLR adalah hasil usaha Microsoft untuk menjalankan perkhidmatan di atas CLR dan memberikan interoperabilitas antara bahasa yang ditaip secara statik dan dinamik. Sokongan untuk persekitaran Dynamic Language Runtime difasilitasi oleh ruang nama System.Dynamic. MSDN menyatakan: "Waktu operasi bahasa dinamik (DLR) adalah persekitaran waktu proses yang menambahkan sekumpulan perkhidmatan untuk bahasa dinamik ke runtime bahasa umum (CLR). DLR menjadikannya lebih mudah untuk mengembangkan bahasa dinamik untuk dijalankan di .Net Framework dan untuk menambahkan ciri dinamik ke bahasa yang ditaip secara statik. "

Bagaimana ia bermanfaat?

Perkhidmatan yang disediakan oleh DLR termasuk sokongan untuk sistem jenis dinamik, model hosting standard serta penjanaan dan pengiriman kod dinamik. Sekilas, faedah yang diberikan oleh DLR termasuk:

  1. Memberi sokongan untuk ciri dinamik dalam bahasa yang ditaip secara statik. Dengan adanya DLR, anda boleh membuat objek yang ditaip secara dinamik dan menggunakannya bersama dengan objek yang ditaip secara statik dalam aplikasi anda.
  2. Membolehkan port lancar bahasa dinamik ke .Net Framework. DLR membolehkan anda mengangkut bahasa dinamik ke dalam .Net Framework dengan mudah. Untuk memanfaatkan ciri-ciri DLR, semua bahasa dinamis yang perlu Anda miliki adalah kemampuan untuk menghasilkan pohon ekspresi dan rutin penolong runtime.
  3. Memudahkan perkongsian perpustakaan dan objek. DLR membolehkan anda membuat objek dan perpustakaan dalam satu bahasa untuk diakses dari bahasa lain.
  4. Memberi sokongan untuk penghantaran dan pemanggilan kaedah dinamik. DLR memberikan sokongan untuk pemanggilan dan pengiriman kaedah dinamik menggunakan caching polimorfik canggih.

Subsistem Masa Jalan Bahasa Dinamik

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

  1. Pokok ekspresi - DLR menggunakan pokok ekspresi untuk mewakili semantik bahasa.
  2. Caching site call - kaedah panggilan menggunakan objek dinamik disimpan dalam memori sehingga DLR dapat menggunakan sejarah cache untuk panggilan berikutnya ke kaedah yang sama untuk pengiriman yang lebih cepat.
  3. Interoperabiliti objek dinamik - DLR membolehkan interoperabiliti antara bahasa yang ditaip secara statik dan dinamik. DLR merangkumi koleksi jenis - kelas dan antara muka di ruang nama System.Dynamic. Anda boleh memanfaatkan antara muka IDynamicMetaObjectProvider dan kelas DynamicMetaObject, DynamicObject, dan ExpandoObject untuk membuat kerangka dinamik.

Pengikat Bahasa

Pengikat bahasa dalam DLR membantunya bercakap dengan bahasa lain. Jadi, untuk setiap bahasa yang dinamik, anda biasanya mempunyai pengikat yang dapat berinteraksi dengannya. Sebagai contoh berikut adalah pengikat yang biasa digunakan dalam DLR.

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

Kata kunci "dinamik"

Anda boleh memanfaatkan kata kunci dinamik untuk mengakses objek dinamik. Kata kunci dinamik pertama kali diperkenalkan dalam .Net Framework 4. Ia membolehkan aplikasi anda beroperasi dengan jenis dinamik. Oleh itu, anda boleh menggunakan kata kunci dinamik untuk mengakses objek COM atau objek yang dibuat dalam bahasa dinamik seperti, Python, Ruby atau JavaScript.

Berikut adalah coretan kod yang menggambarkan bagaimana kata kunci dinamik dapat digunakan.

menggunakan System.Dynamic;

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

Kami tidak perlu lagi menggunakan pantulan untuk mengakses objek COM - kod anda jauh bersih tanpa kod pantulan yang sebaliknya anda harus menulis tanpa kata kunci dinamik.

Bacaan yang dicadangkan

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