อะไรคือความสัมพันธ์ระหว่าง Dynamic Language Runtime และ C # 4.0?


11

สมมติว่าฉันต้องการสร้างตัวแปลภาษา / ตัวแปลภาษาแบบไดนามิกซึ่งอาจเป็นล่าม Scheme บนแพลตฟอร์ม. NET ที่มีอยู่ในปัจจุบัน ฉันจะดีกว่าถ้าใช้Dynamic Language Runtime (DLR) หรือใช้ C # 4.0 เพื่อใช้คุณสมบัติแบบไดนามิกของภาษาของฉันหรือไม่ หรือฉันต้องการทั้งสองอย่าง?

ฉันรู้ว่ามีได้รับงานอื่น ๆ ที่ทำในพื้นที่นี้โดยเฉพาะอย่างยิ่งกับIronSchemeและIronPython ทั้งสองภาษาใช้ DLR ฉันเชื่อว่า IronPython ใช้เวอร์ชั่นล่าสุดของ DLR (ซึ่งเป็นอายุประมาณหนึ่งปี) ในขณะที่ IronScheme ใช้ต้น fork ที่มีการดัดแปลงแก้ไขอย่างรวดเร็วของเวอร์ชันแรก ๆ ของ DLR แต่ C # 4.0 ไม่สามารถใช้ได้เมื่อคอมไพเลอร์เหล่านี้ถูกสร้างขึ้น

ฉันเคยเห็น Rob Conery ทำงานกับMassiveโดยใช้คุณสมบัติแบบไดนามิกของ C # 4.0 มันค่อนข้างน่าประทับใจ แต่ C # จะใช้ความพยายามอย่างเต็มที่ของผู้แปลภาษา / ผู้บุกรุกแบบไดนามิกหรือไม่? มีฟีเจอร์ใน DLR ที่หายไปจาก C # หรือว่าเป็น DLR ที่รีดเป็น C # 4.0 หรือไม่? ฉันจะพลาดคุณสมบัติที่สำคัญของ DLR หรือไม่หากฉันใช้ C # 4.0 เท่านั้น


ฉันเชื่อว่าคุณสมบัติ. Net 4.0 Dynamic นั้นขึ้นอยู่กับ DLR ด้วยเช่นกัน
Dave Nay


@Dave: ฉันจะพึงพอใจกับลิงค์ปัจจุบันที่เชื่อถือได้ไปยังบทความที่อธิบายรายละเอียดความสัมพันธ์ระหว่างรันไทม์. NET 4.0 และ DLR นี่จะให้ความคิดที่เป็นธรรมแก่ฉันหากระบบประเภทไดนามิกใน C # 4.0 นั้นแข็งแกร่งเพียงพอหรือไม่และมีคุณสมบัติที่สำคัญใด ๆ ใน DLR ที่ถูกตัดออกจากรันไทม์. NET 4.0 หรือไม่ ฉันได้พบบทความบางส่วน แต่พวกเขาทั้งหมดถูกเขียนย้อนกลับไปในวันที่ DLR เป็นรูปเป็นร่างและส่วนใหญ่จะเป็นการเก็งกำไร
Robert Harvey

คำตอบ:


3

นี่คือบทความที่ฉันจำได้ว่าอ่าน msdn.microsoft.com/en-us/magazine/gg598922.aspx

หลังจากนั้น DLR ก็รวมอยู่ใน. NET Framework 4 เพื่อรองรับคุณสมบัติแบบไดนามิกใน C # และ Visual Basic หากคุณต้องการเฉพาะคีย์เวิร์ดไดนามิกใน C # 4 คุณสามารถใช้. NET Framework และในกรณีส่วนใหญ่มันจะจัดการกับการโต้ตอบทั้งหมดกับ DLR ด้วยตัวเอง แต่ถ้าคุณต้องการใช้หรือย้ายภาษาไดนามิกใหม่ไปยัง. NET คุณอาจได้รับประโยชน์จากคลาสตัวช่วยพิเศษในโครงการโอเพ่นซอร์สซึ่งมีคุณสมบัติและบริการเพิ่มเติมสำหรับผู้ใช้ภาษา


3

จาก: jimmysch

โรเบิร์ต

ข้อเท็จจริง: IronRuby และ IronPython ทั้งสองใช้ DLR ในความเป็นจริงคุณสมบัติส่วนใหญ่ของ DLR มาจากการใช้งานของ IronPython ก่อนหน้านี้ ฉันไม่คุ้นเคยกับการใช้ DLS IronScheme รุ่นใด ส่วนหนึ่งของ DLR (Microsoft.Scripting.Core.dll) ถูกจัดส่งใน. NET 4.0 ใน System.Core.dll และส่วนนั้นคือสิ่งที่ C # 4.0 ใช้สำหรับการสนับสนุนคำหลัก "ไดนามิก" ซึ่งเป็นสาเหตุที่แอสเซมบลีนั้นไม่ได้ มีอยู่ใน. NET 4.0 builds ของ DLR

ส่วนที่เหลือของ codebase ของ DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll นั้นสำคัญที่สุด) สามารถดาวน์โหลดได้จากโครงการ CodePlex นี้หรือโครงการ IronLanguages ​​GitHub พวกเขาให้บริการ API สำหรับผู้บริโภคและผู้ผลิตภาษาโฮสติ้งในขณะที่ API ใน. NET 4.0 นั้นใช้สำหรับการจัดส่งวิธีการแบบไดนามิก

ในการเขียนคอมไพเลอร์ภาษาแบบไดนามิกสำหรับ. NET 4.0 ฉันจะใช้ C # เป็นภาษาการใช้งานและใช้ DLR เป็นห้องสมุดสำหรับงานคอมไพเลอร์ทั่วไปที่ง่ายขึ้น สำหรับภาษาตัวอย่างง่ายๆใน DLR ให้ดูที่Sympl

~ จิมมี่

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.