2011-07-18 53 views
7

我一直在研究使用DLR作爲我的玩具語言,而且我有點困惑。如果.NET 4.0具有LINQ表達式樹,動態對象和「動態」類型,那麼我們是否真的需要DLR?什麼是DLR提供將讓我的生活更容易,因爲語言開發.NET 4.0中需要DLR嗎?

---編輯----

讓我解釋一下我的問題好一點。在codeplex(dlr.codeplex.com)上發現的DLR項目,是否還有很多需求呢?這個DLR項目的所有功能都放到了.NET 4中嗎?或者在DLR中有什麼值得留下的東西?

+0

「動態」類型使用引擎蓋下的DLR。 –

+0

動態== DLR。所以不行。 –

回答

2

它並不完全回答你的問題,但我非常有興趣閱讀Jim Hugunin關於前一陣子離開微軟的消息。

他指出的一件事是DLR是我們在.NET 4.0中取得的很多進步的驅動因素,你現在說的是你可能不再需要DLR的原因。

編輯:鏈接到訊息話題 - http://hugunin.net/microsoft_farewell.html

在另一方面,我認爲DynamicSite系統仍東西是有相當有價值的,而未必是重要的投入在CLR本身。

第2次編輯:這真是一個有趣的查詢,我剛剛查看了Codeplex上的文檔。正如你陳述和澄清的那樣,.net 4.0 CLR確實實現了使DLR變得特別的東西。閱讀DLR概述,我認爲基本上這個想法是,使用DLR實現的功能具有更快速地訪問新功能,然後等待新版本框架的優勢。

這可能是沒有實際意義的,因爲他們暫時還沒有發佈新版本的DLR!

另一個可能的優勢,但我承認我沒有正確地探討過這個,是在DLR的AST具有更多的功能:

共享AST(表達式樹) - 這是核心之一DLR的支柱 。我們已經擴展了LINQ表達式樹來包含控制流程,賦值等。我們還爲所有表達式 Trees v1和v2(DLR的新內容)提供源代碼。 Expression Tres是降低用於將語言移植到.NET的欄的 的一部分,我們在 中使用它們的活頁夾和DynamicMetaObject協議。

+0

添加了一個編輯來更好地解釋我的問題。 –

1

codeplex上的DLR是開放源代碼的,因此對您的語言可能需要的功能進行改進/添加將變得更加容易。

3

在DLR的開發過程中,我們將其分爲兩部分 - 內層和外層。內層由呼叫站點緩存,擴展表達式樹和元對象協議組成。所有這些都是爲了.NET 4.0而添加的。

外層包含託管API,表達式樹解釋器,COM互操作支持,用於調用.NET方法的可定製的重載解析器,大多數DLR操作的默認綁定器以及許多其他各種幫助程序。這些都沒有提供.NET框架,但仍可能對您有用。在.NET 4.0上使用它時,它依賴於使用.NET 4.0提供的DLR API。

外層也分爲兩部分 - 託管API(Microsoft.Scripting.dll)和其他一切(Microsoft.Dynamic.dll)。如果您希望人們能夠以託管IronPython和IronRuby的相同方式託管您的語言,則可以定位DLR託管API。你可以使用Microsoft.Dynamic.dll或者只是從中取出有用的代碼片段,而不是重新發明輪子。無論是哪種情況,如果您需要最新版本,您需要查看IronPython/IronRuby網站,因爲Microsoft不再積極開發外層組件。

相關問題