技术领域
[0002] 本公开涉及源代码控制系统领域,尤其涉及源代码的协同编辑。
相关背景技术
[0003] 源代码是设计用于执行一组协调的功能、任务或活动的程序指令。源代码可由用户(例如,开发者)编辑。一个或多个用户可以协同编辑源代码。
具体实施方式
[0013] 源代码是用户可以阅读和改变的编程语言编写的程序指令的文本版本。大型程序可能包括许多一起工作的源代码(例如,源代码文件)。源代码可以通过将代码翻译(例如,编译、解释)为计算机更快和更容易阅读的语言(例如,汇编语言、机器语言)来准备执行。源代码可由多个用户编辑。当多个用户提供对源代码的改变时,改变将被同步并解决冲突。同步改变和合并冲突会增加处理器开销、所需带宽和能耗。
[0014] 在一些系统中,多个开发者可以独立地编辑或修改源代码。开发者可以下载一段源代码并在该段源代码上工作。另一个开发者可以下载相同的源代码并处理相同的源代码。两个开发者可能都不知道另一个开发者对源代码所做的改变。当开发者尝试将源代码的改变与源代码的生产版本合并时,改变可能与其他开发者先前与源代码的生产版本合并的源代码的其他改变冲突。例如,第一用户(例如,第一开发者)可以删除源代码的行1‑10,而第二用户(例如,第二开发者)可以对源代码的行5‑8进行编辑(例如,添加文本而不删除)。系统无法删除行1‑10并编辑行5‑8,因此改变冲突且无法合并。
[0015] 在一些系统中,多个用户的改变可能不兼容。例如,第一用户对源代码的行1‑10进行第一改变,而第二用户对源代码的行11‑20进行第二改变。第一改变和第二改变可能彼此不兼容。响应于系统合并第一和第二改变,源代码可能无法正常运行。
[0016] 在一些系统中,第一用户可能正在对源代码进行实质性改变(例如,进行将影响源代码的实质部分的改变),因此在第一用户进行实质改变时其他用户所做的改变在将实质性编辑合并到源代码中后,可能需要改变或修改。响应于系统合并实质改变和其他用户的其他改变,源代码可能无法正确执行,直到其他用户进行附加改变。
[0017] 本公开的方面通过为源代码控制系统提供协同编辑环境来解决上述和其他挑战。在一些实施例中,协同编辑环境可以允许多个用户实时编辑和修改源代码。在一些实施例中,协同编辑环境可以允许用户指定其他用户如何查看他们对源代码的相应改变,其他用户如何编辑他们的相应改变,以及是否可以使用对源代码的相应改变以便由源代码控制系统的其他用户编译或解释。
[0018] 在一些实施例中,基于云的环境可以包括服务器设备和存储源代码的提交版本的存储库。客户端设备可以经由网络可通信地耦合到基于云的环境。服务器设备可以向每个客户端设备传输源代码的提交版本的对应副本。与第一用户相关联的第一客户端设备可以接收改变的用户输入并且可以创建与第一用户相关联的第一改变记录。改变记录可以包括执行改变的用户或客户端设备的指示和改变的指示(例如,添加的文本、移除的文本、添加的行、移除的行等)。服务器设备可以从第一客户端设备接收改变并且可以创建与第一用户相关联的第二改变记录。第二改变记录可以存储在存储库中。服务器设备可以从第一客户端设备接收指定改变的访问权限(例如,查看、编辑等)的所选呈现类型或指定改变的执行权限(例如,传播、解释、编译)的所选发布类型。服务器设备可以根据选择的呈现类型向其他客户端设备传输改变和用于实时呈现改变的指令,以及根据选择的发布类型指定执行权限的指令。
[0019] 在一些实施例中,服务器设备可以从第一客户端设备接收识别第一改变记录中的改变的至少一个子集的提交请求。服务器设备可以提交所识别的改变以生成源代码的新提交版本,并且可以将新提交版本的对应副本传输到每个客户端设备以用于源代码的实时协同编辑。
[0020] 通过为源代码控制系统提供协同编辑环境,可以减少或避免源代码冲突。例如,合并冲突可以减少或消除(例如,用户可能不会响应于看到另一个用户正在编辑行1‑10而将文本添加到行5‑8),改变可能是兼容的(例如,第二用户可以改变行11‑20,其与第一用户对行1‑10的改变兼容),并且用户可以等到其他人完成实质性改变后再进行进一步改变。通过减少或消除源代码冲突使源代码控制系统更有效并减少源控制系统的计算资源(例如,计算机处理资源)、所需带宽和功耗。
[0021] 如上所述,本公开的各方面解决的技术问题是通过同步改变和合并或解决冲突消耗的大量网络带宽、计算资源和能量。如果冲突数量减少,则相关资源也减少。
[0022] 还注意到,本公开的各方面解决的另一个技术问题是缺乏已被多个用户编辑的源代码的适当功能。例如,一个用户的改变可能与另一用户的改变不兼容。更新源代码以使不同用户的改变相互兼容会浪费计算资源、网络带宽和功率。
[0023] 对上述识别的技术问题的技术解决方案可以包括为源代码控制系统提供协同编辑环境。源代码控制系统可以向每个客户端设备传输源代码的提交版本的相应副本,从第一客户端设备接收改变和呈现类型的选择,根据所选的呈现类型传输改变和用于实时呈现改变的指令到其他客户端设备,并将改变存储在与第一客户端设备相关联的改变记录中。该技术方案还可以包括从第一客户端设备的改变记录中接收识别至少一些源代码改变的提交请求,提交所识别的改变以生成源代码的新提交版本,并向每个客户端设备传输源代码的新提交版本的相应副本。
[0024] 因此,技术效果可以包括减少用于协同编辑源代码的总体带宽使用和计算资源使用。此外,本公开还可以减少生成功能性的、协同编辑的源代码所花费的总时间。还有降低功耗的进一步效果。进一步的技术效果可能包括改进源代码控制系统的功能。改进此类源代码的功能可能再次有助于更有效地使用带宽和计算机处理资源。
[0025] 图1A‑1B是根据本公开的实现的系统架构100的示例。系统架构100包括经由网络130连接到客户端设备110A‑110Z(在此一般称为“客户端设备110”)的基于云的环境101。虽然系统架构100是在基于云的环境101的上下文中描述的(其可以针对源代码的实时协同编辑(例如,在源控制平台120上)实现基于云的环境101中的源控制平台120以及在网络130上的客户端设备110A‑110Z之间的通信),可以理解,这里描述的实现也可以适用于本地互连的系统。在实现中,基于云的环境101是指托管应用(例如,源控制模块118、云游戏121A‑Z等)的物理机器的集合,这些应用经由网络130向多个客户端设备110A‑110Z提供一个或多个服务(例如,源代码的实时协同编辑、游戏的编辑、游戏的执行、游戏的协同等)。基于云的环境101的物理机器(例如,源控制平台120)可以是地理地分布的以减轻延迟问题并使位于不同地理位置的开发者的共同编辑成为可能。
[0026] 网络130可以是公共网络(例如,因特网)、专用网络(例如,局域网(LAN)或广域网(WAN))或其组合。网络130可包括无线基础设施,其可由一个或多个无线通信系统提供,例如与网络130连接的无线保真(Wi‑Fi)热点或可使用各种数据处理设备、通信塔等实现的无线载波系统。另外或替代地,网络130可以包括有线基础设施(例如,以太网)。
[0027] 基于云的环境101可以包括源控制平台120或存储库114(例如,数据存储)。源控制平台120可以与存储库114分离并且通信地耦合到存储库114。在一些实现中,存储库114可以是源控制平台120的一部分。
[0028] 在实现中,存储库114可以存储源代码140的提交版本107、改变116或改变记录119。存储库114的内容可以在随后的图中进一步描述。
[0029] 在实现中,存储库114可以存储源代码140的提交版本107,其可以包括内容(例如,函数、语句、文本等)。在一个实现中,源代码140的提交版本107可以是任何合适的源代码,包括由客户端设备110A‑110Z或从基于云的环境101之内或之外的服务器上传到基于云的环境101的内容。在一个实现中,源代码140的提交版本107的副本109可以被传输给用户以供用户进行实时协同编辑。在实现中,术语“源代码的实时协同编辑”可以指用户修改(例如,添加、删除、改变等)源代码140的提交版本107的其副本109中的内容(例如,文本、函数、语句、数据等),同时访问其他用户对源代码140的提交版本107的一个或多个副本109做出的改变116,同时准备执行(例如,翻译、解释、编译等)其他用户对源代码140的提交版本107的一个或多个副本109做出的改变116,同时执行其他用户做出的一个或多个改变116等。
[0030] 在实现中,其他用户对源代码140的提交版本107的副本109的改变116可以被客户端设备110A‑Z实时访问、准备执行或执行。在实现中,实时可以指当在不同客户端设备上进行改变时,向一个或多个客户端设备110传输、呈现或显示对源代码140的提交版本107的副本109的改变。例如,对源代码140的提交版本107的副本109A的实时改变116A(例如,编辑)可以与用户使用客户端设备110A编辑(例如,进行改变116A)源代码140的提交版本107的副本109A基本同时(至少在实现限制或显示实时改变的技术限制内)显示在客户端设备110B的显示器上(例如,应用于提交版本107的副本109B)。例如,用户对源代码140的提交版本107的副本109的编辑可以在用户输入的毫秒内显示并且可以向接收用户显示好像是绝对实时的。在另一示例中,客户端设备110A处的改变可以作为周期性地(例如,每秒等)发送的一批改变来发送。用户对源代码140的提交版本107的副本109的编辑可以在用户输入的几秒钟内显示并且可以在接收用户看来好像是实时的。
[0031] 在实现中,源代码140的提交版本107可以是可协同编辑的云游戏121的源代码、应用的源代码或任何合适的源代码(例如,包括诸如文本、函数、语句、软件编程代码、列表等的内容的源代码)。
[0032] 源代码140的提交版本107可以由作者创建并且作者可以将源代码140的提交版本107存储在存储库114中以供用户(例如,合作者)进行协同编辑。将源代码140的提交版本
107存储在存储库114中以供用户协同编辑可以指授予其他用户访问(查看和/或编辑)、准备执行(例如,编译和/或解释)、或者执行源代码140的提交版本107的副本109以及副本109的改变116的许可。将源代码140的提交版本107存储到存储库114中以供用户协同编辑可以包括经由包括到源代码140的提交版本107的链接的消息(例如,电子邮件、文本消息等)将源代码140的提交版本107通知其他用户。授予每个用户的许可级别可以基于每个特定用户的用户类型。例如,具有编辑器用户类型的用户可能能够接收源代码140的提交版本107的副本109,直接对源代码140的提交版本107的副本109进行改变116,并且至少提交对源代码
140的提交版本107的改变116的一部分。因此,许多合作者可以对源代码140的提交版本107中呈现的内容进行改变。
[0033] 在实现中,基于云的环境101可以包括源控制平台120。在一些实现中,源控制平台120可以包括一个或多个处理设备,例如计算机、微处理器、逻辑设备或其他设备或处理器,其配置有硬件、固件或软件以执行此处描述的一些操作。源控制平台120可以包括源控制模块118。源控制模块118可以托管可以协同编辑的源代码140。例如,源控制模块118可以托管可以协同编辑的云游戏121A‑Z的源代码140。源控制模块118可以确定可以编辑哪些源代码、哪些用户可以编辑源代码、可以对源代码进行什么类型的编辑等。在一些实现中,源代码140包括源代码文件。
[0034] 源控制平台120可以托管在一个或多个应用(例如,云游戏121)中使用的云资产(例如,源代码140)。在一些实现中,源控制模块118可以管理用于协同编辑一个或多个应用的许可。在一些实现中,源控制模块118可以管理用于协同编辑单个资产的许可。
[0035] 源控制平台120可以是物理机器(例如,服务器机器、台式计算机等),每个物理机器包括通信地耦合到存储器设备和输入/输出(I/O)设备的一个或多个处理设备。处理设备可以包括计算机、微处理器、逻辑设备或其他设备或处理器,其配置有硬件、固件和软件以执行本文描述的一些实现。源控制平台120可以托管源控制模块132。源控制模块132可以实现为可由源控制平台120上的一个或多个处理设备执行的计算机指令。源控制模块132可以执行关于以下附图描述的操作。
[0036] 在实现中,源控制平台120可以向客户端设备110A‑110Z提供协同编辑环境122A‑122Z(这里一般称为“协同编辑环境122”)。源控制平台120可以包括一个或多个服务器,并且选择(从源控制平台120的一个或多个服务器)以提供协同编辑环境122A‑122Z的服务器可以基于某些负载平衡技术、服务水平协议、绩效指标等。协同编辑环境122A‑122Z可以提供显示源代码140的提交版本107的副本109的用户界面124A‑124Z。协同编辑环境122A‑
122Z可以使使用不同客户端设备110A‑110Z的用户能够在相应的用户界面124A‑124Z中同时访问源代码140的提交版本107的相应副本109,以访问、审查、编辑、查看、做出改变116、准备执行(例如,编译、解释)和/或执行源代码140的提交版本107的相应副本109。
[0037] 在实现中,用户界面124A‑124Z可以是由网络浏览器呈现并显示在客户端设备110A‑110Z上的网络浏览器窗口中的网页。在另一个实现中,用户界面124A‑124Z可以被包括在下载到客户端设备110A‑110Z并且本地运行在客户端设备110A‑110Z上的独立应用中(在此也称为“本地应用”或“本地客户端应用”)。
[0038] 客户端设备110A‑110Z可以包括通信地耦合到存储器设备和I/O设备的一个或多个处理设备。客户端设备110A‑110Z可以是台式计算机、膝上型计算机、平板计算机、移动电话(例如,智能电话)或任何合适的计算设备。客户端设备110A‑110Z可以包括组件,例如输入设备和输出设备。源控制平台120可以使用由用户经由用户界面124A‑124Z提供的用户名和密码(或其他识别信息)来认证用户,使得相同的客户端设备110A‑110Z可以由不同用户在不同时间使用。
[0039] 如上所述,客户端设备110A‑110Z可以各自包括web浏览器或本地客户端应用。被邀请并成为源代码140的提交版本107的合作者的用户可以经由web浏览器或本地客户端应用请求访问源代码140的提交版本107的对应副本109。例如,用户可以从由基于云的环境101提供并由web浏览器或本地客户端应用呈现的用户界面124中选择源代码140的提交版本107。这样,与用户相关联的客户端设备110可以从基于云的环境101请求源代码140的提交版本107的副本109。协同编辑环境122A‑122Z可以使用户能够查看和/或管理在相应的用户界面124A‑124Z内与用户相关联的源代码140的提交版本107的对应副本109。
[0040] 协同编辑环境122A‑122Z还可以使使用不同客户端设备110A‑110Z的用户能够在呈现源代码140的提交版本107的副本109的相应用户界面124A‑124Z中同时访问源代码140的提交版本107的对应副本109以访问、编辑(例如,进行改变116)、准备执行(例如,解释、编译等),或执行源代码140的提交版本107的对应副本109。
[0041] 在一些实现中,源控制模块118A‑118Z可以是客户端设备110A‑110Z的一部分。例如,在一些实现中,客户端设备110A‑110Z可以具有本地安装的应用,该应用包括用于与用户相关联的源代码140的实时协同编辑的源控制模块118A‑118Z。在一些实现中,源代码140的提交版本107、改变116或改变记录119中的一个或多个可以存储在客户端设备110A‑110Z本地。在一些实现中,客户端设备110A‑110Z可以完全执行源控制模块118A‑118Z以实时协同编辑电子文档,例如源代码140的提交版本107。可以注意到,客户端设备110A‑110Z的源控制模块118A‑118Z可以与源控制平台120的源控制模块132相同或相似。
[0042] 在一些实现中,基于云的环境101可以完全执行源控制模块132以用于源代码140的协同编辑。在其他实现中,源控制模块132和118A‑118Z的操作可以在源控制平台120和客户端设备110A‑110Z之中划分。
[0043] 在一些实现中,客户端设备110A‑110Z的源控制模块118A‑118Z可以应用于本地存储在客户端设备上的源代码140,例如通过使用在用户计算机上运行的应用来执行和操纵的源代码。
[0044] 一个或多个客户端设备110A‑Z可以经由对应的用户界面124接收改变116。改变116可以是一系列操作。改变116的原子元素可以是由客户端设备110应用于提交版本107的副本109的连续操作序列。在一些实现中,改变116可以形成改变列表。客户端设备110的源控制模块118可以周期性地向基于云的环境101(例如,源控制平台120)传输改变116。由于基于云的环境101从客户端设备110A连续地接收改变116A,基于云的环境101可以连续地将改变116A传输到其他客户端设备110B‑Z。客户端设备110B‑Z中的每一个可以经由操作变换将改变116A应用(例如,传播)到源代码140的提交版本107的对应副本109(例如,客户端设备110处的源控制模块118可以具有操作转换逻辑)。在接收到提交请求时,基于云的环境
101(例如,源控制模块132)可以经由操作转换在存储库114处将改变116A应用(例如,提交)到源代码140的提交版本107(例如,源控制模块132可以具有操作转换逻辑)。
[0045] 在此处讨论的系统收集关于用户的个人信息或可以使用个人信息的情况下,可以向用户提供控制基于云的环境101是否收集用户信息的机会。此外,某些数据在存储或使用之前可能会以一种或多种方式进行处理,以便删除个人身份信息。例如,用户的身份可能会被处理,以便无法确定用户的个人身份信息,或者用户的地理位置可以概括为获取位置信息的位置(例如城市、邮政编码或州级),从而无法确定用户的特定位置。因此,用户可以控制如何收集关于用户的信息并由基于云的环境101使用。
[0046] 图1B示出了根据本公开的实现的改变记录119的示例。客户端设备110A的协同编辑环境122A(例如,源控制模块118A)可以从基于云的环境101(例如,从源控制模块132等)接收源代码140的提交版本107的副本109A。客户端设备110A的协同编辑环境122A(例如,源控制模块118A)可以使副本109A的至少一部分经由用户界面124A显示。协同编辑环境122A(例如,源控制模块118A)可以经由用户界面124A接收对提交版本107的副本109A的源代码140的局部的改变116A。协同编辑环境122A(例如,源控制模块118A)可以生成改变记录119以存储改变116A。协同编辑环境122A(例如,源控制模块118A)可以将改变116A传输到基于云的环境101以存储在存储库114中并且基于云的环境101(例如,源控制模块132)可以将改变116A存储在与存储库114中的客户端设备110A相关联的改变记录119A中。
[0047] 改变记录119可以包括源代码140的提交版本107的对应副本109的指示(例如,与改变116相对应的用户或客户端设备110的指示)、改变的指示116(例如,添加的文本、移除的文本、添加的行(回车)、移除的行等)等中的一个或多个。例如,图1B的改变记录119A可以包括源代码140的提交版本107的副本109A的指示(例如,指示改变记录119A对应于客户端设备110A处的源代码140的提交版本107的副本109A)。改变记录119A可以包括“行10:添加文本‘abc’”的指示(例如,将特定文本添加到副本109A中的特定行)。改变记录119A可以包括“行15:移除文本‘def’”的指示(例如,从副本109A中的特定行中移除特定文本)。改变记录119A可以包括“在行17和18之间:添加带有文本‘ghi’的新行”的指示(例如,在副本109A中的两个现有行之间执行回车并将特定文本添加到新行)。
[0048] 响应于经由用户界面124A接收到改变116A,改变记录119A可以由客户端设备110A生成。改变记录119A可由基于云的环境101(例如,源控制模块132)基于从客户端设备110A接收并存储在存储库114中的改变116A生成。
[0049] 在实现中,特定的改变记录119A与特定用户相关联。随着用户继续修改源代码的特定局部,改变记录119A的数据可以增加。特定用户可以具有一个或多个相关的改变记录。例如,特定用户可以具有用户编辑的源代码的每个部分(例如,每个功能)的改变记录。在另一个示例中,可以为用户维护单个改变记录。
[0050] 图2A‑2D示出了根据本公开的实现的源代码140的协同编辑的示例。在一些实现中,图2A‑2D示出了根据本公开的实现的显示源代码140的提交版本107的副本109B的一部分的用户界面200。在图2A‑2D中使用了图1A‑1B的元素以帮助示出本公开的方面。出于说明而非限制的目的,用户界面200被示为客户端设备110B的用户界面124B,其显示源代码140的提交版本107的副本109B。
[0051] 如图所示,协同编辑环境122由源控制平台120提供并且经由用户界面124显示。基于云的环境101可以将源代码140的提交版本107的副本109A传输到客户端设备110A、将源代码140的提交版本107的副本109B传输到客户端设备110B等。源代码140的提交版本107的副本109可以经由由协同编辑环境122在浏览器窗口中提供的应用(例如,源控制模块118)来显示。可以注意到,在其他实现中,协同编辑环境122可以显示在客户端设备110处的本地应用的用户界面124中,而不使用浏览器。
[0052] 客户端设备110A可以响应于用户经由客户端设备110A对源代码140的提交版本107的副本109A做出改变116A(例如,键入文本)来接收用户输入。客户端设备110A上的源控制模块118A可以生成改变记录119A以存储改变116A。客户端设备110A可以将改变116A传输到基于云的环境101以传输到其他客户端设备110以用于源控制平台120上的源代码140的实时协同编辑。图2A‑2D的用户界面200对应于响应于客户端设备110A对副本109A做出改变
116A以帮助描述本公开的特征的客户端设备110B的用户界面(例如,用户界面124B)。源代码140的提交版本107和改变116的每个副本109包含文本。文本可以指源代码140的提交版本107的副本109或改变116的任何内容,并且可以包括字母字符、数字字符、字母数字字符、单词、标点符号、空格、回车(也称为“回车”)、符号或由美国信息交换标准代码(ASCII)代码表示的任何字符等。
[0053] 如图2A‑2D所示,不同客户端设备110上的源代码140的提交版本的副本109的至少一部分可以包括:
[0054] function test(param1)
[0055] param1=param1+3
[0056] end
[0057] 客户端设备110A可以接收对源代码140的提交版本107的副本109A的改变116A的用户输入。对源代码140的局部的改变116A可以是将“,param2”添加到“param1”之后的源代码140局部的第一行,执行回车以在源代码140局部的第二行和第三行之间添加新行,并添加文本“param2=param1*6”到新行,如下:
[0058] function test(param1,param2)
[0059] param1=param1+3
[0060] param2=param1*6
[0061] end
[0062] 客户端设备110A还接收呈现类型的选择的用户输入,其指定对经由客户端设备110A进行的改变116A的访问权限。在一些实现中,呈现类型可以指定改变116A在其他用户的设备上显示的方式或者改变116A(或包括改变116A的部分代码)是否可以被其他用户修改或编辑。在一些实现中,指定的呈现类型影响其他用户对改变116A的查看。
[0063] 在一些实现中,客户端设备110A还接收指示发布类型的用户输入,其指定经由客户端设备110A做出的改变116A的执行权限。在一些实现中,发布类型确定改变116A是否传播到提交版本的另一个用户的本地副本。如果改变被传播到提交版本的另一个用户的本地副本,则提交版本的本地副本包括改变116A,并且具有改变116A的提交版本可以被其他用户编译或解释(例如,准备执行)。如果改变未传播到其他用户的本地副本(根据所选发布类型),则提交版本的其他用户的本地副本不包括改变116A,并且其他用户无法编译或解释具有改变116A的提交版本。其他用户仍然可以使用自己的改变编译或解释其本地副本。可以注意到,即使其他用户无法编译或解释具有改变116A的提交版本的本地副本,其他用户仍然可以根据所选呈现类型在用户设备的视图中看到改变116A。
[0064] 基于云的环境101从客户端设备110A接收对提交版本107的副本109A的源代码140的局部的改变116A。基于云的环境101还从客户端设备110A接收呈现类型的选择。在一些实现中,基于云的环境101还可以从客户端设备110A接收发布类型的选择。
[0065] 基于云的环境101可以根据所选择的呈现类型向其他客户端设备(例如,客户端设备110B‑Z)中的每一个传输改变116A和在相应的客户端设备110处的具有提交版本的对应副本109(例如,副本109B‑Z)的改变116A的实时呈现的指令。在一些实现中,基于云的环境101可以根据发布类型向其他客户端设备(例如,客户端设备110B‑Z)中的每一个传输用于执行权限的指令以允许对应的客户端设备110将改变116A传播到在客户端设备110处的提交版本107的对应副本109。
[0066] 客户端设备110B可以根据所选择的呈现类型在客户端设备110B处执行具有源代码140的提交版本107的副本109B的改变116A的实时呈现。在一些实现中,客户端设备110B可以根据所选的发布类型将改变116B传播到第二副本109B以允许包括改变116A的副本109B准备好在客户端设备110B处执行(例如,允许改变被传播和解释或编译)。在一些实现中,根据所选择的发布类型,可以防止客户端设备110B将改变116B传播到第二副本109B(例如,防止副本109B包括改变116A以在客户端设备110B处执行)。
[0067] 在一些实现中,客户端设备110B的用户可以滚动到图2A‑2D所示的源代码140的部分。在一些实现中,客户端设备110B的用户可以搜索并显示图2A‑2D中所示的源代码140的部分。用户界面200可以显示源代码140的部分和正在编辑的部分、正在编辑该部分的用户的光标位置、改变116等的一个或多个视觉指示220。
[0068] 如图2A所示,所选择的呈现类型可以是第一呈现类型,其使得客户端设备110B显示包括改变116A的提交版本107的第二副本109B的源代码140的一部分的视觉指示220(例如,视觉指示220A‑B)而不显示改变116A的内容。例如,在图2A中,指示220A‑B指示源代码140的一部分正由另一客户端设备110编辑而不显示改变116A的内容。指示180可以是插入符号、箭头、突出显示的部分或管道,其指示源代码140的被改变的部分。视觉指示220可以在另一客户端设备110正在生成改变116的源代码140的每个部分处。视觉指示220可以在与源代码140的部分相关的源代码140的附加部分处,其中另一个客户端设备110正在生成改变116。在一些实现中,显示可选择以显示改变116A的内容的图形元素210。例如,在选择图形元素210的用户输入时,客户端设备110可以显示显示应用于源代码140的改变116A的窗口(例如,覆盖窗口、弹出屏幕、新用户界面等)。
[0069] 在一些实现中,客户端设备110A可以接收用户输入,其指示客户端设备110A的用户打算编辑的源代码140的提交版本107的副本109A的一部分。客户端设备110A可以向基于云的环境101传输副本109A的部分的指示,并且基于云的环境101可以向客户端设备110B‑Z传输指令以引起客户端设备110A的用户打算编辑提交版本107的副本109的部分的视觉指示220。例如,指令可以使客户端设备110B‑Z突出显示提交版本107的它们的对应副本109B‑Z的一部分,其指示客户端设备110A的用户打算编辑源代码140的部分。
[0070] 如图2B所示,所选择的呈现类型可以是第二呈现类型,其使得客户端设备110B实时地显示(例如,经由用户界面200B)在提交版本107的副本109B的一部分中的改变116A的内容并且禁止客户端设备110B的用户编辑包括改变116A的提交版本107的副本109B的部分。客户端设备110B的用户可以被允许编辑提交版本107的副本109B而不编辑改变116A。第二呈现类型可以禁止客户端设备110B的用户在改变116A之上进行改变116B(例如,客户端设备110B可以显示改变116A并且可以禁止编辑或以其他方式与改变116A交互)。在一些实现中,用户界面200B可以以不同的字体颜色示出改变116A。在一些实现中,用户界面200B可以显示指示改变116A的文本的视觉指示(例如,突出显示、插入符号、箭头、管道线等)。
[0071] 如图2C所示,所选择的呈现类型可以是第三呈现类型,其使得客户端设备110B实时地显示(例如,经由用户界面200C)在提交版本107的副本109B的一部分中的改变116A的内容并且允许客户端设备110B的用户编辑包括改变116A的提交版本107的副本109B的部分。如图2C所示,客户端设备110B可以接收改变116B的用户输入,例如“param2=math.log(param2)”,其与源代码140的局部和改变116A一起显示。在一些实现中,客户端设备110B等待将改变116B提交到副本109B的部分,直到客户端设备110A提交改变116A(例如,在提交其他改变之前将提交一般区域中的第一改变,首先生成改变116A的用户将指定生成稍后改变116B的用户是否可以在用户提交第一改变116A之前提交稍后改变116B)。在一些实现中,客户端设备110B可以在客户端设备110提交改变116A之前提交改变116B。
[0072] 在一些实现中,用户界面200B可以以第一字体颜色示出改变116A、以第二字体颜色示出改变116B以及以第三字体颜色示出源代码140的局部。在一些实现中,用户界面200B可以显示指示改变116A的文本的第一视觉指示(例如,突出显示、插入符号、箭头、管道线等)和指示改变116B的文本的第二视觉指示。第三呈现类型可以允许客户端设备110B的用户在改变116A之上进行改变116B(例如,客户端设备110B可以显示改变116A并且可以编辑改变116A或以其他方式与改变116A交互)。
[0073] 基于云的环境101可以从客户端设备110A接收提交请求,该提交请求识别第一改变记录119A中的至少一些源代码改变并且请求将改变记录119A的所识别的改变提交到存储在源控制平台120的存储库114处的源代码140的提交版本107。响应于接收提交请求,基于云的环境101可以将改变记录119A的所识别的改变提交到存储在存储库114处的源代码140的提交版本107以生成源代码140的新提交版本。基于云的环境101可以将源代码的新提交版本的对应副本传输到每个客户端设备110以用于源代码140的实时协同编辑。
[0074] 如图2D所示,提交请求可以对应于向在“param1”之后的源代码140的局部的第一行添加“,param2”,执行回车以在源代码140的局部的第二行和第三行之间添加新行,并在新行中添加文本“param2=param1*6”的改变116A。基于云的环境101可以将这些改变116A提交给源代码140的提交版本107以生成包括改变116A的源代码140的新提交版本。如图2D所示,改变116A不再显示为视觉指示220A或改变116A。改变116A被示为源代码140的提交版本107的一部分。客户端设备110B可以被禁止在改变116A之上提交改变116B(例如,改变116B依赖于改变116A)直到改变116A被提交。如图2D所示,既然已提交改变116A,则可提交改变116B。
[0075] 在实现中,基于云的环境101接收改变116A并确定与提交版本107的副本109A的源代码的局部中的改变116A相关的附加源代码的位置。源代码的一部分包括接收改变116A的源代码140的局部和附加源代码。用于在另一客户端设备110处实时呈现具有提交版本107的副本109的改变116A的指令识别源代码的部分。在一些实现中,源代码140的部分可以包括连续的文本。例如,源代码140的一部分可以是包括源代码140的提交版本107的副本109的一行、单行或多个连续行(例如,N行)的一部分的文本的文本区域。在一些实现中,源代码的部分可以包括相关函数。例如,文本“function test(param1”...”end”可以是同一函数的一部分,并且改变116A的实时呈现的指令可以识别整个函数。在另一个示例中,“function test(param1...”可以在功能上与源代码中其他地方的附加文本相关,并且用于实时呈现改变116A的实时呈现的指令可以识别“function test(param1...”和源代码中其他地方的附加文本。
[0076] 在一些实现中,客户端设备110A可以接收客户端设备110A的用户打算编辑的副本109A的区域的用户输入。该区域可以包括源代码文件的一部分或多个源代码文件的部分。
除了改变116A的视觉指示220或改变116A的内容之外,用户界面200A‑D中的一个或多个可以示出指示客户端设备110A的用户打算编辑的副本109A的区域的视觉指示220。通过接收用户打算编辑的区域的指示、用户正在编辑的位置的指示或用户的改变116中的一个或多个,用户可以避免对那些区域进行编辑或者可以进行与其他改变兼容的编辑。这样做时,可以避免冲突,并且可以需要减少处理器开销、所需带宽和能量消耗以同步改变和合并冲突。
通过避免冲突,还可以增加源代码140的功能。
[0077] 图3A‑3B是示出根据本公开的实现的提供源代码140的实时协同编辑的方法300和350的流程图。方法300和350可由包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码)、软件(例如,在处理设备上运行以执行硬件模拟的指令)或其组合的处理逻辑执行。在一些实现中,在客户端设备110处执行的源控制模块118可以执行方法350的一些或所有操作。在其他实现中,在源控制平台120处执行的源控制模块132可以执行方法300的一些或所有操作。
图1A‑1B和图2A‑2D的元素可用于帮助示出方法300和350。可以注意到,在一些实现中,方法
300和350可以包括以任何顺序执行的相同、不同、更少或更多数量的操作。
[0078] 图3A是示出根据本公开的实现的提供源代码的实时协同编辑的方法300的流程图。方法300可由源控制模块132执行。
[0079] 在框302处,执行方法300的处理逻辑(例如,源控制平台120的基于云的环境101)将源代码140的提交版本107的副本109A传输到客户端设备110A、将源代码140的提交版本107的副本109B传输到客户端设备110B,用于在源控制平台120等上实时协同编辑源代码
140。在一些实现中,处理逻辑可以将副本109传输到已被授权协同编辑源代码140的每个客户端设备110。在一些实现中,处理逻辑可将副本109传输到已被授权并已请求协同编辑源代码140的每个客户端设备110。
[0080] 在框304处,处理逻辑从客户端设备110A接收对呈现类型的选择。呈现类型可以从多个呈现类型中选择,这些类型指定(对于源控制平台120的一个或多个其他用户)对与客户端设备110A相关联的第一用户对源代码140的提交版本107的副本109A所做的改变116A的访问权限。
[0081] 在一些实现中,处理逻辑从客户端设备110A接收对发布类型的选择。发布类型可以从多个发布类型中选择,这些发布类型指定(对于源控制平台120的一个或多个其他用户)第一用户对源代码140的提交版本107的副本109A所做的改变116A的执行权限。
[0082] 在一些实现中,处理逻辑从客户端设备110A接收对从多个呈现类型中选择的发布类型的选择,这些发布类型指定(对于源控制平台120的一个或多个其他用户)对由与客户端设备110A相关联的第一用户对源代码140的提交版本107的副本109A所做的改变116A的执行权限。
[0083] 在框306处,处理逻辑从客户端设备110A接收对提交版本107的副本109A的源代码140的局部的改变116A。
[0084] 在框308处,处理逻辑根据所选择的呈现类型传输用于在客户端设备110B处提交版本107的副本109B与改变116A的实时呈现的指令。指令可以识别受呈现类型影响的源代码140的开始行和停止行。
[0085] 在一些实现中,呈现类型是第一呈现类型。根据第一呈现类型传输指令使客户端设备110B显示包括改变116A的提交版本107的副本109B的源代码140的一部分的视觉指示220,而不显示改变116A的内容(见图2A)。在一些实现中,根据第一呈现类型传输指令进一步使客户端设备110B显示可选择以显示改变116A的内容的图形元素210。
[0086] 在一些实现中,呈现类型是第二呈现类型。根据第二呈现类型传输指令使客户端设备110B实时地在提交版本107的副本109B的一部分中显示改变116A的内容并且禁止客户端设备110B的第二用户编辑包括改变116A的提交版本107的副本109B的部分(见图2B)。
[0087] 在一些实现中,呈现类型是第三呈现类型。根据第三呈现类型传输指令使客户端设备110B实时显示改变116A的内容,并允许客户端设备110B的第二用户编辑包括改变116A的提交版本107的副本109B的一部分(见图2C)。
[0088] 在一些实现中,根据呈现类型传输指令使客户端设备110B显示视觉指示220,其指示比改变116A更多。视觉指示220可以指示改变116A和与改变116A相关的附加源代码。例如,响应于对函数的一部分进行改变116A,视觉指示220可以指示源代码140的整个函数(例如,提交版本107的副本109A的源代码140局部包括函数的某些源代码,附加的源代码包括该函数的剩余源代码)。在另一示例中,响应于对语句的一部分进行改变,视觉指示220可以指示包括分支语句的复合语句。在一些实现中,附加源代码可以是与接收改变116A的源代码140的局部相邻的源代码块。在一些实现中,附加源代码与接收改变116A的源代码140的局部不相邻。
[0089] 在一些实现中,客户端设备110A指示源代码140的一部分,其包括源代码140的接收或将接收改变116A的局部和附加源代码。在一些实现中,(例如,基于云的环境101的)处理逻辑可以确定与提交版本107的副本109A的源代码140的局部中的改变116A(或预期改变116A)相关的附加源代码的位置。处理逻辑可以确定源代码140的一部分,其包括源代码140的接收改变116A的局部和附加源代码。
[0090] 在一些实现中,在框308处,指令进一步根据所选择的发布类型。在一些实现中,处理逻辑根据选择的呈现类型传输第一指令和根据选择的发布类型传输第二指令。在一些实现中,响应于接收到对第一发布类型的选择,处理逻辑可以向客户端设备110B传输用于执行权限的第一指令,其使客户端设备110B根据第一发布类型在客户端设备110B处将改变116A传播到提交版本107的副本109B,以允许包括改变116A的提交版本107的副本109B准备好在客户端设备110B处执行(例如,解释、编译、翻译、组装等)。
[0091] 源代码140可以是以用户可以阅读和改变的编程语言(例如,高级语言)编写的程序指令的文本版本。源代码可以通过将代码翻译(例如,编译、解释)为计算机更快和更容易阅读的语言(例如,汇编语言、机器语言)来准备执行。在一些实现中,为执行准备源代码140包括解释源代码140。例如,解释器可以读取然后执行源代码140中的每个命令。在另一个示例中,解释器可以在发送相应的机器语言指令之前分析整个源代码。在一些实现中,为执行准备源代码140包括编译源代码140。例如,编译器可以产生用汇编语言编写的程序并且汇编器可以将所得程序转换成计算机理解的机器代码(例如,二进制代码)。
[0092] 在客户端设备110B处将改变116A传播到提交版本107的副本109B可以响应于客户端设备110B的用户对传播改变116A的请求(例如,改变116A可能不会传播到副本109B,而无需客户端设备110B的用户的用户请求或用户批准)。
[0093] 在一些实现中,允许源代码140准备好以便执行是在客户端设备110B处解释包括改变116A的源代码140。在一些实现中,允许源代码140准备好以便执行是在客户端设备110B处编译包括改变116A的源代码140。
[0094] 在一些实现中,响应于接收到对第二发布类型的选择,处理逻辑可以向客户端设备110B传输用于执行权限的第二指令,其根据第二发布类型在客户端设备110B处防止客户端设备110B将改变116A传播到提交版本107的副本109B(例如,防止改变116A传播到副本109B以防止在客户端设备110B处改变116A准备好利用提交版本107的副本109B执行)。
[0095] 在一些实现中,响应于接收到呈现类型的选择和发布类型的选择,处理逻辑可以传输指令以使客户端设备110B根据呈现类型和发布类型来动作。例如,指令可以使客户端设备110B显示改变116A,允许客户端设备110B的用户编辑包括改变116A的副本109B的部分,并防止客户端设备110B传播改变116A准备好以便执行(例如,防止编译或解释)。在另一示例中,指令可以使客户端设备110B显示改变116A,防止客户端设备110B的用户编辑包括改变116A的副本109B的部分,并允许客户端设备110B传播改变116A准备好以便执行(例如,允许将改变116A传播到副本109B以进行编译或解释)。
[0096] 用户可以为用户所做的改变116指定其他用户的访问权限和执行权限的任何组合。用户可以为不同的用户组指定访问权限和执行权限的不同组合。
[0097] 回到图3A,在框310处,处理逻辑将改变116A传输到客户端设备110B。处理逻辑可以实时地连续接收改变116A并且可以实时地将改变116A传输到其他客户端设备110。
[0098] 在框312处,处理逻辑将改变116A存储在与客户端设备110A的第一用户相关联的改变记录119A(见图1B)中。当接收到新的改变116A时,改变记录119A可以随着时间的推移而改变。
[0099] 在框314处,处理逻辑从客户端设备110A接收提交请求,该请求识别改变记录119A中的至少一些源代码改变(例如,至少改变116A的子集)并请求将改变记录119A的已识别改变提交给存储在源控制平台120的存储库114处的源代码140的提交版本107。
[0100] 在框316处,响应于接收到提交请求,处理逻辑将所识别的改变记录119A的改变提交到存储在存储库114处的源代码140的提交版本107,以生成该源代码140的新提交版本。
[0101] 在框318处,处理逻辑将源代码140的新提交版本的第一副本传输到客户端设备110A,并将源代码140的新提交版本的第二副本传输到客户端设备110B,以用于源代码140的实时协同编辑(见图2D)。
[0102] 如上所述,用户能够实时跟踪彼此的工作。通过让用户实时了解彼此的工作,可以最小化合并冲突的数量和规模。用户可以进行实时窥探其他用户所做的改变,将改变带入他们的源代码140的提交版本的副本109,将他们的改变基于其他用户的改变等中的一个或多个,以避免冲突。
[0103] 图3B是示出根据本公开的实现的提供源代码的实时协同编辑的方法350的流程图。方法350可由客户端设备110的源控制模块118执行。
[0104] 在框352处,执行方法350的处理逻辑从服务器设备(例如,基于云的环境101源控制平台120)接收源代码140的提交版本107的副本109A以用于源控制平台120上的源代码140的实时协同编辑。
[0105] 在框354处,处理逻辑接收指示对呈现类型的选择的第一用户输入(例如,经由用户界面124A)。呈现类型可以从多个呈现类型中选择,这些呈现类型指定(对于源控制平台120的一个或多个其他用户)对由与客户端设备110A相关联的第一用户所做的改变116A对源代码140的提交版本107的改变109A的访问权限。在一些实现中,处理逻辑接收用户输入(例如,经由用户界面),其指示指定对改变116A的执行权限的发布类型的选择。
[0106] 在框356处,处理逻辑接收指示对在客户端设备110A处提交版本107的副本109A的源代码140的局部的改变116A的第二用户输入。改变116A可以包括添加文本、删除文本、回车以添加行、删除连接关系等中的一项或多项。
[0107] 在框358处,处理逻辑生成第一改变记录119A以在客户端设备110A处存储改变116A。当接收到新的改变116A时,第一改变记录119A可以随时间改变。
[0108] 在框360处,处理逻辑将呈现类型的选择和对提交版本107的副本109A的源代码140的局部的改变116A传输到服务器设备。改变116A将是由服务器设备记录在对应于客户端设备110A处的第一改变记录119A的第二改变记录119A中。
[0109] 在一些实现中,呈现类型是第一呈现类型。对呈现类型的选择的传输使客户端设备110B显示包括改变116A的提交版本107的副本109B的源代码140的一部分的视觉指示220,而不显示改变116A的内容(见图2A)。在一些实现中,对呈现类型的选择的传输进一步使客户端设备110B显示可选择以显示改变116A的内容的图形元素210。
[0110] 在一些实现中,呈现类型是第二呈现类型。对呈现类型的选择的传输使得客户端设备110B实时地在提交版本107的副本109B的一部分中显示改变116A的内容并且禁止客户端设备110B的第二用户编辑包括改变116A的提交版本107的副本109B的一部分(见图2B)。
[0111] 在一些实现中,呈现类型是第三呈现类型。呈现类型选择的传输使客户端设备110B实时显示改变116A的内容,并允许客户端设备110B的第二用户编辑包括改变116A的提交版本107的副本109B的一部分(见图2B)。
[0112] 在一些实现中,处理逻辑可以确定与提交版本107的副本109A的源代码140的局部中的改变116A相关的附加源代码的位置。源代码140的一部分包括接收改变116A的源代码140的局部和附加源代码。呈现类型的选择和改变116A的传输识别源代码140的一部分。
[0113] 在框362处,处理逻辑向服务器设备传输指示提交请求的第三用户输入,该提交请求识别第一改变记录119A中的至少一些源代码改变并且请求所识别的第一改变记录119A的改变被提交到存储在源控制平台120的存储库114处的源代码140的提交版本107。
[0114] 在框364处,处理逻辑从服务器设备接收源代码140的新提交版本的第一副本,该第一副本包括使用第二改变记录119A(例如,存储在存储库114中)提交到源代码140的提交版本107的第一改变记录119A的至少一部分。
[0115] 图4描绘了根据本公开的一个或多个方面操作的示例计算系统的框图。在各种示例性示例中,计算机系统400可以对应于图1A‑1B的系统架构100内的任何计算设备。在一个实现中,计算机系统400可以是源控制平台120。在另一个实现中,计算机系统400可以是客户端设备110A‑110Z中的每一个。
[0116] 在某些实现中,计算机系统400可以连接(例如,经由网络,诸如局域网(LAN)、内联网、外联网或因特网)到其他计算机系统。计算机系统400可以在客户端‑服务器环境中以服务器或客户端计算机的能力运行,或者在对等或分布式网络环境中作为对等计算机运行。计算机系统400可以由个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络设备、服务器、网络路由器、交换机或桥接器,或任何能够执行一组指定该设备要采取的行动的指令(顺序或其他)的设备提供。此外,术语“计算机”应包括单独或联合执行一组(或多组)指令以执行本文所述的任何一个或多个方法的计算机的任何集合。
[0117] 在另一方面,计算机系统400可以包括处理设备402、易失性存储器404(例如随机存取存储器(RAM))、非易失性存储器406(例如只读存储器(ROM)或电可擦除可编程ROM(EEPROM)),以及数据存储设备416,它们可以通过总线408相互通信。
[0118] 处理设备402可以由一个或多个处理器提供,例如通用处理器(例如,复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、非常长的指令字(VLIW)微处理器、实现其他类型指令集的微处理器或实现指令集类型组合的微处理器)或专用处理器(例如,专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或网络处理器)。
[0119] 计算机系统400还可以包括网络接口设备422。计算机系统400还可以包括视频显示单元410(例如,LCD)、字母数字输入设备412(例如,键盘)、光标控制设备414(例如,鼠标)和信号生成设备420。
[0120] 数据存储设备416可以包括计算机可读存储介质424(其可以是非暂时性计算机可读存储介质,尽管本公开不限于此),其可以存储对此处描述的方法或功能中的任何一个或多个进行编码的指令426,包括实现图1A‑1B的源控制模块132或118(118A‑118Z)的指令以用于实施本文所述的任何方法。
[0121] 指令426还可以在由计算机系统400执行期间完全或部分地驻留在易失性存储器404和/或处理设备402内,因此,易失性存储器404和处理设备402也可以构成机器可读存储介质。
[0122] 虽然计算机可读存储介质424在示例性示例中显示为单个介质,但术语“计算机可读存储介质”应包括存储一组或多组可执行指令的单个介质或多个介质(例如,集中式或分布式数据库,和/或相关联的高速缓存和服务器)。术语“计算机可读存储介质”还应包括能够存储或编码由计算机执行的一组指令的任何有形介质,该指令使计算机执行本文所述的任何一个或多个方法。术语“计算机可读存储介质”应包括但不限于固态存储器、光介质和磁介质。
[0123] 在前面的描述中,阐述了许多细节。然而,对于受益于本公开的本领域普通技术人员而言显而易见的是,可以在没有这些具体细节的情况下实践本公开。在一些情况下,众所周知的结构和设备以框图形式而不是详细示出,以避免混淆本公开。
[0124] 详细描述的一些部分已经根据对计算机存储器内的数据位的操作的算法和符号表示来呈现。这些算法描述和表示是数据处理领域的技术人员用来最有效地将他们工作的实质传达给本领域的其他技术人员的手段。算法在这里并且通常被认为是导致所需结果的自洽步骤序列。这些步骤是需要对物理量进行物理操作的步骤。通常,尽管不一定,这些量采用能够存储、传输、组合、比较和以其他方式操纵的电或磁信号的形式。出于常用的原因,有时已证明将这些信号称为位、值、元素、符号、字符、术语、数字等是方便的。
[0125] 然而,可以记住,所有这些和类似的术语都将与适当的物理量相关联并且仅仅是应用于这些量的方便的标签。除非从以下讨论中清楚地另有说明,否则应理解,在整个描述中,使用诸如“传输”、“接收”、“存储”、“提交”、“确定”、“生成”等术语的讨论是指计算机系统或类似电子计算设备的操作和过程,其将表示为计算机系统寄存器和存储器内的物理(例如,电子)量的数据操纵和转换为类似地表示为计算机系统的存储器或寄存器或其他此类信息存储、传输或显示设备内的物理量的其他数据。
[0126] 为了解释的简单,方法在本文中被描绘和描述为一系列动作。然而,根据本公开的动作可以以各种顺序和/或同时发生,并且与本文未呈现和描述的其他动作一起发生。此外,并非所有图示的动作都需要实施根据所公开的主题的方法。此外,本领域技术人员将理解和明白,这些方法可以替代地通过状态图或事件表示为一系列相互关联的状态。此外,可以理解的是,本说明书中公开的方法能够存储在制造品上以促进将这些方法传输和转移到计算设备。如本文所用,术语制造品旨在涵盖可从任何计算机可读设备或存储介质访问的计算机程序。
[0127] 本公开的某些实现还涉及用于执行这里的操作的装置。该装置可以被构建用于预期目的,或者它可以包括由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。这种计算机程序可以存储在计算机可读存储介质中,例如但不限于任何类型的,包括软盘、光盘的盘、CD‑ROM、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡,或任何类型的适合存储电子指令的介质。
[0128] 词语“示例”或“示例性”在本文中用于表示用作示例、实例或说明。在此描述为“示例”或“示例性”的任何方面或设计不一定被解释为优选于或优于其他方面或设计。相反,使用“示例”或“示例性”一词旨在以具体方式呈现概念。本申请中使用的术语“或”旨在表示包含的“或”而不是排他的“或”。即,除非另有说明,或从上下文中清楚,“X包括A或B”旨在表示任何自然包容性排列。也就是说,如果X包括A;X包括B;或X包括A和B两者,则在上述任何一种情况下都满足“X包括A或B”。此外,除非另有说明或从上下文清楚指向单数形式,否则本申请和所附权利要求中使用的冠词“一”和“一个”通常可被解释为表示“一个或多个”。此外,除非如此描述,否则始终使用术语“一实现”或“一个实现”或“一实施例”或“一个实施例”等不一定意味着相同的实现或实现。这里描述的一个或多个实现或实施例可以在特定实现或实施例中组合。这里使用的术语“第一”、“第二”、“第三”、“第四”等意在作为区分不同元素的标签,并且根据它们的数字指定可能不一定具有顺序含义。
[0129] 应当理解,以上描述旨在是说明性的,而不是限制性的。在阅读和理解以上描述后,许多其他实现对于本领域技术人员来说将是显而易见的。因此,本公开的范围可以参考所附权利要求以及这些权利要求所授权的等效物的全部范围来确定。