การสำรวจ Dynamic Language Runtime ใน. Net

ภาษาที่พิมพ์แบบคงที่คือภาษาที่คุณจะต้องระบุประเภทของวัตถุในเวลาที่คุณกำหนด ตัวอย่างของภาษาที่พิมพ์แบบคงที่ ได้แก่ C #, VB และ C ++ ในทางตรงกันข้ามในภาษาที่พิมพ์แบบไดนามิกประเภทของวัตถุจะถูกกำหนดที่รันไทม์ - เฉพาะในเวลาที่กำหนดค่าให้กับประเภทเท่านั้น Python, Ruby และ JavaScript เป็นตัวอย่างของภาษาที่พิมพ์แบบไดนามิก

DLR (Dynamic Language Runtime) รันบน CLR (Common Language Runtime) และเพิ่มไดนามิกให้กับสภาพแวดล้อมที่มีการจัดการของ. Net - คุณสามารถใช้เพื่อใช้คุณลักษณะไดนามิกในแอปพลิเคชันของคุณ โดยพื้นฐานแล้ว DLR เปิดใช้งานการทำงานร่วมกันระหว่างภาษาที่พิมพ์แบบคงที่และภาษาที่พิมพ์แบบไดนามิกภายในบริบทของ CLR คุณสามารถใช้ DLR เพื่อแชร์ไลบรารีและอ็อบเจ็กต์ด้วยภาษาไดนามิก ในบทความนี้ฉันจะนำเสนอภาพรวมของสภาพแวดล้อม Dynamic Language Runtime ใน Microsoft .Net

คุณสามารถรับ DLR เวอร์ชันโอเพนซอร์สได้จาก Codeplex

DLR คืออะไร?

DLR เป็นผลมาจากความพยายามของ Microsoft ในการให้บริการทำงานบน CLR และมอบความสามารถในการทำงานร่วมกันระหว่างภาษาที่พิมพ์แบบคงที่และแบบไดนามิก การสนับสนุนสำหรับสภาพแวดล้อม Dynamic Language Runtime อำนวยความสะดวกโดย System.Dynamic namespace สถานะ MSDN: "รันไทม์ภาษาแบบไดนามิก (DLR) เป็นสภาพแวดล้อมรันไทม์ที่เพิ่มชุดของบริการสำหรับภาษาไดนามิกให้กับรันไทม์ภาษาทั่วไป (CLR) DLR ช่วยให้พัฒนาภาษาไดนามิกเพื่อรันบน. Net Framework ได้ง่ายขึ้น และเพื่อเพิ่มคุณลักษณะแบบไดนามิกให้กับภาษาที่พิมพ์แบบคงที่ "

เป็นประโยชน์อย่างไร?

บริการที่จัดหาโดย DLR รวมถึงการสนับสนุนสำหรับระบบประเภทไดนามิกโมเดลโฮสติ้งมาตรฐานตลอดจนการสร้างและจัดส่งโค้ดแบบไดนามิก ประโยชน์ที่ได้รับจาก DLR โดยสรุป ได้แก่ :

  1. ให้การสนับสนุนคุณลักษณะแบบไดนามิกในภาษาที่พิมพ์แบบคงที่ ด้วย DLR ในสถานที่คุณสามารถสร้างวัตถุที่พิมพ์แบบไดนามิกและใช้ร่วมกับวัตถุที่พิมพ์แบบคงที่ในแอปพลิเคชันของคุณ
  2. ทำให้สามารถโอนภาษาไดนามิกไปยัง. Net Framework ได้อย่างราบรื่น DLR ช่วยให้คุณสามารถพอร์ตภาษาไดนามิกไปยัง. Net Framework ได้อย่างง่ายดาย ในการใช้ประโยชน์จากคุณสมบัติ DLR ภาษาไดนามิกทั้งหมดของคุณจำเป็นต้องมีคือความสามารถในการสร้างแผนภูมินิพจน์และรูทีนตัวช่วยรันไทม์
  3. อำนวยความสะดวกในการแบ่งปันไลบรารีและวัตถุ DLR ช่วยให้คุณสามารถสร้างอ็อบเจ็กต์และไลบรารีในภาษาหนึ่งเพื่อเข้าถึงจากภาษาอื่น
  4. ให้การสนับสนุนสำหรับการจัดส่งวิธีการแบบไดนามิกและการเรียกใช้ DLR ให้การสนับสนุนสำหรับการเรียกใช้เมธอดแบบไดนามิกและการจัดส่งโดยใช้การแคช polymorphic ขั้นสูง

ระบบย่อยรันไทม์ภาษาไดนามิก

โดยพื้นฐานแล้วระบบย่อย DLR นั้นประกอบด้วยสามชั้น ซึ่งรวมถึงสิ่งต่อไปนี้:

  1. แผนภูมินิพจน์ - DLR ใช้ประโยชน์จากต้นไม้นิพจน์เพื่อแสดงถึงความหมายของภาษา
  2. เรียกการแคชไซต์ - การเรียกเมธอดโดยใช้อ็อบเจ็กต์ไดนามิกจะถูกแคชไว้ในหน่วยความจำเพื่อให้ DLR สามารถใช้ประวัติแคชสำหรับการเรียกใช้วิธีเดียวกันในภายหลัง
  3. ความสามารถในการทำงานร่วมกันของวัตถุแบบไดนามิก - DLR เปิดใช้งานการทำงานร่วมกันระหว่างภาษาที่พิมพ์แบบคงที่และแบบไดนามิก DLR มีคอลเล็กชันประเภท - คลาสและอินเทอร์เฟซในเนมสเปซ System.Dynamic คุณสามารถใช้ประโยชน์จากอินเทอร์เฟซ IDynamicMetaObjectProvider และคลาส DynamicMetaObject, DynamicObject และ ExpandoObject เพื่อสร้างเฟรมเวิร์กแบบไดนามิก

ภาษา Binders

ตัวประสานภาษาใน DLR ช่วยให้พูดคุยกับภาษาอื่นได้ ดังนั้นสำหรับภาษาไดนามิกแต่ละภาษาโดยทั่วไปคุณจะมีตัวประสานที่สามารถโต้ตอบกับมันได้ ดังตัวอย่างต่อไปนี้เป็นตัวประสานที่ใช้กันทั่วไปใน DLR

  • . Net Binder - ใช้เพื่อพูดคุยกับวัตถุ. Net
  • JavaScript Binder - ใช้เพื่อพูดคุยกับวัตถุที่สร้างในวัตถุ JavaScript
  • IronRuby Binder - เปิดใช้งาน DLR เพื่อพูดคุยกับวัตถุ IronRuby
  • IronPython Binder - ช่วยให้ DLR พูดคุยกับวัตถุ IronPython
  • COM Binder - ช่วยให้ DLR พูดคุยกับวัตถุ COM

คำหลัก "ไดนามิก"

คุณสามารถใช้ประโยชน์จากคีย์เวิร์ดไดนามิกเพื่อเข้าถึงออบเจ็กต์แบบไดนามิก คำสำคัญแบบไดนามิกถูกนำมาใช้ครั้งแรกใน. Net Framework 4 ช่วยให้แอปพลิเคชันของคุณทำงานร่วมกับชนิดไดนามิก ดังนั้นคุณสามารถใช้คีย์เวิร์ดไดนามิกเพื่อเข้าถึงอ็อบเจ็กต์ COM หรืออ็อบเจ็กต์ที่สร้างในภาษาไดนามิกเช่น Python, Ruby หรือ JavaScript

นี่คือข้อมูลโค้ดที่แสดงวิธีใช้คีย์เวิร์ดแบบไดนามิก

ใช้ System.Dynamic;

ไดนามิก excelObj = System.Runtime.InteropServices.Marshal.GetActiveObject ("Excel.Application");

เราไม่จำเป็นต้องใช้การสะท้อนกลับในการเข้าถึงวัตถุ COM อีกต่อไป - โค้ดของคุณสะอาดมากหากไม่มีรหัสสะท้อนที่คุณจะต้องเขียนไม่ให้คีย์เวิร์ดไดนามิก

การอ่านที่แนะนำ

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