首页 > 语言 > 关键词   >  拓展最新资讯  > 正文

拓展动态编程的新领域

2010-08-27 09:22 · 稿源:CSDN,www.csdn.net

中文MSDN将CallSite<T>译为“动态(调用)站点”,它是DLR中的核心组件之一。

动态站点对象通过CallSite<T>.Create()方法创建, C#编译器会为其指定一个派生自CallSiteBinder的对象(称为“动态站点绑定对象”)作为其参数。

动态站点绑定对象是与具体语言相关的,比如IronPython和C#都有各自的动态站点绑定对象。

动态站点绑定对象的主要工作是将代码中的动态表达式(本例中为d++)转换为一棵“抽象语法树(AST:Abstract Syntax Tree)”,这棵语法树被称为“DLR Tree”,是在.NET 3.5所引入的LINQ表达式树的基础上扩充而来的,因此,有时又称其为“表达式树(Expression Tree)”

DLR在内部调用此表达式树的Compile()方法生成IL指令,得到一个可以被CLR所执行的委托(在本例中其类型就是Func<CallSite, object, object>)。

动态调用站点对象(本例中为<>p__Site1)有一个Target属性,它负责引用这一生成好的委托。

委托生成之后,动态表达式的执行就体现为委托的执行,其实参由C#编译器直接“写死”在IL代码中。

简化的代码示意如下(通过Reflector得到,为便于阅读,修改了变量名):

object d = 100;
    object CS$0$0000 = d;
    if (<>p__Site1 == null)
        <>p__Site1 = CallSite<Func<CallSite, object, object>>.Create(……);
    d = <>p__Site1.Target(<>p__Site1, CS$0$0000);

上述类型推断、方法绑定及IL代码生成的工作都是在程序运行时完成的。

(4)动态代码很慢吗?

动态编程语言易学易用,代码紧凑,开发灵活,但性能则一直是它的“软肋”。为了提升性能,DLR设计了一个三级缓存策略。

动态站点绑定对象会为动态调用表达式转换而成的语法树加上相应的测试条件(称为“test”),构成一个“规则(Rule)”,这个规则可以用于判断某个语法树是否可用于特定的动态调用表达式。

举个例子,请看以下这个动态表达式:

d1 + d2

如果在程序运行时d1和d2都是int类型的整数,则DLR生成的规则为:

if( d1 is int && d2 is int) //测试条件
        return (int)d1+(int)d2;  //语法树

DLR通过检查规则中的“测试条件”,就可以知道某个动态表达式是否可以使用此规则所包容的语法树。

“规则”是DLR缓存的主要对象。

前面介绍过的动态站点对象Target属性所引用的委托是第一级缓存,它实现的处理逻辑是这样的:

//当前处理规则,属于第1级缓存
    if( d1 is int && d2 is int)  //测试条件
        return (int)d1+(int)d2; //满足测试条件,直接返回一个表达式树
    //未命中,则在第2级、第3级缓存中查找,如果找到了,用找到的结果更新第1级缓存
    return site.Update(site,d1,d2);

如果3级缓存中都没有命中的规则,则此动态站点所关联的调用站点绑定对象会尝试创建一个新的规则。如果创建新规则失败,则由当前编程语言(比如C#)所提供的默认调用站点绑定对象决定如何处理,通常的作法是抛出一个异常。

当前版本的DLR第2级缓存了10条规则,第3级则缓存了100条规则。

由于DLR自身设计了一个“规则”缓存系统,又充分利用了CLR所提供的JIT缓存(因为所有动态调用代码最终都会转换为CLR可以执行的IL指令,而CLR可以缓存这些代码),使得动态代码仅仅在第一次执行时性能较差,后续的连续调用其性能可以逼近静态代码。

举报

  • 相关推荐
  • 大家在看
  • 融合数据中台与动态调度:林剑峰在共享出行智能算法开发中的技术探索

    本文讲述了林剑峰在智能出行领域的十年深耕历程。作为系统工程师,他主导构建了融合数据、算法与规则引擎的智能调度体系,通过动态聚类和路径规划模型显著提升了共享单车调度效率。其创新包括分级围栏模型、嵌入式调度判断模块等专利技术,实现了跨区域精准调度和系统自主运行能力。数据显示,他推动的系统使车辆调度效率提升37.38%,异常识别准确率显著提高。林剑峰的工作体现了"技术+业务"的系统设计理念,为城市智能交通建设提供了可借鉴的技术范式。

  • 北芯生命2024年营收增长超70%,以创新与品质拓展市场

    深圳北芯生命科技专注心血管疾病精准诊疗创新,2024年营收3.17亿元同比增超70%,核心产品IVUS系统获欧盟MDR认证并进入国际市场,FFR系统填补国内金标准技术空白。公司拥有181项国内外专利,覆盖冠脉、外周血管及房颤治疗领域,海外收入3882.6万元同比增160%。2025年将推出国产首个全冠脉功能学一体化评价方案及外周IVUS导管,持续深化电生理PFA技术研发,相关产品进入国家创新医疗器械特别审查程序。

  • 快手将在全国落地上百个直播大舞台,拓展直播夜经济生态

    快手直播大舞台模式在全国多地开花结果,通过"线下搭台+线上直播"联动,有效激活文旅消费。以唐山迁安天元谷景区为例,泡泡龙大舞台每晚3小时直播吸引数百万观众,带动景区客流量翻倍,周边商铺营收增长显著。该模式已在河北18个地区常态化运营,包括城市舞台和乡村舞台两种形态,形成"演出+消费"的完整生态链。快手计划推出百亿流量扶持,打造"直播大舞台百城计划",助力更多城市塑造特色名片。专家指出,这种模式重构了城市公共空间社交功能,通过数字技术延伸物理空间,为破解"千城一面"困境提供新方案,成为推动经济增长、文化传承和乡村振兴的重要力量。

  • 啊?豆包居然也开始卷AI编程了?

    豆包疯了。 我感觉他好像真的想一统江湖了。 今天我打开豆包,本来只是想让它帮我识别几个表格图片。 结果发现他们更新了一个功能,直接推荐到我的首页来了。 这个功能我用了一下,给我整不会了,就是下面那个加上了&quot;应用创造1.0&quot;标识的AI编程。

  • 2025最新全球AI大模型排名,国内外模型动态洗牌(实时更新平台推荐)

    2025年全球AI大模型竞争进入白热化阶段,OpenAI、Google等国际巨头与中国企业激烈交锋。技术迭代远超预期,仅半年内排名就经历多次洗牌。当前全球AI大模型综合排名Top10显示:1)GPT-4.5综合80.4分领跑;2)Claude3.7编程领域领先;3)Gemini2.0多模态标杆;4)国产DeepSeek R1推理速度提升3倍;5)阿里Qwen2.5数学编程单项第一。中国模型通过开源策略、垂直优化和成本革命实现弯道超车,如DeepSeek R1仅耗资600万美元达到GPT-4水平,字节豆包采用稀疏MoE架构成本大幅降低。中文场景深度优化表现突出,如文心一言4.0方言交互准确率92%。开源生态爆发,通义千问全尺寸开源(7B~110B参数)在Hugging Face排名第一。权威评估需结合标准化测试、人类盲测和场景适配性。

  • 运动到全场景,从上海 ISPO看韶音如何领跑开放式耳机领域

    2025年7月4日,Shokz韶音在ISPO亚洲运动用品展上大放异彩。其专业运动耳机OpenRun Pro2凭借DualPitch™骨传导技术、IP55防水和12小时续航等创新功能,入选"ISPO China Choice"榜单。同时展出的OpenDots ONE采用动钛弧设计实现稳固佩戴,OpenFit2通过海豚弧耳挂提升舒适度。现场提供镌刻服务,吸引众多观众体验。数据显示,韶音已连续两年登顶全球运动耳机销量榜首,2024年在中国开放式耳机市场持续领跑。品牌通过技术创新不断突破骨传导音质上限,满足用户多样化需求。

  • 清华教授喊话年轻人就业要改变思路:既要能送快递也要能编程 网友吵翻了

    清华大学ACCEPT研究院院长李稻葵近日公开表示,称现在的年轻人就业要改变思路,既要能送快递也要能编程。 李稻葵表示,年轻人自己要改变思路,你的技能应该是多元化的,板块的,你要既能够有骑摩托车送快递的本事,也能够有编程的本事,也能够去做客服的本事,如果你三件事都有了,体力、脑力都有了,你还怕啥呢? 工作肯定有,还能找一个创业的机会。所以我们�

  • 方寸之间,无界艺廊:三星以动态美学激活客厅艺术脉搏

    三星艺术画廊服务2025年迎来重大升级,推出动态名画功能,将梵高《自画像》等经典作品赋予生命律动。该服务覆盖Neo QLED产品线,通过量子点矩阵技术精准呈现艺术品原貌,获得德国莱茵TÜV认证。The Frame画壁电视采用哑光屏显技术,获彩通艺术认证,确保色彩精准还原。平台整合全球顶级博物馆千余幅典藏名画,用户可一键生成AI数字艺术。三星NQ8 AI Gen3芯片提供强大算力支持,神经处理单元提升至768个,实现流畅艺术观赏体验。这一创新将尖端显示技术与海量艺术资源、智能互动融合,重新定义家居美学场景。

  • 动态域名解析全攻略:从原理到实用方法详解

    本文介绍了动态域名解析(DDNS)技术及其应用。DDNS通过将动态变化的公网IP地址与固定域名绑定,解决了远程访问动态IP设备的难题。文章详细解析了三种实用方法:1)使用专业DDNS服务商;2)利用路由器内置功能;3)安装专用软件如花生壳。重点推荐了花生壳软件,其支持多系统、智能DNS解析和端口映射等功能,拥有1800万用户。使用DDNS需注意选择可靠服务商、正确配置记录、定期检查更新等事项。动态域名解析技术极大便利了远程访问需求,而花生壳凭借强大功能成为理想选择。

  • 女生高考462分 超北大录取分150多:体育领域成绩优异

    ​6月25日,四川2025年高考成绩正式放榜。在宜宾市东辰学校,一个班级的高考成绩格外引人注目:该班23名学生中,竟有22人分数超过600分,成绩十分亮眼。然而,在这份耀眼的成绩单中,一名叫刘峡君的女生却以462分的成绩成为班级里的“显眼包”。 面对这一看似“反差”的情况,班主任给出了令人意想不到的解释。原来,刘峡君是一名国家级运动健将,在体育领域有着出色

这篇文章对你有价值吗?

今日大家都在搜的词: