当前位置: 首页 > 专利查询>微软公司专利>正文

注入组合查询的单子评估制造技术

技术编号:8271320 阅读:206 留言:0更新日期:2013-01-31 03:31
本申请涉及注入组合查询的单子评估。这里的实施例能在单子内部对注入的查询进行评估。一个或多个带有闭包的运算符将被从第一进程接收。带有闭包的运算符代表的是由第二进程应用的一个或多个函数。第二进程对接收到的带有闭包的运算符进行评估,以便在单子内部应用函数。在评估过程中,第二进程将闭包转换成简单类型的闭包。更进一步,第二进程将经过转换的闭包绑定在单子内部,以便限制函数的运行。在一些实施例中,所述查询(例如一个或多个带有闭包的运算符的序列)是使用来自编码在表述性状态转移(REST)风格的统一资源定位符(URL)中的语言集成查询(LINQ)框架的查询运算符集合组成的。

【技术实现步骤摘要】
注入组合查询的单子评估的制作方法注入组合查询的单子评估
技术介绍
计算机之间的数据交换可以采用客户机-服务器通信、点到点通信、进程到进程通信等形式。一些已有的系统尝试通过预先编程一个设备从另一个设备接收的数据查询来预期这些数据查询。然而,此类系统需要相当多的资源,并且无法预期每一个可能的数据查询。其他已有的系统允许设备创建命令式查询,例如在JAVASCRIPT脚本语言中。然而,对此类系统来说,这些查询会因为所述查询所具有的长度及其句法复杂度而难以构成、序列化和解析。更进一步,至少由于命令式查询考虑了执行来自不可信的来源的代码(例如执行不受限制的分配和拷贝),所述命令式查询会暴露出安全漏洞。就此而论,这些现有系统无法防止或包含那些已被注入到经由超文本传输协议(HTTP)之类的传输协议发送的通信之中的恶意查询的执行
技术实现思路
本公开的实施例允许将操作双向、动态可编程地注入到第一进程与第二进程之间的通信中。第二进程从第一进程接收一个或多个具有闭包的运算符的序列。所述闭包代表的是第二进程在单子(monad)内部应用的一个或多个函数。第二进程对所接收的具有闭包的运算符进行评估,以便执行函数。在评估过程中,所述闭包被转换成简单类型的闭包。更进一步,对具有经过转换的闭包的运算符所进行的评估将被绑定在单子内部,以便限制函数的运行。本概述是为了以简化形式引入精选概念而被提供的,并且在以下的详细描述中将会进一步描述这些概念。本概述的目的既不是唯一确定所保护主题的关键或决定性要素,也不是帮助确定描述所保护的主题的范围。附图说明图I是示出了第一进程与第二进程进行通信来获取具有查询注入的数据的例示框图。图2是示出了用以评估所接收的具有闭包的运算符的第二进程的操作的例示流程图。图3示是出了通过与web服务进行通信来获取具有查询注入的数据的客户机设备的例示框图。图4是不出了对作为统一资源定位符(URL)中具有lambda表达式的运算符嵌入的查询所进行的单子处理的例示流程图。图5是示出了用于注入查询的单子处理(monadic processing)的计算设备上的计算机可执行组件的例示框图。在附图中,相应的参考字符指示相应的部分。具体实施方式参考附图,本公开的实施例允许评估可动态编程、组成的非命令式(non-imperative)查询。在一些实施例中,使用了查询运算符集合的声明闭包(declarative closure)是在用于web应用和移动应用中的双向查询注入的脚本语言中实施的。虽然这里的一些示例是参考lambda表达式公开的,但是本公开的各方面并不局限于lambda表达式,而是可以结合任何形式的闭包或其他闭合表达式来操作。例如,这里的实施例是可以与匿名内部类一起操作的。本公开的方面包括能对可枚举的数据集合(例如其元素在指定 时间在存储器中是可用的)或异步数据集合(例如其元素是在不同时间到达的)实施组合查询的查询运算符集合。枚举量(enumerables)代表的是分布在空间域上的数据,而可观测量(observables)代表的则是分布在时间域上的数据。举个例子,枚举量可以跨越包括存储器、本地磁盘存储器、远端数据库等等在内的空间域。利用枚举量,可以将应用编写成好像所有数据在存储器中是同时可用的,即使这些数据在物理上分布于多个设备。在可观测模型中,应用被编写成好像数据是以不可预测的方式分布于时间上的,即使一些或所有数据在特定时间是部分可用的。由于是可编程的,本公开的方面中的查询允许应用开发人员以不可预测的方式来使用服务器或web应用的数据资源。例如,在这里没有必要使用客户机可能希望的所有可能的查询来对服务器进行预先编程。由于一些不可预测的方式可能是恶意的,因此,本公开的方面设想了沙箱、类型检查、超时、重启及其他手段来防止运行恶意功能。就此而论,本公开的方面能够实现可编程的web服务,例如web服务304。举例来说,组合查询是模块化的,并且很容易在图形用户界面中构造(例如按钮、下拉列表、菜单等等)。这些查询由具有lambda表达式的一个或多个运算符的管道序列(例如查询管道或单子管道)组成。管道序列中的每一个阶段都包括具有至少一个lambda表达式的至少一个运算符。由于这些具有lambda表达式的运算符很短并且是声明式的,因此,具有lambda表达式的运算符是以很低的成本发送、签名、记人日志、解析、处理、分析、改写、编译、沙箱化及归档的,而这至少会使处理得以简化。这些查询可以由服务器使用网络套接字和/或基于事件的输入-输出环境来实现。在一些实施例中,这些查询被封装到超文本标记语言(HTML)中(例如使用统一资源定位符来编码)和/或在超文本传输协议(HTTP)POST主体中用公钥密码加密系统(PKCS)来进行数字签名。此外,这些查询还可以被解析成JAVASCRIPT对象标注(notation),以便与C#之类的编程语言进行互通。关于具有lambda表达式的运算符的一个示例是Select (X => x < 10)”。运算符是Select”并且lambda表达式是“X => x〈 10”。这个lambda表达式的含义是“返回布尔表达式‘X < 10’的值的X的函数”。Lambda表达式是从一种类型的值到另一种类型的值的函数或其他变换。在本段的这个示例中,X具有数值类型(例如由于小于运算符“〈”的存在而推断出),并且返回的函数值具有布尔类型(例如从返回类型“〈”推断为“真”或“伪,,)。每一个具有lambda表达式的运算符都具有一个处于点”左侧的单子表达式。举例来说,如果M是单子表达式,那么“M. Select (X => x〈 10) ”是具有lambda表达式的例示运算符。每一个具有lambda表达式的运算符转而产生新的单子表达式。如果将具有lambda表达式的运算符链接在一起,则能够创建单子管道。举例来说,“M. Select (someLambda).Where (someLambda) ”是一个单子表达式,其中 M是一个单子表达式 Select (some lamb da) ”是具有lambda表达式的运算符, Where (some lamb da) ”是另一个具有lambda表达式的运算符,“M. Select (somelambda) ”是另一个单子表达式,以及 “M. Select (somelambda). Where (somelambda) ” 是第三个单子表达式。这些查询可以用来自语言集成查询(LINQ)框架的查询运算符集合来组成,但是其·他基于查询的框架也是可以考虑的。具有lambda表达式的查询运算符组合或管道可以依照表述性状态转移(REST)样式而被嵌入在统一资源定位符(URL)中。所述查询是双向的,而这至少部分是因为所述查询可被从客户机注入到服务器或是从服务器注入到客户机。此外,这些查询还可以被推送-拉取(push-pull),其中推送风格的表达式(例如基于IObservable)和拉取风格的表达式(例如基于IEnumerable)可以使用许多相同的LINQ运算符和lambda来编写。在一些情况中,用于IEnumerable数据集合(例如分布在空间中)的查询管道在句法本文档来自技高网...

【技术保护点】
一种用于以双向、可动态编程的方式来将操作注入到第一进程(104)与第二进程(106)之间的通信中的系统,所述系统包括:与第二进程(106)相关联的存储区域(506),所述存储区域(506)存储统一资源定位符(URL)(510),所述统一资源定位符中嵌入了带有闭包的一个或多个运算符,所述带有闭包的运算符对应于至少一个关于数据的请求;以及处理器(502),其被编程成:经由网络从第一进程(104)接收该URL(510),以及将接收到的URL(510)保存在存储区域(506)中;从存储区域(506)中保存的URL(510)中提取带有闭包的运算符;由第二进程(106)评估所提取的带有闭包的运算符,以便产生所请求的数据,所述评估包括:将闭包转换成简单类型的闭包,以及将带有经过转换的闭包的运算符绑定在单子内部,以便封装从带有经过转换的闭包的运算符中产生的数据;以及将所产生的数据发送到第一进程(104)。

【技术特征摘要】
2011.10.21 US 13/2792451.一种用于以双向、可动态编程的方式来将操作注入到第一进程(104)与第二进程(106)之间的通信中的系 统,所述系统包括 与第二进程(106)相关联的存储区域(506),所述存储区域(506)存储统一资源定位符(URL) (510),所述统一资源定位符中嵌入了带有闭包的一个或多个运算符,所述带有闭包的运算符对应于至少一个关于数据的请求;以及 处理器(502),其被编程成 经由网络从第一进程(104)接收该URL (510),以及将接收到的URL (510)保存在存储区域(506)中; 从存储区域(506)中保存的URL (510)中提取带有闭包的运算符; 由第二进程(106)评估所提取的带有闭包的运算符,以便产生所请求的数据,所述评估包括 将闭包转换成简单类型的闭包,以及 将带有经过转换的闭包的运算符绑定在单子内部,以便封装从带有经过转换的闭包的运算符中产生的数据;以及 将所产生的数据发送到第一进程(104)。2.权利要求I的系统,其中第一进程是由客户机设备运行的,并且第二进程是由云服务运行的。3.权利要求I的系统,其中第一进程是由云服务运行的,并且第二进程是由客户机设备运行的。4.权利要求I的系统,其中处理器被编程成通过将至少一个操作应用于通过评估每一个带有经过转换的闭包的运算符所产生的数据而将带有经过转换的闭包的运算符绑定在单子内部,其中相同的操作被应用于从管道中带有经过转换的闭包的在先运算符中产生的数据上。5.权利要求I的系统,还包括 用于利用单子处理以脚本语言嵌入在URL中的查询运算符的装置;以及 用于由web服务来对带有闭包的运算符进行单子评估的装置。6.一种方法,包括 从第一进程(104)接收一个或多个带有闭包的运算符,所述带有闭包的运算符代表的是由第二进程(106)执行的一个或多个函数;以及 第二进程(...

【专利技术属性】
技术研发人员:B贝克曼E格森G金基A巴齐夫S钦奈HJM梅杰
申请(专利权)人:微软公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1