CN102929637A - 反应性表达式生成和优化 - Google Patents
反应性表达式生成和优化 Download PDFInfo
- Publication number
- CN102929637A CN102929637A CN2012104420154A CN201210442015A CN102929637A CN 102929637 A CN102929637 A CN 102929637A CN 2012104420154 A CN2012104420154 A CN 2012104420154A CN 201210442015 A CN201210442015 A CN 201210442015A CN 102929637 A CN102929637 A CN 102929637A
- Authority
- CN
- China
- Prior art keywords
- expression formula
- reactive
- source
- optimization
- assembly
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/177—Editing, e.g. inserting or deleting of tables; using ruled lines
- G06F40/18—Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Artificial Intelligence (AREA)
- Stored Programmes (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了反应性表达式生成和优化。促进反应性编程。可从非反应性表达式或换言之标准表达式自动生成反应性表达式。作为附加或替换,可按多种不同方式优化反应性表达式以使计算工作最小化。
Description
技术领域
本发明涉及反应性表达式生成和优化。
背景技术
通常利用一个或多个表达式(例如,作为语句的组成部分)来详细说明计算机程序。表达式是根据具体编程语言的优先级规则解释的值、常数、变量、运算符和函数的组合。表达式可被计算,或者换句话说是评估,其结果是某一类型的值(例如,整数、串、布尔、…)。例如,算术和编程表达式可以是“1+2”,它可等于“3”。类似地,表达式可对应于“x+2”,其中“x”是指向存储器中的值的指针。此外,“5>4”是评估为真的关系或布尔表达式的示例。经评估的表达式可具有副效应,意思是除返回一值之外,还有次要的、通常不希望的效应,诸如某些状态的变化。
发明内容
下面呈现了简化的发明内容,以便提供对所公开主题的某些方面的基本概念。本发明内容不是广泛性的概观。它并不旨在标识关键/重要元素,也不旨在划定所要求保护主题的范围。其唯一目的是以简化形式呈现一些概念,作为稍后呈现的更具体实施例的序言。
简言之,本发明涉及促进反应性编程。根据本发明的一个方面,可基于非反应性或标准表达式自动生成反应性表达式。根据另一个方面,反应性表达式不管是否从非反应性表达式生成,均可通过应用很多优化技术中的一种或多种来优化,例如为了避免重复副效应并消除过多的重新评估,并提高整体性能。
为实现上述及相关目的,在此结合以下描述和附图描述了所要求保护主题的某些说明性方面。这些方面指示可实践本主题的各种方式,它们均落在所要求保护主题的范围之内。当结合附图阅读以下详细描述时,本发明的其他优点和新颖特征将变得显而易见。
附图说明
图1是反应性编程系统的框图。
图2示出利用所公开的方面的电子数据表模型的实现。
图3是代表性优化组件的框图。
图4是代表性副效应组件的框图。
图5是包括域优化组件的反应性表达式系统的框图。
图6是促进反应性编程的方法的流程图。
图7是优化反应性表达式的方法的流程图。
图8是优化反应性表达式的方法的流程图。
图9是优化反应性表达式的方法的流程图。
图10是示出用于本公开各方面的合适操作环境的示意性框图。
具体实施方式
以下详细描述一般涉及促进反应性编程,更具体地是反应性表达式生成和优化。构建传播输入更新的反应性程序(也称为反应性编程)需要相当多的管道代码(plumbing code)或换言之,后台的低级代码。通常在限定反应性表达式的过程中,编程人员的意图丢失。为了解决该问题,提供一种用于从非反应性表达式生成反应性表达式的机制。换言之,可将标准表达式提升为反应性表达式。因此,编程人员可指定标准表达式(例如,函数),该标准表达式随后可用于自动产生反应性表达式。此外,可按很多不同方式优化反应性表达式,以使与输入变化后传播更新相关联的计算工作最小化等等。作为示例而非限制,可生成避免重复副效应、消除过多的重新评估并提高整体性能(例如,执行更快、更高效…)的反应性表达。
现在参考附图更详细地描述本发明的各个方面,在全部附图中用相同的标号来指示相同的或相应的元素。然而应该理解,附图及其相关详细描述不旨在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护主题的精神和范围之内的所有修改、等价物和替换的方案。
首先参考图1,示出了反应性编程系统100。该系统100包括生成组件110,其配置成基于非反应性表达式(换言之是标准表达式)生成反应性表达式。诸如函数之类的非反应性表达式仅响应于评估而改变。相反,反应性表达式响应于输入的变化而改变。作为示例,考虑表达式“a=b+c”,这意味着“a”被赋予“a”和“b”之和的结果。如果这是标准或非反应性表达式,则当“a”被赋予“b+c”的结果时,该表达式立即被评估。之后,如果“b”或“c”改变,则该改变对值“a”没有影响。如果表达式是反应性表达式,则“a”的值将会基于“b”和“c”中的任一个或两者的新值而自动更新。常规上,指定反应性表达式需要相当多的后台、低级、样板代码。结果,编程人员的意图在限定反应性功能的过程中丢失。生成组件110使编程人员能仅指定标准、非反应性表达式,随后使等价的反应性表达式或其反应性版本自动生成。此外,生成组件110可应用于传统程序,更具体地是其中的表达式,以产生反应性版本。
通过生成组件110生成反应性表达式可按多种不同方式进行,全部都在所附权利要求的范围内。在一个实例中,可将程序代码添加到非反应性表达式以生成反应性表达式。作为附加或替换,非反应性表达式可从非反应性表达式转换或另外变换或转变为反应性表达式。另外,可根据非反应性表达式产生新的反应性表达式。
从非反应性表达式生成反应性表达式可体现在根据一个方面的“提升(Lift)”函数中。因此,反应性表达式的生成可被称为非反应性表达式至反应性表达式的提升,或者在本文中仅称为提升或其各种形式。作为示例,可构建具有以下预订的一组运算符:
Lift::(T1x…x Tn→R)→(IO<T1>x…x IO<Tn>→IO<R>)
换言之,运算符可采用关于“T1”至“Tn”类型的自变量且具有返回类型“R”的诸如函数之类的标准表达式(其中“n”是大于或等于0的整数)。结果,运算符产生经提升的表达式,其接受自变量的变体“IO<T>”并返回结果类型的变体“IO<R>”,其中“IO<T>”和“IO<R>”指代“IObservable<T>”和“IObservable<R>”,即表示根据观测者设计模式向观测者发送“T”或“R”类型的基于推送的通知的类的接口(例如,提供者)。
实现期望的提升行为的一种可能的方法是利用“CombineLatest”运算符(例如,只要两个可观测序列之一具有新值就将这些可观测序列合并成一个序列)并提供函数作为自变量来从输入序列构造可观测序列(例如基于推送的数据源)。例如:
对于较大数量的函数,或者换言之,自变量的数量大于2,可提供具有较大数量的“CombineLatest”运算符,以使提升过程直接,如上所示。或者,可使用中间组合器函数。例如:
以上分配很多中间对象,所以优选较大数量的“CombineLatest”过载。也就是说,对于任意数量的自变量的函数,不管“CombineLatest”过载的数量如何,以上的技术都可能起作用(例如,利用表达式树,为任意函数呈现提升器)。此外,取代将匿名类型用于中间投影,还可使用内建元组类型。例如:
使用反应性类型表达式的一个示例是在电子数据表程序中。例如,电子数据表单元格可包括基于其它单元格的值评估的诸如“B1+C1”之类的字面值或公式。只要独立单元格的值改变,得自公式的值就将被更新。然而,按照惯例,这些类型的反应性表达式被紧密耦合到单元格的概念以及其内部表示,如此不能在任意反应性(例如,基于推送的)数据源上运算。如本文中所使用的,反应性表达式指的是随时间被连续评估的表达式,其中基于对表达式的子表达式或从属物中的一个或多个的改变触发重新评估,该表达式的子表达式或从属物本身可以是反应性表达式。此外,本文中所提及的反应性表达式旨在比类似的电子数据表表达式更全面,且在任何反应性/可观测的数据源上操作。
为了便于清楚和理解,图2示出利用所公开的方面的电子数据表模型的实现。示出总共具有6个单元格的简单电子数据表210。单元格“A1”和“B1”包括字面值,即“42”和“21”。单元格“A2”包括表达式212,其指示“A2=A1/B1”。单元格在214处被标识为标准整数。在执行提升操作之后,相同的单元格被变换成可观测量类型的整数。生成代码222以将非反应性表达式212变换成反应性表达式。
将注意力转回图1,反应性编程系统100还可包括优化组件120。相对于反应性表达式,生成组件110本质上可以是基本的。优化组件120可实现用于反应性表达式生成的更复杂的方法。更具体地,优化组件120可配置成获取反应性表达式并生成经优化的反应性表达式,或者换言之,是反应性表达式的经优化版本。可利用各种优化技术,来使将更新传播到一个或多个输入并生成新输出等等所需的计算工作量最小化。可相对于实现反应性行为的代码增加、删除或改变代码。可利用编译器或其它系统在编译时间或在运行时动态地执行优化。此外,可通过包括用户指定的策略或其它数据在内的各种输入管理优化。另外,例如,给定过去的性能信息或当前上下文信息,可采用反馈环来连续优化反应性表达式。另外,应意识到,可在从非反应性表达式生成反应性表达式的上下文之外,采用优化组件120,例如,在已经存在反应性表达式的情况下(例如,手动编码、利用不同系统生成的…)。
图3更详细地描绘出代表性优化组件120。优化组件120包括副效应组件310,该副效应组件310可被配置成至少避免重复(例如,两个或更多)副效应。表达式可具有不期望的重复副效应。例如,如果表达式导致信用卡被收费,则期望不执行多于所需次数(例如,一次)的动作。更具体地,如果对于多个自变量向一函数提供相同的可观测源,则使用“CombineLatest”运算符将导致多个预订(subscription)。这进而导致重复副效应。作为示例,如果表达式包括“A1+A1”,则这可导致对相同可观测源的重复预订,从而导致潜在的重复副效应。通过检测重复输入序列并合并它们的预订,可避免重复副效应。当然,可采用其它方法,包括将至少避免重复副效应的责任留给调用者或以可用策略标记配置的某一期望方式来执行。
图4更详细地示出代表性副效应组件310,包括源分析组件410、公布组件420和重写器组件430。源分析组件410可配置成分析输入可观测序列并滤掉重复,或换言之,根据对象身份检查来标识唯一序列。例如,考虑标准表达式“a*b+c”。此处,例如在运行时,可确定“a”和“c”对应于相同的输入序列或源或者从相同的输入序列或源导出。结果,可通过源分析组件410生成索引映射412或类似结构,指示“a”和“b”是唯一的且“a”和“c”对应于相同的输入序列或源。
注意,源和分析组件410可配置成利用对象身份之外的其它机制,以滤掉重复或标识唯一序列或源。例如,如果一些输入序列表示具有相同含义的表达式,则可利用高级比较器或等值(equality)函数来检测这种情况。例如,考虑对于相同的“xs”源出现多次(例如,递归地)查询表达式“from x in xs wherex%2==0 select x”。更一般地,源分析组件410可配置成更智能地从根(例如,询问源)向下执行跟踪子查询表达式。例如,考虑两个查询表达式“fromx in xs where x%2==0select x”和“from x in xs where x%2==0select x+1”。除投影部分“选择x”和“选择x+1”之外它们是相同的表达式。因此,可重复使用其余部分“from x in xs where x%2==0”。一般而言,源分析组件410可配置成描绘出可共享计算。换言之,源分析组件410可配置成检测共用子表达式。
公布组件420可配置成通过采用“Publish”运算符为源分析组件410确定用于多次使用的唯一源生成别名,例如:
IObservable<R>Publish<T,R>(IObservable<T>source,Func<IObservable<T>,IObservable<R>>f);
因为可出现多个不同源,所以可引入具有较大数量的“Publish”运算符以同时简化很多源的公布(例如,将T1、T2…Tn用于一般源参数和函数参数。)不管表达式利用多少源,结果可以是建立对这些源的单次预订。
源分析组件410和公布组件420可关于共享源以及如何使用共享源交换信息。例如,可利用其参数位置对源加标签。该索引与反应性表达式中的参数位置相匹配。例如“Lift((a,b,c,)=>a*b+c)(xs,ys,xs)”得到两个不同的源“xs”和“ys”。第一源“xs”可具有索引“0”和“2”,而第二源“ys”可具有索引“1”。可公布唯一源,得到公布函数(例如,公布代码422)中的别名,其中它们可如前所述地使用多次。在运行示例中,这导致以下的骨架:“Observable.Publish(xs,ys,(xs_,ys_)=>….”可向公布函数的主体提供经提升的计算。其输入包括函数参数在索引映射412中表示的(生成别名的)源上的映射。在运行示例中,“0”映射到“xs_”,“1”映射到“ys_”,“2”映射到“xs_”。换句话说,参数“a”、“b”和“c”分别从“xs_”、“ys_”和“xs_”汲取。注意,副效应组件310关于冗余公布是智能的。例如,如上,既使“ys”源仅使用一次,也被公布。优化可消除这种冗余步骤。例如,此处可基于所检测的提供给提升函数的源的等值来动态生成代码。
还可通信所提取的共用源表达式的残余表达式。例如,如果“xs”对于两次使用的确是相同的源,则“Lift((a,b)=>a+b)(xs.Where(x=>x%2==0,xs.Where(x=>x%2==0).Select(x=>x+1))”将导致公共子表达式“xs.Where(x=>x%2==0)”的公布。在这种情况下,参数索引映射412可包括关于公布后应用的残余表达式的附加信息。在运行示例中,“xs.Where(x=>x%2==0)”现在充当具有索引“0”和“1”的公共源。然而,对于索引“0”,残余表达式可被设置为空,而索引“1”携带残余表达式“Select(x=>x+1)”。公共源仍被公布一次,且别名源被向前携带,“xs.Publish(xs_=>…)”。然而,还向前携带具有残余表达式的索引映射。在公布函数的表达式内,提升函数中使用的“a”可从“xs_”中提取(因为对应于“a”的索引0不具有残余表达式),而在使用残余“xs_.Select(x=>x+1)”表达式之后也可向“xs_”汲取使用的“b”(符合索引1中的条目)。
重写器组件430可配置成将表达式重写到反应性表达式。它可将参数的索引映射412用于由源分析组件410和/或公布组件420提供的始发源的参数。重写器组件430可配置成按顺序分析函数的参数,查询源的索引映射412,该源将提供对应于提升后的参数的值。在完成该映射之后,可构建一串“CombineLatest”运算符调用,并且作为整体提供最初的函数(例如,CombineLatest代码433)。例如,再次考虑“Lift((a,b,c)=>a*b+c)(xs,ys,xs)”。通过提升生成的函数包括以下逻辑:1)检测序列“xs”的重复使用,导致索引映射:“xs->0,2”和“ys->1”;2)当重复使用“xs”时至少对于“xs”插入公布调用:“xs.Publish(xs_=>…)”;以及3)保持对映射“xs_->0(a),2(c)”和“ys->1(b)”的跟踪。现在重写组件430可使用对于被使用的源的“CombineLatest”调用构建公布主体。仅使用一次的源可进行而没有先前的“Publish”:“xs_=>xs_.CombineLatest(ys,(x,y)=>…)”。使用该索引映射,“CombineLatest”组合器函数参数可被映射到所提供的被提升函数。在这种情况下,“a”和“c”两者映射到“x”且“b”映射到“y”:““(x,y)=>x*y+x”。如后所讨论的,对“DistinctUntilChanged”调用可与为“CombineLatest”调用生成的表达式交错
返回图3,优化组件120还包括重新评估组件320,其可配置成在可能的情况下限制表达式的重现评估,或换言之是表达式的重新计算。例如,在一个实例中,重新评估被限制于输入序列值改变的实例。如果在每次改变后重新评估表达式,则存在不必要触发重新评估的重复值。因此,重新评估组件320可配置成发起对不同值的重新评估,或换言之是对不同于先前值的重新评估。根据一个实现,这可通过利用运算符“DistinctUntilChanged”来实现。
作为实例而非限制,考虑以下的代码段:
var f=Lift((a,b,c)=>f1(a)*f2(b)+f3(c));
假设“f”的三个输入都不同,则重写可如下:
(o1,o2,o3)=>o1.CombineLatest(o2,(x,y)=>f1(x)*f2(y)).CombineLatest(o3,(t,z)=>t+f3(z))
对“o1”的改变将触发对“f1(x)*f2(y)”的重新评估。然而,如果结果并非是从“ff1(x)*f2(y)”的先前计算值(“x”是来自“o1”的先前元素)改变而来的,则由“CombineLatest(o3,...)”触发的评估是冗余的。我们可通过注入“DistinctUntilChanged”调用来在此点切断计算:
(o1,o2,o3)=>o1.CombineLatest(o2,(x,y)=>f1(x)*f2(y)).DistinctUntilChanged().CombineLatest(o3,(t,z)=>t+f3(z))
事实上,这种改变传播的减少可基于对函数的表达式的进一步分析。在此处示出的样本中,“f1(x)”(以及任何其它的这种函数应用)是黑框,对于很多“x”值其输出可以是相同的。既使这种“x”值的源(在样本中,“o1”)可发信号通知更新,“f1(x)”可保持稳定。例如,考虑使输入值乘以0的函数。重写可用于描绘重新评估的孤立,如下:
(o1,o2,o3)=>o1.Select(x=>f1(x))
.DistinctUntilChanged().CombineLatest(o2.Select(y=>f2(y))
.DistinctUntilChanged(),(x_,y_)=>x_*y_).CombineLatest(o3.Select(z=>f3(z)).DistinctUntilChanged(),(t,z_)=>t+z_)
换言之,“DistinctUntilChanged”运算可定位成靠近输入源以标识不同的连续元素或相对于在输入上的运算更高。具体的位置是可配置的且依赖于函数本身的性质(例如,唯一值的数量、值的分布…)。在运算中,高速缓存可维持先前元素,可使其与后续元素进行比较以确定输入元素是否不同。
优化组件120还可包括一个或多个域专用组件330,其基于专用域或域信息来优化反应性表达式。以下示出使用域专用组件330的假设数学知识(math-savvy)实施例。考虑或示例:
var f=Lift((a,b,c)=>a*b+c);
此处,编程人员已经指定λ表达式““(a,b,c)=>a*b+c”被提升或换言之生成λ表达式的反应性版本,且输出被指派给“f”。在此点上,不能优化表达式,结果可生成一般的代码段,其可接受任何三个可观测序列作为输入。然而,如果对应于提升参数“a”和“c”的输入恰巧是相同的序列,则可优化为:
var res=f(xs,ys,xs);
如前面讨论的,这可被重写为:
xs.Publish(xs_=>xs_.CombineLatest(ys,(x,y)=>x*y+x));
然而,限制可完成函数的重写以使其简化,因为“a”和“c”现在包含相同的值“x”。现在,“x”可如下析出:
xs.Publish(xs_=>xs_.CombineLatest(ys,(x,y)=>(x+1)*y));
相对于所涉及的序列类型——此处是可观测的整数序列,这种优化是域专用的。
作为附加或替换,特定优化功能可在优化组件120之外,如图5所示的系统500。系统500包括前述生成组件110和优化组件120。系统500还描述与优化组件120通信耦合并在其外部的域优化组件510。例如,可基于表达式中涉及的序列类型从一个或多个源发现这种外部域优化组件510。域优化组件510可在其优化中任选地使用外部信息和反馈环。域优化组件510的输出可以是经域优化的反应性表达式。此外,尽管描述为依赖于优化组件120,然而这不是必须的。事实上,反应性表达式(经优化或未经优化)可经由优化组件120通过域优化组件510,或直接被域优化组件510接收或检索。
可经由优化组件120施加各种其它优化策略。作为示例而非限制,可利用改变频率作为优化的基础。可将反应性表达式编码为计及输入源提供元素(或者换言之是源的“闲谈(chattiness)”)的频率。在表达式表示在表达式树中的情况下,优化可对应于重新平衡表达式,此处关于改变的频率。一般而言,期望将最短路径用于最经常改变的东西。例如,假设你具有三个输入“A”、“B”和“C”,且“C”改变最快。因此,优化将在“A”和“B”上执行“CombineLatest”操作,然后在“C”上执行“CombineLatest”。现在“C”具有最短路径长度。这类似于最重要的人最接近顶部且具有最小的通信延迟量(或,换言之是最小的管理者干扰量)的组织结构。此外,源改变的频率可随时间改变,反应性表达式可根据输入序列改变频率而重新优化。
可通过用户指定的策略控制优化技术。作为示例而非限制,考虑利用“DistinctUntilChanged”运算符。该运算符昂贵之处在于它需要维持状态,即由源提供的最后元素。如果源不具有相同的相邻元素,则使用运算符是浪费的。因此,用户可配置运算符以及由此的优化何时被采用。假设每秒提供位置信息且具有100英尺分辨率的全球定位系统(GPS)。如果个人在散步,则使用“DistinctUntilChanged”运算符是有用的,因为在100英尺旅程时接收新值之前需要一些时间。然而,如果某人驾车行驶在高速路上,使用运算符没有太大意义,因为任何值都不太可能被丢弃。此外,还可建立使容纳用于比较的元素以确定不同元素的高速缓存无效的到期策略。
可基于运行时分析动态执行优化,或者在用户提供的表达式被检查到之后的编译时间静态执行优化。例如,动态优化可涉及分析所提供的可观测序列或源并基于输入发射专用代码。例如,静态优化可涉及分析非反应性表达式并去除冗余参数(例如,(a,b)=>a),从而共享计算(例如,使用分配律…)。此外,可动态重新调节反应性表达式的实现。在这种情况下,可采用阈值、策略或成本优点分析来确定是否以及何时重新调节实现以进一步优化执行。
参考若干组件之间的交互已经描述了上述系统、架构、环境等。应该理解,这样的系统和组件可以包括其中指定的那些组件或子组件,某些指定的组件或子组件,和/或附加的组件。子组件也可以被实现为在通信上被耦合到其他组件而不是被包括在父组件中的组件。此外,一个或多个组件和/或子组件可以组合成提供聚集功能的单个组件。系统、组件、和/或子组件之间的通信可以根据推送(push)和/或拉取(pull)模型来实现。各组件也可以与一个或多个其他组件进行交互,出于简要考虑在此未具体描述其他组件,但本领域的技术人员均已知。
此外,以上公开系统以及以下方法的各个部分可以包括或采用基于人工智能、机器学习或知识或规则的组件、子组件、进程、装置、方法或机制(例如,支持向量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎、分类器等)。这样的组件和其它组件可以自动化其执行的某些机制或过程,由此使得系统和方法的各部分更为自适应以及高效及智能。作为示例而非限制,这些机制可推断出反应性表达式优化。
考虑到以上描述的示例性系统,参考图6-9的流程图将可以更好地理解依照所公开的主题实现的方法。尽管为了说明简洁起见,按照一系列框示出和描述了方法,但是,应该理解和知道,所要求保护的主题不限于框的顺序,因为一些框可以按与此处所描绘和描述的不同的顺序进行和/或与其他框并发地进行。此外,并非全部所示出的框都是实现下面所描述的方法所必需的。
参考图6,示出便于反应性编程的方法600。在附图标记610处,例如基于通过编程指定的非反应性或标准表达式生成反应性表达式。换言之,可将非反应性表达式提升为反应性表达式。例如,可利用“CombineLatest”运算符从输入序列构造可观测序列,并提供诸如函数之类的非反应性表达式作为自变量。在附图标记620,优化反应性表达式。换言之,生成反应性表达式的经优化版本。可使用无数新颖或已知的优化技术,包括但不限于滤掉对重复输入序列的预订以避免重复副效应或改进性能,以及将反应性表达式的重新评估,或改变传播限于其中输入序列值改变的情形,以限制过多的重新评估。
图7描绘了优化反应性表达式的方法700。在附图标记710,标识反应性表达式中的唯一子表达式。在720,例如基于对象标识符生成用于标识子表达式的输入源的代码。在附图标记730,生成用于滤掉子表达式的重复输入源的代码。结果,限制可观测序列或输入源的预订,从而避免副效应的重复并提高性能。
图8示出优化反应性表达式的方法800的流程图。在数字810,从源获取输入。例如,根据对可观测序列的预订,可观测序列可将值推入观测器。在附图标记820,关于输入是否于先前或最后提供的输入相同作出确定。例如,可维持包括用于比较目的的最后提供值的高速缓存。如果在820,输入相同(“是”),则方法终止并且实际上丢弃该输入。或者,如果输入不相同,而是与相邻值不同(“否”),则在附图标记830更新与源相关联的一个或多个元素。
图9描绘了优化反应性表达式的方法900。在附图标记910,计算数据源改变的频率。换言之,确定输入源的闲谈(chattiness)。在数字920,例如,关于是否已经满足关于策略指定的阈值作出确定。换言之,该确定涉及例如基于特定频率或改变频率或基于成本/优点分析(其中成本关联于作出的改变且优点是实现变化的效果)修改反应性表达式的实现是否明智。如果不满足阈值(“否”),则方法可简单地终止。然而,如果在920,确定满足阈值(“是”),则方法在数字930处继续,其中基于数据源改变的频率优化反应性表达式。例如,与最大的改变频率相关联的源可被定位成具有最短的路径长度。
此处使用的术语“组件”和“系统”及其各种形式旨在表示与计算机相关的实体,其可以是硬件、硬件和软件的组合、软件、或执行中的软件。例如,组件可以是但不限于是,在处理器上运行的进程、处理器、对象、实例、可执行程序、执行的线程、程序和/或计算机。作为说明,在计算机上运行的应用和计算机都可以是组件。一个或多个组件可以驻留在进程和/或执行线程中,并且组件可以位于一个计算机内和/或分布在两个或更多计算机之间。
在本文中使用的词语“示例性”或其各种形式意味着用作示例、实例或说明。在此被描述为“示例性”的任何方面或设计并不一定要被解释为相比其它方面或设计更优选或有利。此外,各示例只是出于清楚和理解的目的来提供的并且并不意味着以任何方式限制或约束所要求保护主题或本发明的相关部分。可以理解,本来可呈现不同范围的多个附加或替换示例,但出于简明的目的已被省略。
本描述和所附权利要求书中使用的连接词“或”旨在意味着包括性“或”而非互斥性“或”,除非另有指定或从上下文中清晰可见。换言之,“X”或“Y”旨在意味着“X”和“Y的任何包括性排列。”例如,如果“‘A’采用‘X’”,“‘A’采用‘Y’”或“‘A’采用‘A’和‘B’两者”,则在任何上述情况下都满足“‘A’采用‘X’或‘Y’”。
如此处所使用,术语“推论”或“推断”通常指的是从经由事件和/或数据捕捉的一组观察结果来推理或推断系统、环境、和/或用户的状态的过程。可以使用推断来标识特定上下文或动作,也可以生成例如状态上的概率分布。推断可以是概率性的,即,基于对数据和事件的考虑,计算在感兴趣状态上的概率分布。推断也可以是指用于从事件集和/或数据集构成高级别事件的技术。这样的推断导致从一组观察到的事件和/或存储的事件数据构建新的事件或动作,不管事件在时间上是否紧密相关,以及事件和数据是来自一个还是多个事件和数据源。可采用各种分类方案和/或系统(例如,支持向量机、神经网络、专家系统、贝叶斯置信网络、模糊逻辑、数据融合引擎……)来执行关于所要求保护主题的自动化和/或推断的动作。
而且,对于在详细描述或权利要求书中使用术语“包括”、“包含”、“具有”、“含有”或其它形式的变型而言,这样的术语旨在以类似于术语“包括”的方式体现包含性,如同“包括”在用作权利要求书中的过渡词时所解释的那样。
为了为所要求保护主题提供上下文,图10以及以下讨论旨在提供对其中可以实现本主题的各方面的合适环境的简要、概括描述。然而,合适的环境只是示例并且并非旨在对使用范围或功能提出任何限制。
尽管能够在可以在一台或多台计算机上运行的程序的计算机可执行指令的一般上下文中描述以上公开的系统和方法,但是,本领域的技术人员将认识到,各方面也可以与其他程序模块等相结合地实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件和数据结构等。此外,本领域技术人员可以理解,上述系统和方法可用各种计算机系统配置实现,包括单处理器、多处理器或多核处理器计算机系统、小型计算设备、大型计算机、以及个人计算机、手持式计算设备(例如,个人数字助理(PDA)、电话、手表厖)、基于微处理器或可编程消费或工业电子设备等。各方面也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。然而,所要求保护主题的某些方面,如果不是所有方面的话,可以在独立计算机上实施。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中的一个或两者中。
参考图10,示出了示例通用计算机1010或计算设备(例如,台式机、膝上型计算机、服务器、手持式设备、可编程消费或工业电子产品、机顶盒、游戏系统……)。计算机1010包括一个或多个处理器1020、存储器1030、系统总线1040、大容量存储1050、以及一个或多个接口组件1070。系统总线1040与至少上述系统组件通信地耦合。然而,可以理解,在其最简单的形式中,计算机1010可包括耦合到存储器1030的一个或多个处理器1020,该一个或多个处理器920执行存储在存储器1030中的各种计算机可执行动作、指令和/或组件。
处理器1020可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或被设计为执行此处描述的功能的其任意组合来实现。通用处理器可以是微处理器,但在替换方案中,处理器可以是任何处理器、控制器、微控制器、或状态机。处理器1020还可被实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、多核处理器、结合DSP核的一个或多个微处理器、或任何其它这种配置。
计算机1010可包括各种计算机可读介质或以其他方式与各种计算机可读介质交互以便于控制计算机1010来实现所要求保护主题的一个或多个方面。计算机可读介质可以是能由计算机1010访问的任何可用介质,并包含易失性和非易失性介质以及可移动和不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。
计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,存储器设备(例如,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)……)、磁存储设备(例如,硬盘、软盘、磁带盒、磁带……)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD)……)、以及固态设备(例如,固态驱动器(SSD)、闪存驱动器(例如,卡、棒、键驱动器……)……)、或者可用于存储所需信息并且可由计算机1010访问的任何其他介质。
通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任何信息传送介质。术语已调制数据信号摂是指具有以在信号中编码信息的方式被设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。
存储器1030和大容量存储1050是计算机可读存储介质的示例。取决于计算设备的确切配置和类型,存储器1030可以是易失性的(例如RAM)、非易失性的(例如ROM、闪存厖)或是两者的某种组合。作为示例,包括诸如在启动期间在计算机1010内的元件之间传输信息的基本例程的基本输入/输出系统(BIOS)可被存储在非易失性存储器中,而易失性存储器可担当外部高速缓存存储器以便于处理器1020的处理等。
大容量存储1050包括相对于存储器1030用于存储大量数据的可移动/不可移动、易失性/非易失性计算机存储介质。例如,大容量存储1050包括但不限于,诸如磁盘或光盘驱动器、软盘驱动器、闪存存储器、固态驱动器、或记忆棒的一个或多个设备。
存储器1030和大容量存储1050可包括或其中存储有操作系统1060、一个或多个应用1062、一个或多个程序模块1064和数据1066。操作系统1060用于控制和分配计算机1010的资源。应用1062包括系统和应用软件之一或两者,并且可利用操作系统1060对资源的管理通过存储在存储器1030和/或大容量存储1050中的程序模块1064和数据1066来执行一个或多个动作。因此,应用1062可根据由此提供的逻辑来将通用计算机1010变成专用机器。
所要求保护主题的全部或各部分可以使用产生控制计算机以实现所公开功能的软件、固件、硬件或其任意组合的标准编程和/或工程技术来实现。作为示例而非限制,反应性编程系统100或其部分可以是或可以形成应用1062的一部分,并且包括存储在存储器和/或大容量存储1050中的一个或多个模块1064和数据1066,这些模块和数据的功能可在由一个或多个处理器1020执行时实现。
根据一个特定实施例,处理器1020可与片上系统(SOC)或在单个集成电路基座上包括或换言之集成硬件和软件的类似架构相对应。此处,处理器1020可包括至少与处理器1020和存储器1030相似的一个或多个处理器以及存储器等。常规处理器包括最少量的硬件和软件并且广泛依赖于外部硬件和软件。作为对比,处理器的SOC实现更强大,因为它将硬件和软件嵌入其中以能够用最少的硬件和软件或不依赖于外部硬件和软件来启用特定功能。例如,反应性编程系统100和/或相关联的功能可被嵌入到SOC体系结构中的硬件内。
计算机1010还包括通信地耦合到系统总线1040并方便与计算机1010的交互的一个或多个接口组件1070。作为示例,接口组件1070可以是端口(例如,串行、并行、PCMCIA、USB、火线厖)或接口卡(例如,声音、视频厖)等等。在一个示例实现中,接口组件1070可被具体化为用户输入/输出接口,该用户输入/输出接口使得用户能够通过一个或多个输入设备(例如,诸如鼠标等定点设备、跟踪球、指示笔、触摸垫、键盘、话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、照相机、其他计算机……)来将命令和信息输入到计算机1010中。在另一示例实现中,接口组件1070可被具体化为输出外围接口,该输出外围接口向显示器(例如,CRT、LCD、等离子……)、扬声器、打印机和/或其它计算机等提供输出。此外,接口组件1070可被具体化为网络接口,该网络接口使得能够诸如通过有线或无线通信链路与其他计算设备(未示出)通信。
以上所已经描述的内容包括所要求保护主题的各方面的示例。当然,出于描绘所要求保护主题的目的而描述每一个可以想到的组件或方法的组合是不可能的,但本领域内的普通技术人员应该认识到,所要求保护主题的许多进一步的组合和排列都是可能的。从而,所公开的主题旨在涵盖落入所附权利要求书的精神和范围内的所有这样的变更、修改和变化。
Claims (10)
1.一种促进反应性编程的方法,包括:
采用至少一个处理器(1020),所述处理器被配置来执行存储在存储器(1030)中的计算机可执行指令以执行以下动作:
自动生成使输入序列改变后的计算工作最小化的反应性表达式的经优化版本。
2.如权利要求1所述的方法,其特征在于,还包括从非反应性表达式生成反应性表达式。
3.如权利要求1所述的方法,其特征在于,生成经优化的版本包括消除对单个源的多次预订。
4.如权利要求1所述的方法,其特征在于,生成经优化的版本包括应用一个或多个域专用的优化。
5.如权利要求1所述的方法,其特征在于,生成经优化的版本包括生成将对反应性表达式的重新评估限于输入序列值改变的实例的代码。
6.一种促进反应性编程的系统(100),包括:
耦合到存储器(1030)的处理器(1020),所述处理器(1020)被配置来执行存储在所述存储器(1030)中的以下计算机可执行组件:
第一组件(110),配置成从非反应性表达式生成反应性表达。
7.如权利要求6所述的系统,其特征在于,还包括配置成优化反应性表达式的第二组件。
8.如权利要求7所述的系统,其特征在于,所述第二组件配置成改变反应性表达式以避免副效应的重复。
9.如权利要求7所述的系统,其特征在于,所述第二组件配置成改变反应性表达式以限制对反应性表达式的至少部分的重新评估。
10.如权利要求7所述的系统,其特征在于,所述第二组件配置成改变反应性表达式以优化特定域。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/291,475 US9400638B2 (en) | 2011-11-08 | 2011-11-08 | Reactive expression generation and optimization |
US13/291,475 | 2011-11-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102929637A true CN102929637A (zh) | 2013-02-13 |
CN102929637B CN102929637B (zh) | 2016-12-21 |
Family
ID=47644449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210442015.4A Active CN102929637B (zh) | 2011-11-08 | 2012-11-07 | 反应性表达式生成和优化 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9400638B2 (zh) |
EP (1) | EP2776922B1 (zh) |
CN (1) | CN102929637B (zh) |
WO (1) | WO2013070562A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9400638B2 (en) * | 2011-11-08 | 2016-07-26 | Microsoft Technology Licensing, Llc | Reactive expression generation and optimization |
US10574714B2 (en) | 2014-06-25 | 2020-02-25 | Microsoft Technology Licensing, Llc | Stream-based reactive programming platform |
US9798773B2 (en) * | 2014-12-12 | 2017-10-24 | International Business Machines Corporation | Generation of mapping definitions for content management system |
US10152310B2 (en) * | 2015-05-27 | 2018-12-11 | Nvidia Corporation | Fusing a sequence of operations through subdividing |
US11108758B2 (en) | 2018-06-08 | 2021-08-31 | Pivotal Software, Inc. | Reactive programming subscription context |
US11188593B1 (en) | 2018-12-28 | 2021-11-30 | Pivotal Software, Inc. | Reactive programming database interface |
US11340946B2 (en) * | 2019-02-14 | 2022-05-24 | Pivotal Software, Inc. | Reactive pooling |
US11080086B1 (en) | 2019-03-12 | 2021-08-03 | Pivotal Software, Inc. | Reactive transaction management |
US10871950B2 (en) | 2019-05-16 | 2020-12-22 | Microsoft Technology Licensing, Llc | Persistent annotation of syntax graphs for code optimization |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101409649A (zh) * | 2007-08-17 | 2009-04-15 | 丛林网络公司 | 嵌入式反应和主动型智能 |
US20100131556A1 (en) * | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Unified event programming and queries |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7010784B1 (en) * | 1999-09-03 | 2006-03-07 | Cadence Design Systems, Inc. | Method and system for split-compiling a hybrid language program |
US7260569B1 (en) * | 2002-02-21 | 2007-08-21 | Ncr Corporation | Evaluating expressions in stored procedures |
US7584462B2 (en) * | 2003-11-24 | 2009-09-01 | Laszlo Systems, Inc. | System for optimizing application start-up |
US7912863B1 (en) * | 2004-07-30 | 2011-03-22 | Microsoft Corporation | Compositional lifting of operations over structural types |
US7774376B1 (en) * | 2004-07-30 | 2010-08-10 | Microsoft Corporation | Type-system extensions for object-oriented language based on coercive subtyping with restrictions |
US7421702B1 (en) * | 2005-02-09 | 2008-09-02 | Cerylion, Inc. | User-driven, service oriented software application model |
US7421716B1 (en) * | 2005-02-09 | 2008-09-02 | Cerylion, Inc. | System and method for providing composite applications |
US8060868B2 (en) * | 2007-06-21 | 2011-11-15 | Microsoft Corporation | Fully capturing outer variables as data objects |
US8413119B2 (en) * | 2008-10-03 | 2013-04-02 | Microsoft Corporation | Semantic subtyping for declarative data scripting language by calling a prover |
US8949784B2 (en) * | 2008-10-03 | 2015-02-03 | Microsoft Technology Licensing, Llc | Type system for declarative data scripting language |
US8762942B2 (en) * | 2008-10-03 | 2014-06-24 | Microsoft Corporation | Bidirectional type checking for declarative data scripting language |
US8214795B2 (en) * | 2008-11-26 | 2012-07-03 | Optumsoft, Inc. | Efficient automated translation of procedures in constraint-based language |
US20120047495A1 (en) | 2010-08-18 | 2012-02-23 | Microsoft Corporation | Execution environment support for reactive programming |
US20120084749A1 (en) | 2010-10-01 | 2012-04-05 | Microsoft Corporation | Programming language support for reactive programming |
US9400638B2 (en) * | 2011-11-08 | 2016-07-26 | Microsoft Technology Licensing, Llc | Reactive expression generation and optimization |
-
2011
- 2011-11-08 US US13/291,475 patent/US9400638B2/en active Active
-
2012
- 2012-11-06 EP EP12847100.0A patent/EP2776922B1/en active Active
- 2012-11-06 WO PCT/US2012/063633 patent/WO2013070562A1/en active Application Filing
- 2012-11-07 CN CN201210442015.4A patent/CN102929637B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101409649A (zh) * | 2007-08-17 | 2009-04-15 | 丛林网络公司 | 嵌入式反应和主动型智能 |
US20100131556A1 (en) * | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Unified event programming and queries |
Non-Patent Citations (1)
Title |
---|
KIMBERLEY BURCHETT ET AL: "lowering: a static optimization technique for transparent functional reactivity", 《IN ACM SIGPLAN SYMPOSIUM ON PARTIAL EVALUATION AND SEMANTICS BASED PROGRAM MANIPULATION》 * |
Also Published As
Publication number | Publication date |
---|---|
EP2776922B1 (en) | 2019-12-25 |
CN102929637B (zh) | 2016-12-21 |
EP2776922A4 (en) | 2015-06-24 |
US20130117736A1 (en) | 2013-05-09 |
WO2013070562A1 (en) | 2013-05-16 |
US9400638B2 (en) | 2016-07-26 |
EP2776922A1 (en) | 2014-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102929637A (zh) | 反应性表达式生成和优化 | |
CN102385513B (zh) | 反应式编程的编程语言支持 | |
NL2030226B1 (en) | Methods, systems, articles of manufacture and apparatus to optimize resources in edge networks | |
Hartmann et al. | The next evolution of MDE: a seamless integration of machine learning into domain modeling | |
WO2020182989A1 (en) | Scheduling computation graphs using neural networks | |
CA3022125A1 (en) | System and method for improved neural network training | |
CN102200932B (zh) | 预测性和持久性事件流 | |
CN111611478B (zh) | 信息推荐方法、装置和电子设备 | |
CN102708121A (zh) | 异构源上的动态分布式查询执行 | |
Kwon et al. | Tensor casting: Co-designing algorithm-architecture for personalized recommendation training | |
CN102591925A (zh) | 以多维数据为中心的服务协议 | |
Khalil et al. | Distributed whale optimization algorithm based on MapReduce | |
Gao et al. | A novel gapg approach to automatic property generation for formal verification: The gan perspective | |
CN102591710B (zh) | 共享对象表示 | |
CN102541993A (zh) | 用于分布式计算的电子表格模型 | |
CN111125519A (zh) | 用户行为预测方法、装置、电子设备以及存储介质 | |
Chen et al. | A novel framework for prediction of dam deformation based on extreme learning machine and Lévy flight bat algorithm | |
Erraissi et al. | Meta-modeling of data sources and ingestion big data layers | |
Xiao et al. | OpenABLext: An automatic code generation framework for agent‐based simulations on CPU‐GPU‐FPGA heterogeneous platforms | |
CN108400929B (zh) | 数据处理方法、装置、计算设备和介质 | |
CN116541069A (zh) | 关键函数评估方法、装置、电子设备、介质和程序产品 | |
CN102402420B (zh) | 解析可观察集合 | |
Chen et al. | Graph deep factors for probabilistic time-series forecasting | |
Huang et al. | Research on optimization of real-time efficient storage algorithm in data information serialization | |
CN102541636B (zh) | 对事件进行建模的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150728 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150728 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |