用数据库运算符的状态机表达的制作方法

文档序号:6327739阅读:299来源:国知局
专利名称:用数据库运算符的状态机表达的制作方法
技术领域
本发明涉及系统设计,尤其涉及使用状态机的系统设计。
背景技术
状态机是用于设计实时系统和硬件的一种机制。虽然没有在软件中的多,但已经在硬件中开发并广泛地采用状态机理论和优化。

发明内容
状态机可以使用数据库查询语言的事件驱动对象来表示。可以将来自数据库查询语言的绑定运算符用作状态转移函数,其中转移函数具有定义状态的副效应。对象可以用事件驱动表达式和运算符来操纵并且执行原本对于简单状态机而言复杂的操作。提供本发明内容以便以简化形式介绍将在以下的具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。


在附图中,图1是示出可以使用数据库查询语言来执行状态机的设备的实施例的图示。图2是示出用于使用数据库查询语言来表达状态机的方法的实施例的流程图示。图3是示出在反馈机制中使用的有限状态机的实施例的图示。图4是示出简单的有限状态机的实施例的图示。
具体实施例方式可以一般化关系数据库的概念并将其用来实现状态机。一般化的关系数据库概念可以允许来自关系数据库应用程序的增强的表达能力,以及允许使用状态机来实现关系数据库。标准关系数据库可以由行的集合以及行的元组来表示,我们可以将行的集合定义为‘集合’,我们可以将行的元组定义为‘类’。贯穿本文,使用符号M<T>来讨论集合,其中M表示集合而T表示存储在集合中的项的数据类型。为了使集合工作,存在若干公理0::Μ<Τ>-空集U: :MXT>x M<T> — M<T>-两个集合的并集产生另一集合。{J :T — Μ<Τ>-将值注入到集合中。在这种情况下,可以创建单个元素或单元素
皇A
朱口 ο在关系代数中使用若干公共运算符来对数据库执行操作σ :Μ<Τ>χ(Τ — bool) — M<T>-从关系代数的过滤或选择操作。
函数(T — bool)是过滤函数。Ji :Μ<Τ>χ (Τ - S) - M<S>-投影或变换操作将集合从类型T变为类型S。X: :M<T>x M<S> — M<TxS>- 一对集合可被变成对的集合。定义了又一个运算符klectMany (选择许多)M<T>x(T —M<S>) — M<S>-来自关系代数的相关子查询。函数(T —M<S>)定义了如何将M<T>的元素分成S型元素的集合,随后被展平成S元素的集合。可以使用klectMany运算符来表达以上定义的以上关系代数操作中的任一个。σ (as) = as. SelectMany ( λ a — P (a) ? {a} :0)-使用函数 P (a)从集合 ‘as,中过滤项‘a’。P (a)处理每一项λ a,并创建单元素集合{a}或创建空集。随后将各项展平成带有与原始集合相同类型的新的集合或将其加入到新的集合中。Ji (as) = as. SelectMany ( λ a — {F (a)})-通过应用函数F (a)来投影各项并创建单元素集合。随后将单元素集展平成带有与原始集合相同类型的新的集合或将其加入到新的集合中。as X bs = as. SelectMany ( λ a ^ σ λ b ^ (a,b) (bs))-结合一对集合 ‘as,禾口 ‘bs,。klectMany中使用的函数可以是代码的任意表示。在某些情况下,函数可以是对象或在某些情况下可以是描述以及可执行函数。通过使用以上的klectMany符号,出现了多个一元体(monad)集合M<_>对应于算符运算符kIectMany对应于绑定单元素集合U对应于返回或η结合一元体取各集合的集合(a collection of collections)并将结果展平为单
小隹A
I朱口。μ :M<M<T>> — M<T>结合一元体可以使用kIectMany来表示。μ tss = tss. SelectMany ( λ ts — ts)因此,数据库描述符和运算符可以被一般化为一元体。可以将数据库查询引擎的技术应用于更一般化的一元体概念。Mealy机是有限状态机,它可以被一般化为一元体的概念。Mealy机是由以下各项组成的6_元组(S,S0,Σ,Λ,T,G)状态的有限集(S)开始状态或初始状态(SO),它是S的一个元素被称为输入字母表的有限集(Σ )被称为输出字母表的有限集(Λ)将状态和输入字母表映射到下一状态的转移函数(Τ :S χ Σ — S)将每一状态和输入字母表映射到输出字母表的输出函数(G :S χ Σ— Λ)Mealy机的函数可以如下表达,其中*指示各项的集合Next (下一个)状态χ输入一状态
Out (输出)状态χ输入一输出Run(运行)状态χ输入*x((状态χ输入一状态)x(状态χ输入一输出))一(输出X状态)*Rim的表达式指示输入和状态的集合得到输出和状态的集合。可以进一步一般化这些表达式,其中可以组合状态χ输入一状态函数以及状态χ 输入一输出函数来创建产生输出对的单个函数 状态χ输入一输出χ状态输出可以是输出的集合。状态χ输入一输出*x状态Mealy机Run表达式可以被重写为状态χ输入*x(状态χ输入一输出*x状态)一(输出χ状态)*在编程语言中,全局状态是隐式的,将以上表达式简化为输入*x (输入一输出*)—输出*输入序列的集合,将输入转换为输出序列的函数得到输出序列。该表达式可以使用.NET框架中的klectMany来定义为IEnumerable (可枚举)<T>SelectMany (该 IEnumerable<S>src (源),Func (函数)<S,IEnumerable<T 选择器)当选择器函数产生副效应时,可以使用该表达式来实现状态机。以上所述的Mealy 机被示为有限状态机,但该表达式还可用于实现无限状态机。副效应函数可以是改变输入和输出参数以外(即,环境中的)的状态的任何函数。可以在常规数据库语言系统中使用副效应函数来表达状态机。状态机的输入可以被认为是状态机可以处理的‘事件’。在处理事件时,可以更新状态并生成输出。可以使用数据库查询语言处理器通过将查询输入定义为状态序列来表达状态机。 可以使用变换函数将状态序列绑定到序列输入以创建输出事件流。当变换函数具有副效应时,那些副效应在对输入事件流作出响应时可以定义状态机的状态。在某些情况下,输入类型可以与输出类型不同。当且仅当N<T> — M<T>时以下语句保持为真M<I>x(I — Ν<0 — Μ<0>类似地,当且仅当Μ<Ν<0>> — Ν<0>时以下语句保持为真Μ<Ι>χ(Ι — Ν<0 — Ν<0>在某些实施例中,输入可以被创建为推或拉输入。拉输入可以请求输入并在处理输入之前可以等待直到接收到输入。在推输入中,状态机可以在任意时刻接收输入并且在其到达后处理输入。本说明书通篇中,在所有附图的描述中,相似的附图标记表示相同的元素。在将元素称为被“连接”或“耦合”时,这些元素可以直接连接或耦合在一起,或者也可以存在一个或多个中间元素。相反,在将元素称为被“直接连接”或“直接耦合”时,不存在中间元素。本发明主题可被具体化为设备、系统、方法、和/或计算机程序产品。因此,本发明的部分或全部能以硬件和/或软件(包括固件、常驻软件、微码、状态机、门阵列等)来具体化。此外,本发明可以采用其上包含有供指令执行系统使用或结合其使用的计算机可使用或计算机可读程序代码的计算机可使用或计算机可读存储介质上的计算机程序产品的形式。在本文的上下文中,计算机可使用或计算机可读介质可以是可包含、存储、通信、传播、 或传输程序以供指令执行系统、装置或设备使用或结合其使用的任何介质。计算机可使用或计算机可读介质可以是,例如,但不限于,电、磁、光、电磁、红外、 或半导体系统、装置、设备或传播介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由指令执行系统访问的任何其它介质。注意,计算机可使用或计算机可读介质可以是其上打印有程序的纸张或其它合适的介质,因为程序可以经由例如对纸张或其它介质的光学扫描而电子地捕获,随后如有必要被编译、解释,或以其它合适的方式处理,并随后存储在计算机存储器中。通信介质通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送介质。术语“已调制数据信号” 可以被定义为其一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括有线介质,如有线网络或直接线连接,以及诸如声学、RF、红外及其它无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。当本发明主题在计算机可执行指令的一般上下文中具体化时,该实施例可以包括由一个或多个系统、计算机、或其它设备执行的程序模块。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可以在各个实施例中按需进行组合或分布。图1是示出可用于开发和执行实现状态机的计算机程序的设备的实施例100的图。实施例100是其上可以创建和调试状态机的通用计算机的简化示例。所得可执行文件可以在同一设备或另一设备上执行。图1的示图示出系统的各个功能组件。在某些情况下,组件可以是硬件组件、软件组件、或硬件和软件的组合。某些组件可以是应用层软件,而其他组件可以是操作系统层组件。在某些情况下,一个组件到另一个组件的连接可以是紧密连接,其中两个或更多个组件在单个硬件平台上操作。在其它情况下,连接可以通过跨长距离的网络连接来形成。各实施例可以使用不同的硬件、软件、以及互连体系结构来实现所描述的功能。设备102可以是可用于开发、编辑、测试和执行计算机程序的常规计算机设备。设备102示出其上可以创建和执行可执行计算机程序的开发平台。其他设备可以在不能够编辑或改变计算机程序的情况下执行在设备102上开发的计算机程序。设备102可具有一组硬件组件104和软件组件106。各个组件表示通用计算设备, 该通用计算设备可以是服务器计算机、台式计算机、游戏控制台或其他计算机设备。在某些情况下,计算设备可以是便携式设备,例如膝上型计算机、上网本计算机、手持式移动电话或其他设备。
设备102所创建的计算机程序可以在任何类型的硬件或软件平台上执行,这些平台包括以上所述的设备,以及诸如路由器、交换机、存储设备和其他网络基础结构等的网络设备,诸如手持式诊断仪或远程传感仪等数据收集设备,诸如移动电话和手持式游戏设备等的便携式设备,或任何其他类型的计算设备。所列设备的类型不旨在穷举可能选项,只是说明可以使用设备102来执行所开发的程序的设备类型的宽度。硬件组件104可包括可以使用随机存取存储器110和非易失性存储112的处理器 108。硬件组件104还可以包括网络接口 114和用户接口 116。软件组件106可包括开发环境120可在其上执行的操作系统118。开发环境120 可具有编辑器121和编译器130,并且可以由程序员使用来创建源代码122。在某些实施例中,编译器130可以将源代码122编译成中间代码132,可以使用运行时执行器134来执行中间代码以处理输入136并生成输出138。在其他实施例中,源代码122可以在不使用解释器进行编译的情况下来解释。贯穿本说明书,计算机代码的示例使用C#和部分.NET框架来说明。其他语言可具有执行类似功能的不同句法和不同命令。源代码122可以使用数据库查询语言1 来表示状态机124。在某些情况下,数据库查询语言126可以与数据库1 交互。这些状态机的示例在本说明书的后文中说明。图2是示出用于使用数据库查询语言来表达状态机的方法的实施例200的流程图示。实施例200是用于使用数据库查询语言和状态机技术来创建、编译和优化程序的过程的简化示例。其它实施例可以使用不同顺序的、附加的或更少的步骤以及不同的名称或术语来实现类似的功能。在一些实施方式中,各种操作或一组操作可以按同步或异步的方式与其它操作并行执行。在此选择的这些步骤被挑选来以简化的形式示出操作的一些原理。在框202中,可以定义状态机状态,并且可以在框204中定义状态机的转移函数。 可以在框206中定义输出函数。框202到206的操作示出在定义状态机时程序员可以采用的步骤。在本说明书的后文中示出了简单状态机的两个示例,尽管状态机技术已经广泛实施。在框208中,可以使用数据库查询语言来定义状态机。如本说明以上所示,许多数据库查询语言运算符可以被一般化为一元体,还将这些一元体示为状态机的一般化形式。 具体地,可以使用许多数据库查询语言中使用的绑定运算符来表达常规地用于函数型编程和用于表达状态机的所有一元体运算符。在C#语言和.NET框架中,等价的绑定运算符是 SelectMany0在框210中,可以编译状态机。在编译期间,如果在框212中检测到副效应函数, 则编译器可以在框214中标识副效应函数。在许多编程环境中,数据库查询语言中的副效应函数可以是用于执行数据库查询的非常规机制。某些数据库系统可以执行以变换函数不产生副效应的假定为基础的某些查询优化。这些优化可以包括例如重定序输入序列来优化搜索。可能无法对定义状态机的副效应函数执行这些优化,因为状态机使用定序的一组输入来创建定序的一组输出。可以在框214中标识副效应函数从而使得程序员可以识别或批准副效应函数的使用。如果在框216中程序员不打算使用副效应函数,则过程可以返回至框208,在那里程序员可以编辑源代码。如果在框216中程序员选择忽略标识消息并且在框218中不执行优化,则在框220 中可以存储经编译代码,在框224中执行经编译代码,并且在框226中操作状态机。在在框212中未发现副效应函数的某些实施例中,可以在框220中存储程序并且在框222中执行程序。在该实施例中,所执行的程序可能不操作状态机。在框218中选择时,某些实施例可以执行各种优化例程。在框2 中,编译器可以标识有限状态机并且可以在框228中将各种有限状态机优化应用于代码。可以将若干不同的有限状态机优化应用于代码来优化有限状态机的性能。这些优化包括Hopcrof最小化算法、使用隐含表以及Moore简化过程。也可以将其他优化机制应用于状态机并且可以最小化存储器消耗,提升响应事件,减少代码大小以及其他性能增强。图3是示出可以使用数据库查询语言来实现的状态机的示例实施例300的图示。实施例300的状态机示出简单的反馈循环。输入302进入存储器304,存储器可以存储当前状态。变换函数306可以产生输出308和新的状态310。新的状态310被反馈回到存储器304中。可以定义实施例300的状态机的反馈循环,其中输入302被定义为集合,而函数 306的结果可以被定义为(输出和状态)对的集合。以上定义的函数可以将实施例300表达为状态χ输入*x(状态χ输入一输出*x状态)一(输出χ状态)*输入302可以被定义为输入的推集合。输入的推集合在启动函数306之前可以等待直到接收到新的输入。存储器304可以将状态310的改变与输入302的改变同步。图4是示出简单状态机的示例实施例400的图示。实施例400是可以仅使用数据库查询语言来实现的双态状态机的简单示例。实施例400的状态机是可以分析数据库表和移除表的奇数行的状态机。该状态机具有两个状态。第一状态404是‘偶’而第二状态406是‘奇’。从状态402到状态404的转移函数具有‘值’的输入406和‘返回(值),的输出408。从状态404到状态402的转移函数具有‘值’的输入410和‘空(),的输出412。实施例400的状态机可以用C#表示为
class OnlyEvenElements<T> {
bool Even = true; IEnumerable<T> Next (T value) { if(Even){ Even=false; return Return(value); } else { Even^true; return Empty<T>();}
}以上的类OnlyEvenElements (仅偶元素)使用由IEnumerableCD定义的输入集合并产生IEnumerableCD中的项的偶数元素的输出。状态机的状态是布尔表达式非偶即奇,其中奇数被定义为Even = false (偶=假)。
对象‘ IEnumerable<T>’可以表示来自集合T的单个值,而运算符‘Next’可以将集合递增至该集合中的下一对象。集合具有数据类型T。随后执行状态机,保留数据类型T的偶数编号元素而丢弃奇数编号元素。由OnlyEvenElementsCD表示的状态机将难以使用其他方法来编写,但当数据库查询语言用来表达状态机时得到单个且优雅的解决方法以上对本发明主题的描述是出于说明和描述的目的而提出的。它不旨在穷举本主题或将本主题限于所公开的精确形式,且鉴于以上教导其它修改和变形都是可能的。选择并描述实施方式来最好地解释本发明的原理及其实践应用,从而使本领域的其它技术人员能够在各种实施方式和各种适于所构想的特定用途的修改中最好地利用本发明。所附权利要求书旨在包括除受现有技术所限的范围之外的其它替换实施方式。
权利要求
1.一种系统,包括 处理器(108);数据库查询语言处理器(126),用于接收包括含有事件流的事件对象的输入定义以及包括变换函数和创建输出事件流的绑定运算符;所述系统被配置成执行一种包括以下动作的方法通过定义带有副效应的所述变换函数来表示状态机O08),所述副效应定义所述状态机中的至少一个状态;通过提供所述输入定义并使用所述数据库查询语言处理器来对所述输入定义执行所述变换函数来操作所述状态机(224)。
2.如权利要求1所述的系统,其特征在于,所述数据库查询语言处理器还 识别所述函数中的所述副效应。
3.如权利要求2所述的系统,其特征在于,所述数据库查询语言处理器还 提供关于所述副效应的用户通知。
4.如权利要求1所述的系统,其特征在于,所述状态机具有 一组状态;定义从第一状态变为第二状态的条件的转移函数; 产生在给定状态和输入下的输出的输出函数; 所述函数包括所述转移函数。
5.如权利要求4所述的系统,其特征在于,所述输入定义是推输入。
6.如权利要求4所述的系统,其特征在于,所述输入定义是拉输入。
7.如权利要求4所述的系统,其特征在于,所述一组状态包括开始状态和结束状态。
8.如权利要求7所述的系统,其特征在于,还包括中间状态。
9.如权利要求1所述的系统,其特征在于,所述数据库查询语言处理器包括 包括用于映射、过滤、绑定和交叉操作的运算符的一组标准查询运算符;对包括具有数据类型的项的集合的序列数据类型执行所述运算符的所述数据库查询语言处理器。
10.如权利要求9所述的系统,其特征在于,所述数据库查询语言处理器还 从所述函数中识别所述状态机;以及在执行所述状态机时执行有限状态机优化。
11.如权利要求10所述的系统,其特征在于,所述优化是下列各项组成的组中的一个 Hopcroft最小化算法;隐含表;以及 Moore简化过程。
12.一种方法,包括通过定义带有副效应的函数来表示状态机O04),所述副效应定义所述状态机中的至少一个状态;用数据库查询语言来表达所述函数O08); 定义包括事件序列的所述状态机的输入;使用所述输入用所述数据库查询语言来执行所述状态机(224)。
13.如权利要求12所述的方法,其特征在于,还包括 将所述函数编译成经编译代码;以及在所述编译期间检测所述函数中的所述副效应。
14.如权利要求13所述的方法,其特征在于,还包括 在用户界面中呈现注明所述副效应的警告。
15.如权利要求13所述的方法,其特征在于,还包括 对所述经编译代码执行有限状态机优化。
全文摘要
本发明描述了用数据库运算符的状态机表达。状态机可以使用数据库查询语言的事件驱动对象来表示。可以将来自数据库查询语言的绑定运算符用作状态转移函数,其中转移函数具有定义状态的副效应。对象可以用事件驱动表达式和运算符来操纵并且执行原本对于简单状态机而言复杂的操作。
文档编号G05B19/048GK102323772SQ20111009610
公开日2012年1月18日 申请日期2011年4月1日 优先权日2010年4月5日
发明者B·C·贝克曼, D·A·马诺列斯库, H·J·M·梅杰, J·W·戴尔, 格格 J·范 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1