簡體   English   中英

提升proto vs c#表達樹

[英]boost proto vs c# expression tree

首先,我想知道兩個“功能”是否具有相同的目標。 其次,如果是(或僅部分是),則對於c#表達式樹,boost proto是否有任何重大限制

謝謝

我是Boost.Proto的作者,我最近才發現了C#表達式樹。 AFAICT,它們在意圖上相似,但在實施和范圍上都不同。

C#具有語言支持,可將LINQ表達式捕獲為動態類型樹。 LINQ使用者使用它來優化查詢評估。 對內存數據結構的查詢可以通過LINQ擴展方法進行簡單的評估,但是通過在運行時遍歷LINQ表達式,計算T-SQL字符串並將其傳遞給LINQ表達式,可以更好地執行針對遠程數據庫的查詢。用於遠程執行的SQL服務器。 就目前而言,C#表達式樹最適合這些優化問題。

Boost.Proto OTOH的范圍更廣。 Proto表達式樹是靜態類型的,允許在編譯時完成復雜的轉換和代碼生成。 更重要的是,Proto提供了用於內省和轉換樹以及從中生成自定義代碼的工具。 這可能對優化很有用,但也可以為表達式提供完全不同的特定於域的語義。 因此,Proto更准確地被認為是嵌入式域特定語言工具包。

使用C#表達式樹也可以做到這一點,但AFAIK目前還沒有用於樹轉換和代碼生成的框架。 在.NET上執行運行時代碼生成的能力使這成為一種令人信服的可能性。 也許一些有進取心的開發人員(你?)願意在C#表達式樹上編寫一個Proto#。 :-)

它們部分重疊,因為它們都可以用來編寫DSL。 Boost proto圍繞在C ++中構建嵌入式DSL的想法而構建,該轉換為C ++並在編譯時進行編譯。 C#表達式樹更多的是關於編寫外部DSL(或任何解釋器)。 所以boost :: Proto是關於修改和增強C ++的,而表達式樹是關於用新語言編寫代碼而不是修改C#。

你究竟想問什么? 我不懂你的問題。

他們的目標並不相同,因為C ++和CLR非常不同。

在C ++中,您不能使用任意代碼並將其作為Expression使用。 你沒有反射機制。

表達式是RunTime功能,而Boost Proto是編譯時庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM