gpt4 book ai didi

c# - 'Data Structure' 和 'compiled code' 有什么区别

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:56 25 4
gpt4 key购买 nike

Expression trees purpose:

Expression tree must becompiled before it can be used. This is because expression tree isactually a data structure, not compiled code. Why? Because this codeis expected to be used across wire, or – in other words – in otherprocesses (running possibly on other computers).

发件人: http://geekswithblogs.net/Martinez/archive/2009/06/29/understanding-expression-trees.aspx

“数据结构”和“编译代码”之间有什么区别;编译后的代码在 C# 中看起来如何?!通过这篇文章,我了解到不包含 Array 或 List 的每一行都是编译代码(例如:“Human H1=new Human(18);”)。

请不要用例子解释什么是表达式树,我想要一个关于这个问题的明确答案。

谢谢你的时间

最佳答案

如果不先编译就无法执行表达式树,因为表达式树有不同的用途:它们作为可执行代码的灵活蓝图,而不是可执行代码本身(with 相当不灵活)。

表达式树是一种数据结构,它在高于代码本身的抽象级别描述代码(已编译或未编译)。与代码不同,数据结构可以被操纵以形成描述其他代码段的不同结构。与数据结构不同,可以对代码求值以产生结果。

考虑这个例子:

Expression p1 = Expression.Parameter(typeof(int), "a");
Expression p2 = Expression.Parameter(typeof(int), "b");
Expression expr = Expression.Add(p1, p2);

它显示了正在创建的表达式 expr,描述了一个简单的表达式树 a+b。至此,我们有了一个树状数据结构,其中包含三个节点——两个节点代表参数,一个节点代表加法。我们可以用表达式树做很多事情,比如检查它的内容,找到它的返回类型,等等。我们甚至可以操纵它的结构来基于它创建其他表达式:例如,我们可以添加第三个参数,并创建 a+b+c,如下所示:

Expression p3 = Expression.Parameter(typeof(int), "c");
expr = Expression.Add(expr, p3);

然而,我们不能做的一件事是将两个整数值传递给它并获得它们的总和:表达式树不提供评估它们的方法。为此,您需要真正的代码,而不是代码描述。

表达式树提供了一种通过编译将代码描述转换为代码的方法。一旦你将表达式树转换为 lambda 并对其调用 Compile() 方法,你就会得到编译后的 CIL。看起来像这样的代码:

ldarg.0
ldarg.1
add
ret

此代码可以传递两个值进行评估,它会将总和返回给您。然而,一些信息在翻译中丢失了:具体来说,参数名称 ab 不再存在于编译代码中:它们不是执行计算所必需的,所以他们已经被淘汰了。

关于c# - 'Data Structure' 和 'compiled code' 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com