boostprotovsc#表达式树
boost proto vs c# expression tree
首先,我想知道两个"功能"是否有相同的目标。其次,如果是(或仅部分是),那么boost proto over是否存在任何重大限制c#表达式树
感谢
我是Boost.Proto的作者,最近才发现C#表达式树。AFAICT,它们在意图上相似,但在实施和范围上不同。
C#支持将LINQ表达式捕获为动态类型树。LINQ使用者使用它来优化查询的评估。通过LINQ扩展方法,对内存中数据结构的查询将是一种直接的评估,但对远程数据库的查询将通过在运行时遍历LINQ表达式、计算T-SQL字符串并将其传递给SQL服务器进行远程执行来更优化地执行。目前,C#表达式树最擅长于这类优化问题。
推进。Proto OTOH有一个更广泛的范围。原型表达式树是静态类型的,允许在编译时进行复杂的转换和代码生成。更重要的是,Proto提供了内省和转换树的工具,并从中生成自定义代码。这可能有助于优化,但也有助于为表达式提供完全不同的领域特定语义。因此,Proto被更准确地认为是一个嵌入式领域特定语言工具包。
C#表达式树也可以这样做,但AFAIK目前还没有用于树转换和代码生成的框架。在.NET上生成运行时代码的能力使这成为一种令人信服的可能性。也许一些有进取心的开发人员(你?)会愿意在C#表达式树上写一个Proto#。:-)
它们部分重叠,因为它们都可以用于编写DSL。Boost proto是围绕在C++中构建嵌入式DSL的想法构建的,该DSL被转换为C++并在编译时编译。C#表达式树更多的是编写一个外部DSL(或者任何解释器)。所以boost::Proto是关于修改和增强C++的,表达式树是关于用新语言编写代码,而不是修改C#。
你到底想问什么?我不理解你的问题。
他们的目标并不相同,因为C++和CLR非常不同。
在C++中,不能将任意代码作为表达式来处理。你没有反射机制。
表达式是运行时功能,而Boost Proto是编译时库。
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 带有用户定义类的c++折叠表达式
- 即使使用调试编译标志,表达式也是"optimized out"
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 这 4 个 lambda 表达式之间有什么区别?