具体实施方式
在各种实施例中,本发明包括:一种计算设备,计算机程序存储于该计算设备上的数据库内;存储和修改该计算机程序的系统和方法;执行该计算机程序的系统和方法;以及这里讨论的其它特征。存储的计算机程序包括编译代码以及可选地包括数据、脚本、标记语言、图像、源代码等。可选地按照粒度存储计算机程序,其中个体函数存储于单独数据记录中。通过在执行时从数据库取回存储的编译代码来执行计算机程序。在一些实例中,计算机程序是配置成通过浏览器来访问、修改和/或执行的基于因特网的应用的部分。
编译代码是已经解析并且从人类可读源代码形式转换从而更有效地由软件解释器执行的目标代码或者字节代码。字节代码可以由虚拟机(例如解释器)执行或者它可以进一步编译成机器代码。使用字节代码,可以在两个阶段中执行计算机程序:首先将源代码编译成字节代码、然后将字节代码传递给虚拟机。这样的虚拟机可移植和存在用于流行的编程语言,比如C、Java、Python、PHP(超文本预处理器)、Forth和Tcl(工具命令语言)的虚拟机。字节代码的其它例子包括BCPL编程语言的代码、UCSD Pascal的p-代码、Scheme 48、CLISP、CMUCL、Microsoft.Net共用中间语言等等。目标代码是编译器或者汇编器已经生成的源代码表示。这一代码可以包括二进制指令(机器代码)、用于由代码使用的数据、程序符号、重定位信息、调试信息等。对目标代码或者字节代码的编译通常包括对源代码进行语法校验并且解析源代码至少一次以生成目标或者字节代码。
图1图示了根据本发明各种实施例的计算系统100。计算系统100被配置用于预备、存储和/或执行计算机程序。如这里进一步所述,计算系统100可选地是包括多个配置成互相通信的分立设备的分布式系统。计算系统100包括至少一个计算设备110。计算设备110包括配置成执行计算机程序的硬件,比如处理器、存储器和输入/输出。在各种实施例中,计算设备110包括服务器、个人计算机(PC)、工作站、便携计算设备等。
计算设备110可选地经由网络120连接到其它计算设备。网络120可以包括因特网、广域网、局域网等。例如在一些实施例中,计算设备110包括配置成执行计算机程序的服务器,该计算机程序的输出通过因特网来传达并且在浏览器内呈现给用户。网络120也可以被配置成有助于在计算系统100的各种分布式单元之间的通信。
计算系统100还包括操作系统逻辑130。操作系统逻辑130可选地存储于计算设备110内的计算机可读介质上并且被配置成在计算设备110上运行以便支持在计算设备110上执行目标代码或者字节代码。操作系统逻辑130可选地还被配置成支持计算设备110上的文件系统。操作系统逻辑130可以例如包括LINUX、UNIX、BSDUnix、Mac OS X、HPUX、Solaris、Microsoft Windows等。
计算系统100还包括数据库140。数据库140通常是存储于计算机可读介质上的关系数据库并且可以存储于计算设备110上或者计算系统100内的一些其它计算设备上。数据库140包括配置成存储计算机程序的编译代码的数据记录。数据库140内的数据记录可选地也被配置成存储计算机将对其操作的数据、与计算机程序有关的配置数据、非编译计算指令等。例如存储于数据库140的数据记录中的非编译计算指令可以包括脚本、标记语言指令、源代码、配置成以文本格式来解释的代码等。编译和非编译计算指令可以存储于相同和/或不同数据记录中。在一些实施例中,计算系统100包括配置成存储编译代码的数据库140的实例和配置成存储有关源代码的类似数据库。编译代码在不同数据记录之中的逻辑划分可以类似于源代码在数据库记录之中的划分。这里例如参照图2描述数据库140的更多细节。
数据库140通常由与数据库140安装于相同计算设备上的数据库管理逻辑150管理。数据库管理逻辑150被配置成使用查询来访问(例如读取或者写入)数据库140内的记录。数据库管理逻辑150也可以被配置成控制对数据库140的访问、限定数据库140内的数据记录表、登记对数据库140的操作和/或进行从数据库管理工具普遍可用的其它功能。数据库140可选地被配置成存储多于一个的计算机程序的编译代码。
计算系统100还包括代码执行逻辑160。代码执行逻辑160被配置成通过数据库管理逻辑150执行一个或者多个查询从数据记录取回编译代码并且使用操作系统逻辑130来执行取回的代码。代码执行逻辑160可以存储于计算设备110上或者计算系统100内的一些其它计算设备上。
具体而言,代码执行逻辑160被配置成制定如下查询,这些查询被配置成取回下一条所需存储的编译代码。例如当先执行计算机程序时,代码执行逻辑160可以用来制定如下查询,该查询被配置成识别数据库140内的如下数据记录,该数据记录包括计算机程序的入口点的代码。这一查询可以包括程序的标识符以及如下参数,该参数表明需要入口点。这一查询的结果包括然后向操作系统逻辑130传递用于执行的入口点代码。代码执行逻辑160然后用来制定第二查询,该第二查询被配置成从数据库140取回下一代码用于在操作系统逻辑130上执行。可以在制定第一查询之后和/或可以在执行第一代码之后制定第二查询。
如果按照通过第一查询来取回的代码的程序流程已知,则可以在第一查询之后不久制定第二查询。程序流程是将执行代码的顺序。可以例如使用计算机程序内的条件分支语句来改变程序流程。这些条件分支语句例如包括IF语句、WHILE语句、CASE语句等。如果计算机程序包括条件分支语句,则第二查询的内容可以依赖于执行使用第一查询来取回的代码的结果。因此,在一些实施例中,可能直至完成执行第一查询的代码才有可能制定第二查询。
有时条件分支语句包括程序流程应当跳转至的标记。在现有技术的系统中,这一标记可以转换成指针。在一些实施例中,标记用作第二查询中的参数。在查询内,这一标记由数据库管理逻辑150用来识别将执行的下一代码存储于其中的数据记录。由于这一特征,数据库管理逻辑150的查询能力可以用来控制执行的程序内的程序流程。这可以实现若干优点。例如可以通过向数据库140添加适当数据记录并且使用将在查询中包括的标记对添加的数据记录编索引(通过代码执行逻辑160)来向条件分支语句添加新选项(程序流程目的地)。在各种实施例中,代码执行逻辑160从用户、从命令行、从配置文件、从对可用硬件的检查接收在查询中包括的参数,从数据库、Web请求数据和/或另一计算机程序取回查询中包括的参数。
代码执行逻辑160可以被配置成在第二查询之后制定和执行具有类似特性的更多查询。重复这一过程直至程序终止。
计算系统100还可选地包括配置成从源代码生成编译代码的代码编译逻辑170。代码编译逻辑170可选地是配置用于将源代码编译成字节或者目标代码的标准编译器。代码编译逻辑170代之以是配置成将源代码编译成字节或者目标代码并且以如下逐条形式输出源代码的定制编译器,该形式包括范围适合于在数据库140中存储的多条编译代码。例如编译逻辑170可以将编译代码划分成函数(过程)级、功能级、按照类别定义的部分或者其它逻辑单元。在一些实施例中,基于计算机程序内的程序流程将编译代码划分成部分。在这些实施例中,可以在代码内的向标记的跳转的产生点划分编译代码。在一些实施例中,代码编译逻辑170被配置成自动编译接收的源代码,然后在数据库140中存储编译代码。代码编译逻辑170可以存储于计算设备110或者计算系统100的一些其它计算设备中。在一些实施例中,代码编译逻辑170被配置成在数据记录中存储用于类的定义代码或者代之以在单独数据记录中存储类别的各类方法。
计算系统100可选地还包括配置用于修改和以别的方式操纵编译代码的代码管理逻辑180。在一些实施例中,代码管理逻辑180被配置用于让用户访问源代码、取回访问的源代码、编辑源代码、使用代码编译逻辑170来编译源代码和/或在数据库140中存储编译的源代码。代码管理逻辑180通常将数据库管理逻辑150用于访问、取回和在数据库140中存储编译代码。数据库管理逻辑150可选地还使用数据库管理逻辑150(或者其实例)来访问数据库140或者另一数据库中存储的源代码。
代码管理逻辑180可选地被配置用于在Web浏览器内使用。例如代码管理逻辑180可以被配置用于经由因特网来与数据库管理逻辑150和/或代码编译逻辑170通信。在一些实施例中,代码管理逻辑180被配置成使用数据库管理逻辑150的一个或者多个实例来访问编译代码和源代码。例如,如果源代码存储于数据库中,则代码管理逻辑180可以使用查询以访问这一源代码。源代码可以存储于单个记录中或者以逐条方式存储于多个记录中。在源代码存储于多个记录中的实施例中,代码管理逻辑180可选地被配置成一次向用户呈现一条源代码或者同时向用户呈现若干条源代码。当同时向用户呈现若干条源代码时,对包括源代码的数据库的查询结果可以附加在一起,从而将源代码呈现为人类可读文本的连续体。代码管理逻辑180可选地被配置成在编辑环境内向用户呈现源代码,从而源代码可以由用户修改。
如果编辑源代码,则代码管理逻辑180被配置成存储编辑的源代码。这一存储可以在文件中或者在数据库中。代码管理逻辑180还被配置成编译编辑的源代码并且在数据库140中存储编译的源代码。源代码可以按照它的整体或者以逐条方式来编译。例如,如果从数据库取回仅一条源代码和对它进行编辑,则可以重新编译并且在数据库140中以编译形式存储仅这一条源代码。
计算系统100可选地包括配置成解释接收的命令的命令解释逻辑190。命令解释逻辑190可以存储于计算设备110内的计算机可读介质上并且可选地被包括于代码执行逻辑160和/或代码管理逻辑180中。命令解释逻辑190被配置成接收命令并且处理这一命令用于执行可执行代码。接收的命令可以包括命令行或者通用资源定位符并且通常包括多个可解释对象。
代码管理逻辑180可选地被配置用于管理数据库140的记录内的这里讨论的编译代码、源代码或者其它信息的不同实例。例如第一版本的编译代码可以存储于第一记录中而第二版本的编译代码可以存储于第二记录中。记录可选地包括配置用于存储如下信息的字段,该信息可以用来区别两个实例。这一字段可以包括版本标识符、口令、日期、调试标志、浏览器标识、标记、数据库发出的唯一ID(例如整数)、人类可读描述等。
在一些实施例中,不同代码实例因用户进行的改变而不同。例如用户可以编辑源代码并且在第一记录中存储原版本而在第二记录中存储新版本。在一些实施例中,不同代码实例不同在于它们的编译方式。例如一个实例可以包括用于在开发模式中使用的调试信息而一个实例可能缺乏如将在生产模式中希望的调试信息。在一些实施例中,不同代码实例不同在于与安全级或者权限有关的方式。例如可以根据用户是否登录、用户的口令、标识和/或权限、网络安全协议、网际协议地址、MAC地址等来选择不同实例。在一些实施例中,不同代码实例不同在于它们与之关联的人类语言。例如一个实例可以被配置成解析英文字符而另一实例可以被配置成解析中文字符。实例可以不同在于其它功能类型、例如不同在于如何进行计算、向用户赋予的特征、界面样式、它们支持的浏览器、它们支持的硬件等。
代码管理逻辑180可选地还被配置成管理数据库140的不同记录中的除了代码之外的多个信息实例。例如配置数据、样式表、显示文本的不同实例可以存储于不同记录中。可以基于可用硬件、浏览器类型、优选人类语言等来选择这些实例。例如可以响应于接收的关于可用硬件、目标操作系统、用户偏好等的信息来选择配置数据的特定实例。
在一些实施例中,计算机程序的不同部分的实例在逻辑上分组成实例集。实例集是配置成一起操作的多个实例。例如,如果计算机程序包括多个部分并且这些部分中的一些部分被修改,则修改的部分可以相互依赖。与第二部分的修改实例组合使用第一部分的原实例可能造成错误。在一些实施例中,代码管理逻辑180被配置成将在相同事件期间修改的实例分组成实例集。这一分组可选地是自动的。数据库140的记录可选地包括配置成存储一个或者多个如下标签的字段,该标签标识实例集中的隶属关系。实例可以是多个实例集的成员。可以使用这里别处讨论的前缀或者映射来选择实例集。
在一些实例中,代码管理逻辑180被配置成使用数据库管理逻辑150的特征以帮助管理各种实例。例如数据库管理逻辑150中包括的事件登记特征可选地用来跟踪数据库140内的实例。在另一例子中,数据库管理逻辑150内包括的退回特征可以用来恢复先前实例。
有能力按照比现有技术中可能的粒度级更多的粒度级执行、存储和操纵计算机程序的部分可以具有诸多优点。例如,如果需要计算机程序的两个不同版本,则在现有技术中保持源文件和可执行文件的两个副本。如果在计算机程序的版本之间的差异出现于仅一个或者两个函数中,则在本发明的一些实施例中仅必须存储这些函数的实例。
本发明的一些实施例包括调度逻辑185。调度逻辑185被配置成允许根据调度表来执行计算机程序的函数。调度逻辑185可以用来在逐个函数的基础上调度这一执行。例如调度逻辑185可以向代码执行逻辑160发送请求以请求执行数据库140的记录中存储的特定函数。可选地完成这一点而不执行该函数为其一部分的计算机程序的其它部分。调度逻辑185可以执行于数据库服务器、Web服务器、客户端设备等上并且可以执行于与数据库140或者计算设备110分离的设备上。
在命令内的可解释对象可以例如包括预定义前缀、向数据库140的映射和/或静态值。预定义前缀是用来表征后续对象的对象。例如预定义前缀可以用来表明命令内的接下来三个对象应当视为映射和两个值或者一些其它对象组合。预定义前缀指定的对象可以是另一预定义前缀。这导致命令内对象之间的等级关系。使用预定义前缀也允许命令解释为语法结构。例如一种如下结构,其中对象的解释可以依赖于命令内的其它对象而不是仅依赖于静态模板。在一些实施例中,语法结构允许命令包括有关对象的短语。
映射对象是向数据库140内的数据记录映射的对象。在各种实施例中,映射对象包括指向特定数据记录的索引和/或可以用来选择多个数据记录。由于映射对象映射到数据库140内的一个或者多个数据记录,所以映射对象可以用来选择特定可执行代码用于执行。例如映射对象可以传递给代码执行逻辑160用于被包括于查询中。传递的映射对象可以被配置成选择多个替代函数之一用于执行。在一些实施例中,映射对象也可以适于作为预定义前缀。例如映射对象可以用来选择数据库140内的数据记录并且也表征命令内的后续对象。值对象包括静态值,比如串、字符、整数、浮点数或者任何其它简单或者复合数据类型。映射对象可以包括在映射集与存储于数据库140中的编译代码之间建立多对多关系的数据库引用。映射对象可以映射到包括存储的映射对象的数据记录。这一存储的映射对象可以在标识符与存储于数据库140中的编译代码之间进行映射。
以通用资源定位符“http://xsevo.com/itemA/1/itemB/2/edit production”为例来说明将各种对象与命令一起使用。这一命令包括协议信息“http”和可转换成网际协议(IP)地址的串“xsevo.com”。这一命令还包括由命令解释逻辑190解释的5个对象。可以响应于可以在对象之中包括的任何预定义前缀以多种不同方式解释这些对象。
例如“itemA”可以是指定应当跟随有一个值对象的预定义前缀、指定应当跟随有值对象和第二预定义前缀的预定义前缀或者指定应当跟随有三个值对象的预定义前缀。预定义前缀可以指定值对象的数据类型。例如“itemA”可以指定第一值对象“1”将视为整数而第二值对象“itemB”将视为串。预定义前缀定义的对象视为该预定义前缀的语法短语。
如果对象“itemB”也是预定义前缀,则它可以是“itemA”的语法短语的部分或者第二独立语法短语的开头。当第二预定义前缀是第一预定义前缀定义的语法短语的部分时,存在预定义前缀之间的等级关系。第二预定义前缀和由第二对象定义的任何对象可以视为第一预定义前缀的子代和/或孙代。
在一些实施例中,预定义前缀包括数据类型标志和其它对象的混合。例如预定义前缀可以包括用于命令内的另一对象的数据类型标志并且也包括静态值、映射或者某一其它预定义前缀。在一个实施例中,预定义前缀包括第一串类型标志、整数类型标志、静态布尔和映射。
通常,命令解释逻辑190被配置成通过一次考虑一个对象并且将各对象视为任何先前考虑的预定义前缀的函数来解析命令。通常在用户如程序员接收命令之前定义预定义前缀。预定义前缀可以存储于命令解释逻辑190可访问的位置。命令解释逻辑190被配置成比较命令内的对象与这些存储的预定义前缀。
在一些实施例中,当命令内的对象未识别为预定义前缀并且不是预定义前缀表征的对象时,于是该对象视为映射。例如在上文讨论的通用资源定位符例子中,对象“edit_production”可以是向数据库140内的数据记录的映射。作为映射,“edit_production”传递给代码执行逻辑160,在该逻辑使用该对象来生成查询。然后使用数据库管理逻辑150向数据库140应用这一查询。在一些实施例中,映射在查询中直接用作搜索项。在上文讨论的例子中,映射“edit_production”可以映射到配置用于在生产模式中编辑源代码的编译代码。替代映射如“edit_development”可以映射到配置用于在开发模式中编辑源代码的编译代码。对象“itemA”、“1”、“itemB”和“2”可以用来标识将编辑的源代码、版本信息、访问要求、编辑器选项、登录信息等。
在一些实施例中,映射对象和/或预定义前缀为两大类。第一类对象被配置成使用于准确匹配比较中,而第二类对象被配置用作规则表达式。规则表达式是一种标识对象如文本串的灵活手段。例如规则表达式“edit\d”包括通配符字符“\d”并且可以用来匹配文本串“edit1”、“edit2”等。规则表达式可以使用于接收的命令行或者通用资源定位符中、存储的预定义前缀中或者数据记录中。规则表达式可以与如下准确表达式对照,该准确表达式是配置用于进行准确匹配的表达式。
规则表达式可以被配置成与整个命令行或者整个通用资源定位符比较。取而代之,规则表达式可以被配置成与命令行或者通用资源定位符的子集比较。例如规则表达式可以与在命令内的语法短语或者单个对象匹配。规则表达式可选地用来将作为命令的部分而接收的对象分离成两个参数。例如接收的对象“edit6”可以与预定义前缀“edit\d”匹配。在这一情况下可以分离和独立使用接收的对象的“edit”和“6”。具体而言,映射“edit(?P<Id>\d)”可以用来在与串“edit6”匹配时向目标代码传递参数Id=6。除了其它优点之外,这还可以允许易于引用“edit”对象映射到的编译代码的若干不同版本。
命令解释逻辑190可选地被配置用于属性在接收的命令的要素之间的继承。例如对命令的解析可以视为解析树而属性可以沿着此树(向上和/或向下)来继承。子对象中的值可以盖写母对象中设置的值或者相反。例如包括“/itemA/itemB/edit_production”的命令(其中itemA和itemB是各前缀而edit_production是映射)可以使用前缀itemA和itemB以各自设置向edit_production传递的一个或者多个参数。itemB可以盖写itemA设置的一个或者多个参数。itemB可以盖写itemA设置的参数的子集。
命令解释逻辑190可选地分布于计算系统100的若干部分之中。例如命令解释逻辑190的部分可以被包括于代码执行逻辑160中而命令解释逻辑190的部分可以被包括于代码管理逻辑180中。
图2图示了根据本发明各种实施例的如可以在数据库140中包括的数据结构200。数据结构200包括分别标注为210A、210B、...210N的多个记录210。数据结构200可以包括任何数目的记录210。各记录210包括分别标注为220A、220B、...220N的多个数据字段220。各记录210可以包括比图2中所示更多或者更少的字段220。使用由数据库管理逻辑150执行的查询可访问、读取和写入这些字段220。通常在数据库140中包括数据结构200的若干实例。各数据结构200可选地存储于不同文件中。可以在替代实施例中变化图2中所示数据字段220的顺序。
在一个示例实施例中,字段220A被配置成存储记录索引值。索引值通常是配置成标识特定数据记录的唯一标识符。索引值可选地用作标记以控制程序流程。字段220B被配置成存储计算机程序的一条可执行代码或者源代码。如这里别处讨论的那样可以在逐行基础上、在函数基础上、在功能基础上、在基于程序流程的基础上或者在用于将计算机程序划分成单独多条的一些其它基础上存储这一代码。
可选字段220C被配置成存储数据或者函数类型。这一类型可以是存储于字段220B中的代码预期的值(或者对象)的类型或者存储于字段220B中的代码返回的值(或者对象)的类型。
可选字段220D被配置成存储如下数据,存储于字段220B中的代码被配置成对该数据操作。例如数据字段220D可以包括用于由存储的代码使用的常数。
记录210可以包括在图2中由字段220N代表的广泛多种附加字段。一个或者多个字段220N可以包括如下字段,这些字段被配置成存储:配置成控制程序流程的更多标记、后续一条代码的标记(或者索引值)、存储于字段220B中的代码的版本标识符、配置信息、映射信息、调度信息、对代码的人类可读描述或者说明、用于编辑器的组织信息等。
数据库140通常存储于各自包括数据结构200的实例的一个或者多个表中。可选地使用JOIN指令等来组合这些表。例如在一些实施例中,代码存储于包括函数类型、函数名称、函数参数和默认数据的第一数据库表、包括用于函数的各实例的源代码的第二表和包括各函数实例的编译字节代码(等)的第三表中。
图3图示了计算系统100的分布式实施例。在这些实施例中,计算系统100例如划分成管理服务器305和数据库服务器310。管理服务器305包括操作系统逻辑130、代码执行逻辑160并且可选地包括代码编译逻辑170和代码管理逻辑180。数据库服务器310包括数据库140和数据库管理逻辑150。管理服务器305和数据库服务器310被配置成通过网络120的部分(例如局域网120A)来相互通信。管理服务器305可选地被配置成与数据库服务器310的多个实施例通信。这些实例中的各实例可以被配置成支持一个或者多个不同计算机程序。在一些实施例中,数据库140的一个实例视为主控数据库,而数据库140的可选地存储于单独设备上的其它实例视为从属数据库。例如主控数据库可以视为数据的最当前状态而从属数据库为主控的再现。
管理服务器305还被配置成与这里称为客户端315A、客户端315B、客户端315C等的一个或者多个客户端315通信。这一通信可以通过网络120的另一部分,例如因特网120B。在一些实施例中,管理服务器305被配置成经由因特网浏览器320如Internet Explorer或者Firefox由客户端的用户访问。这一访问可以包括执行数据库140中存储的计算机程序和/或开发和修改这些计算机程序。
图4图示了根据本发明各种实施例的执行计算机程序的方法。如这里别处所述,通过从数据库取回可执行代码并且在数据库外部的操作系统上执行这一取回的代码来执行计算机程序。可以可选地响应于从客户端315接收的通信使用计算系统100来进行这些方法。可以按照替代顺序进行图4中所示步骤。
在接收请求步骤410中,对执行计算机程序的请求由计算系统100接收。可以从另一计算设备、从管理服务器305的用户或者从客户端315之一的用户接收这一请求。在一些实施例中,该请求经由浏览器320来接收、包括通用资源定位符(URL)和/或经由HTTP来传达、经由TCP/IP来传达和/或使用POST操作来提供。除了标识计算机程序的信息之外,该请求还可选地包括比如安全信息、配置数据、版本信息、上传的文件数据、图像、视频等其它数据。
在外部查询步骤415中向数据库管理逻辑150提供查询。这一查询被配置成从数据库140内的记录210之一取回计算机程序的编译代码的子集。查询可以是预定查询或者可以响应于作为请求的部分而接收的数据来配置。
在取回代码步骤420中,在执行查询步骤415中执行的查询的执行造成从数据库140取回第一条代码。这第一条代码是计算机程序的代码的子集。如这里别处讨论的那样,取回的代码可以是单个函数、单个功能单位、在程序流程中的条件分支之间的码块、单行代码或者计算机程序的全部代码的其它划分。
如果在取回代码步骤420中取回代码失败,例如如果代码不可用,则在可选的生成代码步骤425中使用代码编译逻辑170从源代码生成编译代码。这一生成的代码然后存储于数据库140的记录210之一中。生成代码步骤425可以包括计算机程序的全部代码的所有代码或者子集。如果生成所有代码,则生成的代码的不同部分存储于不同记录210中。
在可选的存储编译代码步骤430中,使用数据库管理逻辑150在数据库140的一个或者多个记录210中存储在生成代码步骤425中生成的任何代码。然后再次尝试取回代码步骤420。这一存储可以出现于数据库140的原副本或者数据库140的高速缓存副本中。高速缓存副本可选地由代码执行逻辑160或者计算系统100的其它单元创建。
在提供代码步骤435中向操作系统逻辑130提供在取回代码步骤420中取回的可执行代码用于执行。这一执行通常并不依赖于数据库管理逻辑150。例如,如图3中所示,可选地在不同计算设备上包括操作系统逻辑130和数据库管理逻辑150。代码因此可选地执行于与数据库管理逻辑150远离的操作系统逻辑130上。
在生成查询步骤440中生成第二查询。这一查询被配置成从数据库140取回计算机程序的另外代码。第二查询可选地基于取回的第一代码的执行结果。例如执行取回的第一代码可以生成确定程序流程的值,例如后续IF或者CASE语句的对象。然后可以在第二查询中包括此值作为参数。
在用户查询步骤445中,生成的第二查询用来识别数据库140的第二记录210。这一第二记录210可以包括计算机程序的编译代码、其它可执行代码、非编译代码、数据、脚本、标记语言、图像、源代码等。
在接收代码步骤450中从第二数据库记录取回可执行代码作为第二查询的结果。这一代码由包括操作系统逻辑130的计算设备如管理服务器305接收。可选地经由网络120接收可执行代码。
在提供代码步骤455中向操作系统逻辑130提供在接收代码步骤445中接收的可执行代码用于执行。这一执行可选地独立于数据库管理逻辑150,尽管该执行可以生成以后用来使用数据库管理逻辑150来访问数据库140的结果。这样,可以重复生成查询步骤440到提供代码步骤455以取回和执行来自数据库140的多条代码。这一过程可以继续直至计算机程序终止。
图5图示了根据本发明各种实施例的创建和修改计算机程序的方法。在这些方法中取回和编译源代码。编译代码以编索引方式分成多条存储于记录210内。该方法可选地包括更多如下步骤,其中存储源代码或者其它数据、修改存储的编译代码、数据库管理逻辑150用来提供附加特征和/或通过供应数据库140的副本来提供数据库计算机程序。可以按照替代顺序进行图5中所示步骤。
在接收源代码步骤510中,计算机程序的源代码由计算系统100接收。可以从存储设备、经由网络120从另一计算设备或者从输入文本的用户接收计算机程序。接收的源代码通常包括多个函数。
在编译步骤515中使用代码编译逻辑170来编译在接收源代码步骤510中接收的源代码。这一步骤可以包括生成单块编译代码或者生成如这里别处讨论的多条编译代码。例如代码编译逻辑170可以用来将编译代码划分成可以单独存储于数据库140的记录210中的多条。例如在一些实施例中,代码编译逻辑170用来基于源代码的函数或者程序流程来产生单独多条编译代码。在编译步骤515中生成的编译代码被配置用于在操作系统逻辑130上执行并且通常在字节代码、目标代码、机器代码等中。
在存储步骤520中,在编译步骤515中生成的编译代码存储于数据库140的记录210中。各条编译代码可选地存储于单独多个记录210中。如果在编译步骤515中生成多条代码,则通常可以直接存储这些多条代码。然而如果编译步骤515获得单块编译代码,则存储步骤520包括将这一块划分成单独多条代码。这一划分可以使用代码管理逻辑180来进行并且通常包括在这里别处讨论的一个或者多个基础上划分代码。
存储步骤520可选地包括存储除了编译代码之外的更多信息。例如存储步骤520可以包括存储其它可执行代码、配置代码、将由代码操作的数据、数据类型信息或者这里讨论的任何其它信息。
在索引步骤525中对编译代码存储于其中的记录210的成员编索引。通常使用代码管理逻辑180和/或数据库管理逻辑150来进行编索引过程。编索引被配置用于标识和取回存储的编译代码并且可选地标识和取回其它信息。各条单独存储的代码通常与唯一索引或者索引集关联。因此可以使用编索引来标识各条代码。在一些实施例中,索引步骤525包括向记录210添加对于程序流程有意义的标记(或者其它标识符)。例如在索引步骤525中添加的标记可以将一条代码标识为在条件语句之后的程序流程目的地。
在可选的存储源代码步骤530中存储在接收源代码步骤510中接收的源代码。源代码可选地与编译代码一起分成多条存储于数据库140中或者分成多条存储于结构与数据库140的结构类似的单独数据库中,例如其中字段220用来存储源代码而不是编译代码。取而代之,存储源代码步骤530可以包括在常规文本文件中存储源代码。
在可选的存储配置数据步骤535中,配置数据存储于数据库140中。这一配置数据被配置用于向用户提供接收的源代码代表的计算机程序的替代配置。例如在一些实施例中,多个配置数据集存储于数据库140中(各集合在不同数据记录中)。使用数据库管理逻辑150来执行的查询然后可以用来取回用户希望的或者适合于具体硬件目标的配置等。
在可选的修改步骤540中修改记录210内的编译代码。这一修改过程可以包括更改存储的源代码或者接收新的源代码、编译更改或者新的源代码并且用新的编译源代码替换一个或者多个记录210中存储的编译代码。修改步骤540可以使用代码管理逻辑180来进行以修改源代码、使用代码编译逻辑170来进行以编译源代码并且使用数据库管理逻辑150来进行以在一个或者多个记录210中存储新的编译代码。
可选地一次对一条编译代码进行修改步骤540。例如可以对存储于记录210中的仅一个记录或者子集中的编译代码进行修改。无需必然重新编译相同计算机程序的其它编译代码。这样,修改和重新编译可以限于基于函数、功能、程序流程等与其它代码分离的单条代码。在一些实施例中,代码编译逻辑170被配置成在生产模式和开发模式中操作。在修改代码之后相对于开发模式在生产模式中重新编译更大量编译代码。
在可选的版本管理步骤545中使用数据库管理逻辑150的登记能力来进行对存储的编译代码和计算机程序的其它部分的版本控制。例如在一些实施例中,数据库管理逻辑150包括配置成登记数据库140的改变的登记特征。这一特征可以用来跟踪计算机程序的改变。类似的,数据库管理逻辑150可以具有配置成将数据库返回至先前状态的退回特征。这一特征可以用来恢复先前代码版本。在一些实施例中,数据库管理逻辑150被配置成保持数据库140或者个体记录210的多个副本并且使用版本信息来跟踪这些副本。
在可选的控制访问步骤550中,数据库管理逻辑150的访问控制特征用来控制对计算机程序或者其特征的访问。例如数据库管理逻辑150可以被配置成控制对数据库140内的特定记录210或者其集合的访问(或者控制对整个数据库140的访问)。这一访问控制可以用来防止用户访问与计算程序的具体功能、具体数据、图像或者任何其它方面关联的多条编译代码。
在可选的提供步骤555中,通过向计算设备提供数据库140的副本来向该计算设备提供计算机程序。可以通过网络120进行这一提供。该步骤利用如下事实:在一些实施例中,数据库140可移植。
图6图示了根据本发明各种实施例的使用图1的计算系统来解释命令的方法。解释的命令可以包括命令行或者通用资源定位符。尽管参照编译代码来讨论图6中所示步骤,但是也可以结合其它种类的可执行代码和/或数据来进行它们。
在可选的定义步骤610中预定义前缀。这一预定义可以例如使用代码管理逻辑180、数据库管理逻辑150或者编辑器由程序员或者系统管理员进行。预定义通常包括表征对象的一个或者多个数据类型和标识预定义前缀的标记的规范。例如预定义前缀可以包括“成员;串;整数;前缀”。这一预定义前缀包括如下标记“成员”,该标记被配置成标识预定义前缀并且在标记出现于命令中时匹配这一标记于预定义前缀。这一预定义前缀还包括如下数据类型“串”和“整数”,这些数据类型在一些实施例中被配置成表明接下来两个对象应当分别视为串和整数。这一预定义前缀还包括类型“前缀”。这一类型可选地用来表明对象应当视为子代预定义前缀。在各种实施例中,预定义前缀可以包括广泛多种替代语法、类型等。
在各种实施例中,前缀可以包括以下各项中的一项或者多项:a)用于前缀的唯一标识符,例如整数;b)用来匹配前缀的串;c)父代前缀的标识符,例如整数或者指针;d)如下串,该串标识有望在命令内的可能对象(例如值)和用于赋值的变量;e)如下串,该串标识将向可执行代码传递的静态值和可执行代码的用于赋这些值的变量;f)使能/禁止标记;g)前缀的人类可读名称;h)指向外部数据库的键;i)样式标识符;配置成对前缀属于的一个或者多个应用进行标识的应用标识符;j)配置参数;k)与前缀在其上可用的和/或可以使用的网站有关的信息(例如网际协议地址);以及l)前缀的人类可读描述。预定义前缀存储于命令解释逻辑190可访问的位置,可选地在数据库140中。
在可选的提供步骤615中通过向计算设备如数据库服务器130传送数据库140和预定义前缀集来在计算设备上提供计算机程序。
在接收步骤620中,命令由计算系统100接收。这一命令包括诸如预定义前缀、值、映射等多个对象。通常,该命令包括命令行或者通用资源定位符等。在一些实施例中,经由浏览器和/或网络如网络120B接收命令。
在解析步骤625中使用命令解释逻辑190来解析在接收步骤620中接收的命令。如这里别处讨论的那样,这一解析可以包括识别在接收的命令内的预定义前缀、映射、值和/或其它对象。解析步骤625包括基于在解析步骤625中识别的一个或者多个对象使用代码执行逻辑160来生成一个或者多个查询。在一些实施例中,在查询之一中包括在接收的命令内识别的映射作为搜索项。
在取回步骤630中使用在解析步骤625中生成的一个或者多个查询从数据库140的数据记录210取回编译代码。通常使用数据库管理逻辑150来进行这一取回。例如在一些实施例中使用在解析步骤625中生成的查询从数据记录210的不同成员取回计算机程序的编译代码的不同部分。可以响应于从用户接收初始请求或者可以在接收该请求之前进行解析步骤625和/或取回步骤630。如果在接收请求之前进行,则在接收请求时高速缓存编译代码用于执行。
在执行步骤635中例如使用操作系统逻辑130来执行在取回步骤630中取回的编译代码。这一执行通常在数据库管理逻辑150外部。例如该执行可以包括从数据库管理逻辑150向操作系统逻辑130传递编译代码,该代码在该操作系统逻辑执行于计算设备110上。
图7图示了根据本发明各种实施例的解析接收的命令的方法。通常使用命令解释逻辑来进行这一过程。
在读取对象步骤710中读取在接收的命令内的第一对象。在各种实施例中从右到左或者从左到右读取命令。在命令内的对象可以由“/”、“\”、“.”、“;”或者其它适当字符分离。
在识别步骤715中将读取对象步骤719中读取的对象识别为值、预定义前缀和/或映射。通过比较读取的对象与存储于计算系统100中的预定义前缀集来识别预定义前缀。这一存储通常在接收命令之前。在一些实施例中,读取的对象如果未标识为值对象或者预定义前缀则默认标识为映射。如果已经标识预定义前缀(例如在识别步骤715的在先进行中),则识别步骤715可以响应于这一预定义前缀。例如,如果预定义前缀将下一对象表征为值对象并且读取的对象是下一对象,则将该对象识别为值对象。
在可选的校验语法步骤720中校验读取的对象的语法。例如,如果对象识别为字符或者浮点值,则校验该对象具有分别符合这些类型的语法。可选地在图7中所示方法期间的其它时间进行校验语法步骤720。可以在个体基础上向接收的命令内的对象或者语法短语应用校验语法步骤720。这样可以在从命令读取另外对象之后重复校验语法步骤720。
在读取下一对象步骤725中读取在接收的命令内的下一对象。通常,这下一对象将是与命令中的先前读取的对象相邻的对象。
在处理下一对象步骤730中使用命令解释逻辑190来处理在读取下一对象步骤725中读取的对象。这一处理包括识别对象并且可以依赖于先前读取的预定前缀。例如,如果在识别对象步骤715中识别的对象是将下一对象表征为字符的预定义前缀,则在处理下一对象步骤730中将读取下一对象步骤725中读取的对象自动识别为字符。通常重复读取下一对象步骤725和处理下一对象步骤730直至处理整个接收的命令。
在可选的使用映射步骤735中向代码执行逻辑160传递在识别步骤715或者处理下一对象步骤730中识别的映射对象用于在生成数据库查询时使用。如这里别处讨论的那样,这一映射可以用来从数据库140内选择可执行代码,比如编译代码。可以与在命令中识别的其它对象组合向代码执行逻辑160传递映射对象。例如映射对象可以与文本串、整数或者一些其它类型的对象组合,并且该组合可以由代码执行逻辑160用来生成数据库查询。使用映射步骤735可以出现于图7所示方法内的其它时间。例如可以一旦识别映射对象就进行使用映射步骤735,然后在识别第二映射对象时重复该步骤。在使用映射步骤735中可以执行映射对象标识的编译代码或者可以作为参数传递给另一条编译代码。
图8图示了根据本发明各种实施例的存储计算代码的多个实例的方法。在这一方法中,计算机程序的部分存储于数据库14的单独记录中,修改这些部分中的一个或者多个部分以创建部分的修改实例,代码管理逻辑170然后用来在执行和/或提供计算机程序时在修改的实例或者原实例之间选择。
在接收代码步骤810中,计算代码由计算系统100接收。接收的代码可以包括源代码、可执行代码、配置数据和/或其它信息。在一些实施例中,可以例如经由网络120以单个文件接收代码。可选择地,可以例如在代码由用户键入时用逐条方式接收它。在一些实施例中经由在浏览器中呈现的编辑界面接收代码。接收代码步骤810可以随时间出现。
在划分代码步骤820中将接收代码步骤810中接收的代码划分成单独部分用于存储于记录210中,各部分存储于记录210的不同成员中。这一步骤可以包括解析代码以确定划分点。如这里别处讨论的那样,可以使用多种途径来划分代码,这些途径包括但不局限于按照函数(过程)、按照类定义、按照语句等级、按行、按照程序流程分支等来划分代码。例如在一些实施例中,计算机程序的各函数存储于记录210的单独成员中。在一些实施例中,在函数内的最高语句等级用来划分接收的代码的部分。例如使用WHILE语句、CASE语句或者IF语句可以创建等级结构,其中在这些语句之一内的子语句处于较低等级级别。可以按照包括WHILE、CASE和IF语句的等级级别来划分接收的代码。
在一些实施例中,在划分代码步骤820中的代码划分在用户的控制之下。例如用户可以通过编辑器或者类似界面来指定将如何划分代码。用户在源代码内放置这些记号可以有助于这一指定。代码管理逻辑180可选地被配置成使用这些记号以识别可以划分源代码的位置。另外,代码编译逻辑170可选地被配置成在编译源代码之时使用这些记号以划分所得编译代码。记号可选地放置于如下文本内,该文本在源代码的变成语言内原本将解释为注释。
在一些实施例中,根据如何接收代码来划分接收的代码。例如,如果以逐条方式接收代码作为部分,则可以根据这些部分来划分它。
可以使用相同划分来存储源代码和从源代码生成的编译代码或者可以不这样做。例如可以划分源代码并且可以在与源代码相同的点划分编译代码。取而代之,可以不划分源代码,例如它可以存储为单个文件,并且可以划分编译源代码而生成的编译代码。最后在一些实施例中划分源代码、但是不同地划分编译代码。这可以例如出现于该划分依赖于在编译过程期间确定的程序流程时。
在存储代码步骤830中,在接收代码步骤810中接收并且在划分代码步骤820中划分的代码存储于数据库140内。代码的各划分部分存储于记录210的单独成员中。通常该存储使用数据库管理逻辑150来实现并且可以通过网络120进行。可选地进行接收代码步骤810、划分代码步骤820和存储代码步骤830多次以处理计算机程序的多个部分。
在修改代码步骤840中,产生存储代码步骤830中存储的代码的一个或者多个部分的修改实例。这一修改可以包括编辑源代码、重新编译或者替换编译代码等。例如在一些实施例中使用查询从数据库140取回存储代码步骤830中存储的源代码。源代码然后可选地经由浏览器界面由用户编辑。在一些实施例中,修改代码步骤840包括修改编译代码。例如可以修改、然后重新编译源代码以生成修改的编译代码。可以用不同方式(例如用不同编译器设置)编译相同源代码以生成修改的编译代码。
在可选的编译代码步骤850中使用代码编译逻辑170来编译修改代码步骤840中修改的源代码。编译代码步骤850在修改的代码已经为编译形式时或者在无需代码的编译形式时是不必要的。在存储修改的代码步骤860中,在修改代码步骤840中产生并且可选地在编译代码步骤850中编译的修改代码存储于一个或者多个记录210中。修改的代码可选地存储为原代码的单独实例。存储修改的代码步骤860可以包括在记录210的字段中设置值以区别代码的不同实例。通常使用数据库管理逻辑150来进行该存储。
在选择实例步骤870中进行在代码的不同实例(例如原实例和在修改代码步骤840中产生的实例)之中的选择。这一选择可以响应于对访问和/或执行代码的请求进行。可选地,使用数据库查询和数据库管理逻辑150来进行该选择。可选地使用操作系统逻辑130来执行那个所选实例。
这里具体图示和/或描述了若干实施例。然而将清楚修改和变化为上述教导所覆盖并且在所附权利要求的范围内而不脱离其精神实质和既定范围。例如这里讨论的各种逻辑可以包括硬件、固件和/或存储于计算机可读介质上的软件。计算机程序的不同部分可选地存储于数据库140的不同表内。例如当计算机程序包括多个源文件和/或目标文件时,这些文件中的各文件可以存储于单独的表中。这里讨论的编译代码可选地被配置用于在浏览器内执行。这里讨论的各种实施例可以应用于Web或者非Web应用。这里讨论的编译代码可以执行于虚拟机上。类似地,计算系统100的各种部件可以包括虚拟机。在接收的命令内的对象可以用来从数据库140取回除了编译代码之外的诸如样式表、静态数据等信息。这里讨论的术语预定义前缀可以代之以是后缀。本发明的各种实施例包括配置成指定映射对象、前缀等的图形用户界面。例如图形用户界面可以用于根据给定映射来选择将执行的目标代码。
这里讨论的实施例举例说明本发明。由于参照图示描述了本发明的这些实施例,对描述的方法和/或具体结构的各种修改或者适应变得为本领域技术人员所清楚。依赖于本发明的教导并且使这些教导已经对本领域有所发展的所有这样的修改、适应或者变化视为在本发明的精神实质和范围内。因此这些描述和附图不应在限制意义上加以考虑,因为理解本发明决不仅限于所示实施例。