Apa hubungan antara Dynamic Language Runtime dan C # 4.0?

11

Katakanlah saya ingin membuat kompiler / juru bahasa dinamis, mungkin seorang juru bahasa Skema, pada platform .NET seperti yang ada saat ini. Apakah saya akan lebih baik menggunakan Dynamic Language Runtime (DLR), atau menggunakan C # 4.0 untuk mengimplementasikan fitur dinamis bahasa saya? Atau apakah saya perlu keduanya?

Saya tahu bahwa ada pekerjaan lain yang dilakukan di bidang ini, khususnya dengan IronScheme dan IronPython . Kedua bahasa tersebut menggunakan DLR; Saya percaya IronPython menggunakan versi terbaru dari DLR (yang kira-kira berumur satu tahun), sementara IronScheme menggunakan garpu yang dimodifikasi awal dari versi awal DLR. Tetapi C # 4.0 tidak tersedia ketika kompiler ini dibuat.

Saya telah melihat karya Rob Conery dengan Massive, menggunakan fitur dinamis C # 4.0; ini cukup mengesankan. Tetapi apakah C # akan bertahan pada upaya skala penuh dari kompiler / intepreter bahasa dinamis? Apakah ada fitur di DLR yang hilang dari C #, atau apakah DLR pada dasarnya digulirkan ke C # 4.0? Apakah saya akan kehilangan fitur penting dari DLR jika saya hanya menggunakan C # 4.0 secara eksklusif?

Robert Harvey
sumber
Saya percaya fitur Net 4.0 Dynamic juga didasarkan pada DLR.
Dave Nay
@ Dave: Saya akan puas dengan tautan, otoritatif saat ini ke artikel yang menjelaskan secara rinci hubungan antara. NET 4.0 runtime dan DLR. Ini akan memberi saya ide yang adil jika sistem tipe dinamis di C # 4.0 cukup kuat, dan apakah ada fitur penting dalam DLR yang dihilangkan dari runtime. NET 4.0. Saya telah menemukan beberapa artikel, tetapi semuanya ditulis kembali pada hari ketika DLR mulai terbentuk, dan banyak di antaranya bersifat spekulatif.
Robert Harvey

Jawaban:

3

Ini adalah artikel yang saya ingat pernah saya baca. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Kemudian DLR juga dimasukkan dalam .NET Framework 4 untuk mendukung fitur dinamis dalam C # dan Visual Basic. Jika Anda hanya memerlukan kata kunci dinamis di C # 4, Anda cukup menggunakan .NET Framework dan dalam kebanyakan kasus akan menangani semua interaksi dengan DLR sendiri. Tetapi jika Anda ingin menerapkan atau port bahasa dinamis baru ke .NET, Anda dapat mengambil manfaat dari kelas pembantu tambahan dalam proyek sumber terbuka, yang memiliki lebih banyak fitur dan layanan untuk pelaksana bahasa.

Dave Nay
sumber
3

Dari: jimmysch

Robert,

Fakta: IronRuby dan IronPython sama-sama menggunakan DLR, bahkan sebagian besar fitur DLR berasal dari implementasi IronPython sebelumnya. Saya tidak terbiasa dengan bagaimana versi DLR IronScheme digunakan. Sebagian DLR (Microsoft.Scripting.Core.dll) dikirim dalam .NET 4.0 di System.Core.dll, dan bagian itu adalah yang digunakan C # 4.0 untuk dukungan kata kunci "dinamis", itulah sebabnya perakitan tidak hadir dalam .NET 4.0 build dari DLR.

Sisa basis kode DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll adalah yang paling penting) tersedia untuk diunduh dari proyek CodePlex ini , atau proyek IronLanguages ​​GitHub. Mereka menyediakan API untuk konsumen dan produsen bahasa hosting, sementara API di .NET 4.0 untuk benar-benar melakukan metode pengiriman dinamis.

Untuk menulis kompiler bahasa dinamis untuk .NET 4.0, saya akan menggunakan C # sebagai bahasa implementasi dan menggunakan DLR sebagai pustaka untuk menyederhanakan tugas-tugas kompiler umum. Untuk contoh bahasa sederhana di DLR, lihat Sympl.

~ Jimmy

http://dlr.codeplex.com/discussions/268746#post656778

Robert Harvey
sumber