首页> 中国专利> 开发工具扩展程序的透明远程执行

开发工具扩展程序的透明远程执行

摘要

所描述的增强功能支持透明远程执行开发工具扩展程序。计算密集型扩展程序可以在开发者机外部的扩展机上执行,开发者机运行开发工具的用户界面渲染器。用户界面扩展程序可以在本地运行。代替共享文件系统,开发者机上的渲染器以及扩展机上的扩展主机和一个或多个扩展程序可以访问不同的相应机器文件系统。渲染器可以指示扩展主机或扩展主机代理在扩展机上远程衍生进程,而不是在本地衍生调试扩展程序和其他扩展支持进程。扩展程序不需要被更改;现有扩展程序和新创建的扩展程序与单机或多机开发工具部署是二进制兼容的。项目文件保留在有防火墙保护和防止数据丢失的环境中,但是同时可供远程工作的授权开发者以及由语言服务器、调试适配器和工具扩展程序执行的操作来完全访问。

著录项

  • 公开/公告号CN112513820A

    专利类型发明专利

  • 公开/公告日2021-03-16

    原文格式PDF

  • 申请/专利权人 微软技术许可有限责任公司;

    申请/专利号CN201980047751.X

  • 申请日2019-06-27

  • 分类号G06F11/36(20060101);

  • 代理机构11256 北京市金杜律师事务所;

  • 代理人黄倩

  • 地址 美国华盛顿州

  • 入库时间 2023-06-19 10:14:56

说明书

背景技术

使用软件开发工具,软件被创建、测试、增强功能、校正、优化性能以及以其他方式被开发。例如,这样的开发工具的常用功能包括文本编辑功能、语法检查、源代码完成、自动和计算机辅助代码生成、编译、可执行文件构建、缺陷检测和调试、配置和部署以及性能监视和性能分析。软件开发工具将这样的功能部分地或完全地自动化,以提高开发者的产出并且减少停工时间或缩短产品上市时间。一些开发工具是独立程序,而其他开发工具则在套件(诸如,集成开发环境)中提供以便协调使用。一些开发工具是为一个或多个特定编程语言定制的,而其他工具或其至少一部分是与编程语言无关的,这意味着它们不依赖或利用特定于具体编程语言的特征。

发明内容

本文的一些教导受到了最初的技术挑战的启发,该挑战是,针对跨具有相应文件系统的多个机器的远程执行,使得已在使用单个文件系统的单机环境中演进的大量现有开发工具扩展程序变得可用,并且这样做时无需对现有扩展程序进行任何更改。出现了一些附属挑战,包括如何重新设计假定了单个本地文件系统的现有文件系统访问机制,以支持对远程文件系统的访问,以及如何重新设计现有文件系统访问机制来支持远程文件系统和本地文件系统之间的访问的有效划分。另一紧急的附属挑战是,如何重新设计假定了所有工具进程在单个机器上运行的现有进程衍生机制,以支持远程衍生一些但不是全部的工具进程。根据以下提供的讨论,本文教导的创新所解决的其他技术挑战对本领域技术人员也将是显而易见的。

在一些实施例中,开发工具包括开发者机以及在开发者机外部的扩展机。这些可能是不同的虚拟机或不同的物理机。除了处理器和存储器之外,开发者机还具有与开发工具扩展(“扩展”)通信的开发工具用户界面渲染器(“渲染器”)。扩展程序位于扩展机上。扩展程序本身可以预先存在本发明,或者其可以是在提出本文的教导之后创建的扩展程序。因此,与一个或多个现有工具中运行的扩展二进制文件相同,相同的扩展二进制文件可以在创新工具中运行。

在该示例中,渲染器通过发送和接收标识一个或多个软件开发操作的机器间通信,通过网络连接而直接或间接地与扩展程序进行通信。渲染器被配置为使用统一资源标识符(“URI”)来标识扩展机上的存储库中的文件系统中的文件。在某些情况下,渲染器还被配置为在一个或多个机器间通信中指定待在扩展机上衍生的一个或多个开发进程,而不是渲染器本身在运行渲染器的机器上衍生开发进程。

除了其自身的处理能力和存储器之外,在该示例中,扩展机还具有与渲染器进行通信的扩展主机代理(“代理”)。该扩展机还具有扩展主机(“主机”),主机与代理进行通信并且与一个或多个扩展程序进行通信,并且与扩展机的存储库进行通信。扩展机存储库中的文件在扩展机外部的至少一个位置处通过URI来标识,URI被映射到文件系统路径,以在扩展中用于标识文件,从而从扩展机存储库中获取文件内容。

在一些实施例中,执行开发工具扩展来对文件内容执行软件开发操作包括:在开发者机上运行渲染器,将开发者机连接到扩展机来进行机器间通信,以及在扩展机上执行扩展程序。扩展机存储库的文件系统包含软件开发文件,软件开发文件持有用于扩展程序操作的内容。该示例方法还包括使用统一资源标识符文件标识(“URI文件ID”)来标识渲染器中的软件开发文件中的至少一个,将URI文件ID映射到软件开发文件的文件系统路径文件标识(“路径文件ID”),以及使用路径文件ID来访问扩展机存储库中的软件开发文件。

与本文的教导有关的其他技术活动对于本领域技术人员而言也将变得显而易见。给出的示例仅是例示性的。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。相反,提供本发明内容是为了以简化的形式介绍一些技术概念,这些技术概念将在下面的具体实施方式中进一步描述。本发明以权利要求书来选定,并且在本发明内容与权利要求相抵触的范围内,以权利要求书为准。

附图说明

将参考附图来给出更具体的描述。这些附图仅图示了选定的方面,因此不能完全确定覆盖范围或范围。

图1是图示了计算机系统并且还图示了经配置的存储介质的框图;

图2是图示了包括开发者机和扩展机的开发工具系统的各方面的框图;

图3是图示了被配置有文件系统的非易失性存储库的框图;

图4是图示了根据一些开发工具架构的开发工具的各方面的框图,开发工具包括用户界面渲染器,并且还包括扩展主机中的一个或多个扩展程序;

图5是图示了根据一些开发工具架构的开发工具系统的各方面的框图,开发工具系统包括具有用户界面渲染器的开发者机,并且还包括扩展机,扩展机具有代理并且具有扩展主机中的一个或多个扩展程序;

图6是图示了虚拟机的两个操作环境的图;

图7是图示了根据一些开发工具架构的开发工具系统的各方面的框图,开发工具系统包括开发工具、计算硬件以及一个或多个文件系统;

图8是图示了一些文件标识符的各方面的框图;

图9是图示了部署条件的各方面的框图,部署条件包括一个或多个物理机、一个或多个虚拟机以及云;

图10是图示了根据一些开发工具架构的开发工具系统的各方面的框图,开发工具系统包括具有一种内核的开发者机以及为另一种内核定制并且在兼容性层中运行的扩展程序;

图11是图示了根据一些开发工具架构的开发工具系统的各方面的框图,开发工具系统包括在沙箱中运行的扩展程序;

图12是图示了根据一些开发工具架构的开发工具系统的各方面的框图,开发工具系统包括通过数据模型层来访问存储库的扩展应用程序接口;

图13是图示了开发工具系统中的机器间通信的各方面的框图;

图14是图示了可以针对扩展机上的开发工具衍生的进程的框图;

图15是图示了一些示例扩展程序执行方法的流程图;以及

图16是进一步图示了一些开发工具配置或使用方法中的步骤的流程图。

具体实施方式

概述

远程开发是一种受大型软件开发公司关注的开发实践,这些大型软件开发公司例如社交网络提供商、启用应用程序的零工经济经纪人、流媒体提供商、其他在线服务提供商以及开发软件的一些其他公司。在实施远程开发时,开发者不会操作本地检出的文件,至少大多数情况下不这样做。而是,开发者从本地机器连接到远程机器,在远程机器中检出文件。远程开发使得企业能够为开发者提供完全受控的开发环境,例如,源代码被保留在防火墙外围之后,且具有强身份验证、授权和其他安全控制措施。

但是一个技术挑战是,理想情况下,用于此类远程活动的开发工具在功能和性能方面至少提供与开发者为本地开发所需的开发者支持水平相同的开发者支持。例如,即使处于远程状态,开发工具也应为语言功能(诸如,标识符自动完成、后台语法检查和集成源控制)提供惯常的支持水平。对于相对较大的项目(例如,其中相关文件可能总计包含数十万行源代码的项目),在本地运行此类开发工具服务并从远程存储库中获取文件不是可行的选择。

另一复杂的问题是提供这些开发工具服务的例程和数据结构通常没有嵌入到工具的核心代码中,而是由工具扩展程序来提供。因此,支持远程开发的尝试可能导致对现有扩展程序的施加困难、交付延迟和昂贵的更改要求,或者可能导致支持远程开发的新扩展程序的类似不期望的实现。现代开发工具可与许多扩展程序一起使用或提供对这些扩展程序的功能访问,并且使得开发者习惯于使用他们选择的现有扩展程序集进行开发,从而使得该问题更加复杂。

为了减轻或克服与这些和其他技术挑战相关联的功能障碍,本文描述的实施例提供了一系列开发工具架构和对应的实现方式。本文的教导描述了开发工具系统,该开发工具系统将用户界面渲染器放置在开发者机上、将扩展主机和扩展程序放置在潜在的远程扩展机上并且提供适当的机器间通信。一些实施例提供文件标识机制,文件标识机制允许渲染器标识扩展机文件,而不需要使文件系统被渲染器和扩展程序共享。不论两个机器之间的距离如何,一些实施例允许渲染器在扩展机上衍生调试进程和其他开发任务来支持开发。

本文描述的解决方案允许公司避免放弃熟悉的扩展程序或专门开发新的扩展程序来支持远程开发。通过在开发者机和扩展机之间划分功能,提供了对语言特征的常规支持水平。安全控制得到维护或补充。其他优点也将变得显而易见。

本文描述的一些实施例可以在更广泛的上下文下由一些人来查看。例如,诸如通信、开发、扩展、机器、映射和进程之类的概念可以被认为与特定实施例相关。但是,并不是从广泛的上下文中得出,本文寻求抽象概念的专有权;他们不是。相反,本公开致力于提供适当的特定实施例,这些实施例的技术效果完全或部分解决了特定技术问题,诸如,如何通过可编辑文本来减少存储器使用或加快文件加载到文本编辑器中。涉及通信、开发、扩展、机器、映射或进程的一些经配置的存储介质、系统和方法不在本范围之内。因此,在适当地理解本公开的情况下,也避免了模糊、纯抽象、缺乏技术特征以及伴随的证明问题。

技术特征

本文描述的实施例的技术特征对于本领域的普通技术人员将是清楚的,并且也将以多种方式对于广泛的专注读者而言是清楚的。一些实施例解决了源于计算技术的技术活动,并且通过帮助那些系统更广泛地使用现有开发工具扩展程序(包括远程使用现有扩展程序二进制文件)来改进计算系统的功能。因此,无需迁移所有现有扩展程序,并且开发者从使用现有扩展程序中获得的舒适度至少与在远程扩展执行功能可用之前在本地进行开发时获得的舒适度相同。

一些实施例提供的技术效果包括通过支持具有物理机或虚拟机、具有不同种类的内核的机器、具有不同安全控制的机器以及不同的互操作性机制的不同组合的部署来更灵活地使用开发工具扩展。

一些实施例包括技术改造,诸如文件标识符映射、进程衍生操作、通信代理和网络连接检测。

根据所提供的描述,基于教导的技术特性的其他优点对于本领域的技术人员也是显而易见的。

首字母缩写词、缩写和名称

以下定义了一些首字母缩写词、缩写和名称。其他定义在本文中的其他地方,或者不需要此处定义来被技术人员理解。

ALU:算术逻辑单元

API:应用程序接口

BIOS:基本输入/输出系统

CD:紧凑盘

CPU:中央处理单元

DAP:调试适配器协议

DVD:数字通用盘或数字视频盘

FPGA:现场可编程门阵列

FPU:浮点处理单元

Git:版本控制系统

GPU:图形处理单元

GUI:图形用户界面

HTTPS:安全超文本传输协议

IP:互联网协议

Java:一种编程语言

LAN:局域网

LSP:语言服务器协议

OS:操作系统

RAM:随机存取存储器

ROM:只读存储器

TCP/IP:传输控制协议/互联网协议

UDP:用户数据报文协议

URI:统一资源标识符

VIM:一种可配置的文本编辑器

VS Code:

WAN:广域网

关于超链接,请注意

本公开的各部分包含URI、超链接、IP地址和/或被认为是浏览器可执行代码的其他项。这些项出于其自身的原因而被包括在本公开中以帮助描述一些实施例,而不是被包括来参考它们所标识的网站或文件的内容。申请人无意将这些URI、超链接、IP地址或其他此类代码作为有效链接。这些项均不旨在通过引用的方式并入位于本公开文件之外的材料。因此,不应反对将这些项包括在本文中。如果这些项尚未被禁用,则可以认为专利局在准备将该文档的文本加载到其官方网络数据库时会禁用它们(使它们成为无效链接)。参见例如美国专利和商标的专利审查程序手册§608.01(VII)。

附加术语

本文参考诸如附图中所示的示例性实施例,并且本文中使用特定语言来描述它们。但是,本领域技术人员以及拥有本公开的技术人员想到的对本文所示特征的改变和进一步修改以及本文特定实施例所示抽象原理的附加技术应用应被认为在权利要求的范围内。

在本公开中阐述了术语的含义,因此在阅读权利要求时应仔细注意这些阐述。给出了具体示例,但是相关领域技术人员将理解,其他示例也可以落入所使用的术语的含义内,并且落入一个或多个权利要求的范围内。此处的术语不一定具有与它们在一般用途(特别是在非技术用途中)、特定行业的用途、特定词典或词典集合中的含义相同的含义。附图标记可以与各种措词一起使用,以帮助示出术语的广度。从文本的给定部分中省略附图标记并不一定意味着该文本未讨论附图的内容。发明人主张并行使其对自己的词典编纂的权利。带引号的术语是显式定义的,但是术语也可以不使用引号而被隐式定义。术语可以在具体实施方式中和/或申请文件中的其他位置处被显式或隐式定义。

如本文所使用的,“计算机系统”可以包括例如一个或多个服务器、主板、处理节点、膝上型计算机、平板电脑、个人计算机(便携式或非便携式)、个人数字助理、智能手机、智能手表、智能手环、蜂窝或移动电话、至少具有处理器和存储器的其他移动设备、视频游戏系统、增强现实系统、全息投影系统、电视、可穿戴计算系统和/或提供至少部分地通过指令来进行控制的一个或多个处理器的其他设备。指令可以采用固件或存储器和/或专用电路中的其他软件的形式。

“多线程”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够调度或被调度(并可能进行同步)的任何代码,并且对于例如诸如“任务”、“进程”或“协程”的其他名称也可能是已知的。线程可以并行地、顺序地运行或以并行执行(例如,多处理)和顺序执行(例如,时间切片)的组合来运行。

“处理器”是线程处理单元,诸如,同时多线程实现中的核心。处理器包括硬件。给定芯片可以容纳一个或多个处理器。处理器可以是通用的,也可以针对特定用途(诸如,矢量处理、图形处理、信号处理、浮点算术处理、加密、I/O处理等)来定制。

“内核”包括操作系统、系统管理程序、虚拟机、BIOS代码和类似的硬件接口软件。

“代码”是指处理器指令、数据(包括常量、变量和数据结构)或指令和数据两者。“代码”和“软件”在本文中可互换使用。可执行代码、解释代码和固件是代码的一些示例。为了执行而必须被解释或编译的代码被称为“源代码”。

“程序”在本文中被广泛地使用,以包括应用程序、内核、驱动程序、中断处理程序、固件、状态机、库以及由程序员(也被称为开发人员)编写和/或自动生成的其他代码。

“服务”是指在云计算环境或其他网络或计算系统环境中提供的可消费程序。

“云”是指用于计算、存储和联网的池化资源,其是弹性的,可用于所测量到的按需服务。云可以是私有的、公共的、共同体的或混合的,并且云服务可以以基础设施即服务、平台即服务、软件即服务或另一服务的形式来提供。除非另有说明,否则从文件读取或写入文件的任何讨论均包括读取/写入本地文件或通过网络(可以是云网络或其他网络)的读取/写入或者同时进行(本地和联网的读取/写入)。

除非另有说明,否则如本文所使用的,“包括(include)”允许附加元件(即,包括(include)是指开放性包括(comprise))。

“优化”是指改进,不一定完美。例如,可以对已被优化的程序或算法进行进一步的改进。

“进程”(process)在本文中有时被用作计算科学领域的术语,并且在该技术意义上涵盖资源用户,即,例如协程、线程、任务、中断处理程序、应用程序进程、内核进程、程序(procedure)和对象方法。“过程”(process)在本文中也用作专利法的技术术语,例如,在描述过程权利要求时,与系统权利要求或制品(经配置的存储介质)权利要求相对。类似地,“方法”在本文中有时被用作计算机科学领域的技术术语(一种的“例程”),也被用作专利法领域的术语(“过程”)。本领域技术人员将理解在特定情况下预期具有的含义,并且还将理解(在专利法意义上的)给定要求保护的过程或方法有时可以使用一个或多个过程或方法(在计算科学意义上)来实现。

与没有自动化的情况相反,“自动地”是指通过使用自动化(例如,针对本文讨论的特定操作和技术效果,由软件配置的通用计算硬件)。具体地,“自动地”执行的步骤虽然可以由人启动或由人以交互方式引导,但它们并不通过手在纸上或在人的大脑中执行。自动步骤使用机器来执行,以获得在没有这样提供的技术交互的情况下将无法实现的一个或多个技术效果。

技术人员理解,技术效果是技术实施例的推定目的。例如,一个实施例中涉及计算,并且一些计算也可以在没有技术组件的情况下(例如,通过纸和铅笔,甚至作为脑力步骤)执行,这一事实并不消除技术效果的存在或改变实施例的具体技术性质。诸如运行渲染器、执行扩展程序、在虚拟机之间进行通信、通过网络进行通信、自动映射文件标识符以及衍生进程的操作在本文中应理解为固有数字化。人脑不能直接与CPU或其他处理器或与RAM或其他数字存储装置进行对接,来读取和写入必要的数据以执行本文所教导的扩展环境配置和远程扩展执行步骤,或者提供本文所教导的扩展程序二进制文件的扩张。鉴于本公开,本领域技术人员将很好地理解这一点,但是有时可能需要将事实告知或提醒其他人。除非另有说明,否则与纯粹的思想实验相反,还假定实施例能够在生产环境或针对生产环境的测试实验室中大规模(即,一千或更多的主用户)操作。

“以计算方式”同样意味着计算设备(至少是处理器加存储器)正在被使用,并且排除了仅凭人类思想或仅凭人类动作获得的结果。例如,如本文所理解的,用纸和笔进行算术不是以计算方式进行的算术。计算结果更快、更广泛、更深入、更准确、更一致、更全面和/或提供的技术效果超出了人类能力范围。“计算步骤”是以计算方式执行的步骤。“自动地”或“以计算方式”都不一定意味着“立即”。“以计算方式”和“自动地”在本文中可互换使用。

“主动地”是指没有用户的直接请求。实际上,在步骤的结果已被呈现给用户之前,用户甚至可能没有意识到实施例的主动步骤是可能的。除非另有说明,否则本文所述的任何计算和/或自动步骤也可以主动进行。

贯穿该文档,使用可选的复数形式“(s)”、“(es)”或“(ies)”表示存在一个或多个所指示的特征。例如,“(多个)处理器”是指“一个或多个处理器”或等效地“至少一个处理器”。

为了美国法律和实践的目的,在权利要求书或其他地方使用本文中的词语“步骤”(step)并非旨在调用装置加功能(means plus function)、步骤加功能(step plusfunction)或第35美国法典第112条第六款/第112(f)条的权利要求解释。特此明确驳斥对此种效果的任何推定。

出于美国法律和实践的目的,除非权利要求使用短语“用于…的装置”,否则权利要求并不意味着援引装置加功能的解释。旨在被解释为装置加功能语言的权利要求语言(如果存在)将通过使用短语“用于…的装置”来明确记载该意图。当采用装置加功能的解释时,无论是通过使用“用于…的装置”和/或通过法院对权利要求语言的法律解释,应将规范中针对给定名词或给定动词记载的装置理解为与权利要求语言链接并在本文中通过以下任何方式链接在一起:在附图框图中的相同框内出现、以相同或相似名称表示、以相同附图标记表示、任一附图中描绘的功能关系、在本公开文本中指出的功能关系。例如,如果权利要求限制记载了“zac小部件”,并且该权利要求限定适用于装置加功能的解释,则至少在说明书中任何图框、段落或示例中提及“zac小部件”的任何地方标识的所有结构、或由分配给zac小部件的任何附图标记连接在一起的所有结构、或被公开为与zac小部件的结构或操作具有功能关系的所有结构将被视为本申请中针对zac小部件标识的结构的一部分,并将帮助定义zac小部件结构的等效集合。

贯穿该文档,除非另有明确说明,否则对过程中的步骤的任何引用均假定该步骤可以由感兴趣的一方直接执行和/或由一方通过干预机制和/或干预实体间接执行,并且仍然在步骤范围之内。即,除非明确说明直接执行,否则不需要由感兴趣方直接执行步骤。例如,涉及感兴趣方的动作的步骤(诸如,关于目标或其他主题的访问(accessing)、缓存(caching)、连接、通信、配置、创建、显示、执行、标识、安装、解释、映射、获取、操作、渲染、运行、搜索、保存、衍生、指定、存储、同步、使用、利用(以及访问、被访问、缓存、被缓存等)可能涉及由一些其他方的干预动作(诸如,转发、复制、上传、下载、编码、解码、压缩、解压缩、加密、解密、认证、调用等),但仍应被理解为由感兴趣的一方直接执行。

每当提及数据或指令时,应理解它们对计算机可读存储器和/或计算机可读存储介质进行配置,从而将其变换为特定制品,而不是例如简单地存在于纸上、人的思想中或者仅是电线上传播的信号。出于美国专利保护的目的,根据美国专利商标局(USPTO)在In reNuijten案中的解释,存储器或其他计算机可读存储介质不是传播信号、载波或属于可专利主题范围之外的单纯能量。在美国,没有任何权利要求本身涵盖信号或单纯的能量,并且鉴于本公开而主张其他权利要求解释在表面上是不合理的。除非在美国境外授予的权利要求中另有明确说明,否则权利要求不涵盖信号本身或单纯的能量。

此外,尽管本文其他地方有明显相反的说明,但在以下方面之间应理解为明显的区别:(a)一方面是计算机可读存储介质和计算机可读存储器,另一方面是(b)传输介质,也被称为信号介质。传输介质是传播信号或载波的计算机可读介质。相反,计算机可读存储介质和计算机可读存储器不是传播信号或载波的计算机可读介质。除非在权利要求中另有明确说明,否则“计算机可读介质”是指计算机可读存储介质,其本身不是传播信号且不仅是单纯的能量。

本文的“实施例”是示例。术语“实施例”不能与“本发明”互换。实施例可以自由地共享或借用各方面来创建其他实施例(只要结果可操作),即使本文本身未明确描述各方面的结果组合。要求明确描述的每个许可组合对于本领域技术人员而言不是必须的,并且这与承认专利说明书是将本领域技术人员作为读者所编写的政策相违背。关于由甚至很少量可组合特征引起的可能组合数量的形式化组合计算和非形式化直觉也将表明,本文描述的各方面存在大量各方面的组合。因此,要求每个组合的明确记载将与要求简明的专利说明书和使读者了解所涉及技术领域的政策相违背。

附图标记列表

提供以下列表是为了方便和支持附图以及作为说明书文本的一部分,说明书通过参考多个项来描述创新。尽管如此,此处未列出的项仍可以是给定实施例的一部分。为了使得文本更好地易读,在文本中某些(而非全部)引用项附近引用了给定附图标记。相同的附图标记被用于参考给定项的不同示例或不同实例。附图标记的列表是:

100操作环境,也被称为计算环境

102计算机系统,也被称为计算系统(computational system或者computingsystem)

104用户

106外围设备

108通用网络

110处理器

112计算机可读存储介质,例如,RAM、硬盘

114可移除的经配置的计算机可读存储介质

116使用处理器可执行的指令;可以位于可移除存储介质上或其他存储器(易失性或非易失性或二者)中

118数据

120(多个)内核,例如,(多个)操作系统、BIOS、设备驱动程序

122工具,例如,防病毒软件、防火墙、分组嗅探器软件、入侵检测系统(IDS)、入侵防御系统(IPS)、软件开发工具以及工具包

124应用,例如,文字处理器、网络浏览器、电子表格、游戏、电子邮件工具

126显示屏,也被称为显示器

128未以某种方式与附图标记106、108、110、112、114相关联的计算硬件

202开发者机

204扩展机

206软件开发工具的渲染器部分;不要与主要用于生成计算机图形的渲染引擎(诸如,射线跟踪渲染引擎或可以控制相机放置、灯光放置、阴影、纹理贴图和其他视觉效果数据的其他图像合成代码)相混淆;渲染器206渲染工具用户界面,工具用户界面通常用于查看和编辑源代码文本或被处理来产生可执行软件的类似文件内容

208非易失性数据存储库

210软件开发工具的扩展程序;也可以被称为“插件”;包括二进制或其他可执行代码

212两个机器之间的通信记录,例如,发送或接收的数据结构、或者在机器之间传递信息的过程调用序列

302文件系统(filesystem),有时也被称为“文件的系统”(file system);控制数据被存储和获取的方式的系统软件

304软件开发文件,即,包含对软件开发有用的数据的文件

306文件系统与文件相关联的路径;通常包括至少一个文件名和目录层次结构中一个或多个目录的名称;路径被用于对文件进行定位,因此其内容可以被读取或写入

400软件开发工具

402软件开发工具扩展主机

404软件开发工具扩展API

406编程语言服务器,例如,Java语言服务器、TypeScript服务器、Python服务器或其他编程语言特定的服务器

408调试适配器,例如,Java语言调试适配器或Python调试适配器或其他编程语言特定或调试器特定或运行时特定的调试适配器

410文件内容

412在图4中未以某种方式提及的软件开发工具代码;例如,可以包括扩展主机通信代理、衍生的进程、附加扩展主机或其他代码

502扩展主机通信代理

602虚拟机

604虚拟机管理程序

606处理器、存储器、支持(多个)虚拟机的其他硬件

700被配置有软件开发工具的系统

802文件标识符

804基于URI的文件标识符

806基于文件系统路径的文件标识符

808统一资源标识符(“URI”)

810URI的方案组件

812URI的路径组件

814IP地址

816端口号

818符号名

820网络套接字标识符

822文件系统目录名称

824文件系统文件名

826文件系统卷名;有时被称为驱动名称

828触发URI文件ID到路径文件ID的映射的关键字或其他令牌;可以被称为“映射触发”(map trigger/mapping trigger)

830URI的主机名组件

832URI中未以某种方式编号的任何组件

902处理器核心;处理器110可以具有一个或多个核心

904存储器112的存储容量

906云;也可以被称为“云网络”

908防火墙;例如,可以完全以软件来实现,也可以是防火墙硬件设施

910容器,即,操作系统级或内核级虚拟化;容器通常彼此隔离,使用它们自己的库集合,并且可以彼此通信;容器通常被部署在集合中,并且所有容器使用相同的内核并且因此比虚拟机更轻便

912UI扩展程序,例如扩展程序210,其提供图标、配色方案或其他数据或代码来增强用户与开发工具的交互体验

1002兼容性层

1102安全沙箱

1202数据模型层

1302软件开发操作

1304软件开发操作的标识符,例如命令或操作码

1306进程,例如,具有PID(给定内核中的进程标识符)并且具有诸如就绪、运行、挂起、阻止等状态的软件进程

1308用于待衍生的进程的进程标识符;可以是例如名称或ID号,但是通常在进程被衍生之后与PID不匹配,因为PID在内核创建进程时由内核分配,并且进程标识符1308标识通常尚未被内核创建的进程

1402脚本

1404执行脚本的进程;也指代通过执行脚本来创建的进程

1406终端,例如,TTY或控制台

1408模拟终端的进程

1410环境变量

1412访问(读取或写入或两者)环境变量的进程

1414搜索文件系统的至少一部分的进程

1416编译;也指代被用于将源代码转换为可执行形式的编译器、链接器或其他工具

1418调用编译器或以其他方式执行编译的进程,包括任何文件名、编译器选项、预处理指令和用于编译的其他参数,以及链接或其他Makefile或项目构建操作

1420调试扩展程序

1422被执行来帮助调试的进程

1424调用编程语言服务器、与编程语言服务器通信或由编程语言服务器执行的进程

1426图14中未以某种方式标识的任何进程

1500方法,用于将软件开发系统配置为执行开发工具扩展程序,或执行开发工具扩展程序或两者

1502运行渲染器

1504将开发者机和扩展机连接来允许它们之间的通信

1506至少部分地执行开发工具扩展程序

1508使用URI文件ID来标识文件

1510将URI文件映射到标识相同文件的路径文件ID

1512使用路径文件ID来访问文件

1514指定待衍生的进程

1516衍生进程;也指代命令代码来衍生进程

1518对文件内容执行一个或多个软件开发操作

1520安装开发工具扩展程序,例如,将其插入扩展主机

1600流程图

1602关闭、丢失或以某种方式终止网络连接

1604解释用户输入,例如,执行用户命令的输入或对其执行进行调度

1606对用户界面的用户输入

1608缓存数据

1610直接地或间接地(例如,经由代理和主机)与开发工具扩展程序通信

1612网络或其他通信延时

1614获得网络连接

1616网络或机器连接

1618检测到特定网络或特定机器或两者的连接

1620将文件的副本同步

1622从机器上传数据

1624启动扩展主机

1626终止扩展主机

1628提供开发工具扩展程序的透明远程执行

1630使用驻留在云中的扩展主机

1632执行未以某种方式具体编号、但仍在此描述的另一步骤1634创建渲染器进程,即,运行渲染器

1636同步地操作

1638异步地操作

1640与另一陈述的进程或代码段使用相同的文件系统

1642与另一陈述的进程或代码段使用不同的文件系统

操作环境

参考图1,针对实施例的操作环境100包括至少一个计算机系统102。计算机系统102可以是多处理器计算机系统,也可以不是。操作环境可以包括给定的计算机系统中的一个或多个机器,该一个或多个机器可以在云内形成集群、客户端-服务器联网和/或对等联网。单独机器是计算机系统,并且一组协作机器也是计算机系统。给定的计算机系统102可以被配置用于例如具有应用程序的端用户、用于管理员、作为服务器、作为分布式处理节点和/或以其他方式配置。

人类用户104可以通过使用显示器、键盘和其他外围设备106,经由键入的文本、触摸、语音、移动、计算机视觉、手势和/或其他形式的I/O而与计算机系统102交互。屏幕126可以是可移动外围设备106或者可以是系统102的组成部分。用户界面可以支持实施例与一个或多个人类用户之间的交互。用户界面可以包括命令行界面、图形用户界面(GUI)、自然用户界面(NUI)、语音命令界面和/或其他用户界面(UI)呈现,这些界面可以作为不同的选项呈现或者可以被集成。

系统管理员、网络管理员、软件开发人员、工程师和端用户各自是特定类型的用户104,但是可以预期大多数用户可能是作为开发工具的端用户的软件开发者。代表一个或多个人的自动化代理、脚本、回放软件等也可以是用户104,例如以便于测试系统102,但是除非另外明确指出,否则端用户是人(不是进程)。根据存储设备和/或联网设备与处理器110的可分离性,它们在某些实施例中可以被视为外围设备并且在其他实施例中可以被视为系统102的一部分。例如,未在图1中示出的其他计算机系统可以以技术方式与计算机系统102交互,或者通过使用经由网络接口设备到网络108的一个或多个连接而与另一系统实施例交互。

每个计算机系统102包括至少一个处理器110。类似于其他合适的系统,计算机系统102也包括一个或多个计算机可读存储介质112。存储介质112可以是不同的物理类型。存储介质112可以是易失性存储器、非易失性存储器、原地固定介质、可移动介质、磁性介质、光学介质、固态介质和/或其他类型的物理持久性存储介质(不同于单纯的传播信号或单纯的能量)。具体地,当被插入或以其他方式安装时,诸如便携式(即,外部)硬盘驱动装置、CD、DVD、存储棒或其他可移动非易失性存储介质的经配置的存储介质114可以在功能上成为计算机系统的技术部分,从而使得其内容可访问,以与处理器110交互并由处理器110使用。经配置的可移动存储介质114是计算机可读存储介质112的示例。计算机可读存储介质112的其他一些示例包括内置RAM、ROM、硬盘和用户104不容易移除的其他存储器存储设备。为了符合当前的美国专利要求,在美国未决或已授权的任何权利要求项下,计算机可读介质、计算机可读存储介质或计算机可读存储器均不是信号本身或单纯的能量。

存储介质114利用可由处理器110执行的二进制指令116来配置;在本文中广义上使用“可执行”来包括例如机器代码、可解释代码、字节代码和/或在虚拟机上运行的代码。存储介质114还利用数据118来配置,数据118通过执行指令116而被创建、修改、引用和/或以其他方式用于技术效果。指令116和数据118对其所驻留的存储器或其他存储介质114进行配置;当该存储器或其他计算机可读存储介质是给定计算机系统的功能部分时,指令116和数据118也对该计算机系统进行配置。在一些实施例中,数据118的一部分表示真实世界中的事物,诸如,产品特性、库存、物理测量、设置、图像、读数、目标、体积等。这样的数据还通过备份、还原、提交、中止、重新格式化和/或其他技术操作来变换。

尽管实施例可以被描述为由计算设备(例如,通用计算机、服务器或集群)中的一个或多个处理器执行的软件指令,但是这样的描述并不意味着穷尽所有可能的实施例。本领域技术人员将理解,通常也可以直接在硬件逻辑中全部或部分地实现相同或相似的功能来提供相同或相似的技术效果。备选地或除了软件实现方式之外,本文描述的技术功能可以至少部分地由一个或多个硬件逻辑组件来执行。例如并且在不排除其他实现方式的情况下,实施例可以包括硬件逻辑组件110、128,诸如,现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统组件(SOC)、复杂可编程逻辑设备(CPLD)和类似组件。例如,实施例的组件可以基于其输入、输出和/或其技术效果而被分组为交互功能模块。

除了处理器110(例如,CPU、ALU、FPU和/或GPU)、存储器/存储介质112和显示器126之外,操作环境还可以包括其他硬件128,例如诸如,电池、总线、电源、有线和无线网络接口卡。名词“屏幕”和“显示器”在本文中可互换使用。显示器126可以包括一个或多个触摸屏、响应来自笔或平板电脑的输入的屏幕或仅用于输出的屏幕。在一些实施例中,诸如人类用户I/O设备(屏幕、键盘、鼠标、平板电脑、麦克风、扬声器、运动传感器等)的外围设备106将与一个或多个处理器110和存储器可操作地通信。软件过程可以是用户104,但是除非另有明确说明,否则端用户是人。

在一些实施例中,系统包括通过网络108连接的多个计算机。联网接口设备可以使用诸如分组交换网络接口卡、无线收发器或电话网络接口的组件来提供对网络108的访问,这些组件例如可以存在于给定的计算机系统中。但是,实施例还可以通过直接存储器访问、可移动非易失性存储介质或其他信息存储获取和/或传输方法来通信技术数据和/或技术指令。

本领域技术人员将理解,本文在“操作环境”下呈现的前述方面和其他方面可以形成给定实施例的一部分。本文档的标题并非旨在将特征严格分类为实施例和非实施例特征集。

一个或多个项在附图中以轮廓线形式示出,或者在括号内列出,以强调它们不一定是所示操作环境或所有实施例的一部分,而是可以与如本文所述的操作环境或某些实施例中的项进行互操作。在任何附图或任何实施例中,并不必然要求非轮廓线或括号形式的项是必需的。具体地,图1是为了方便而提供;在图1中包括的项并不意味着该项或所描述的该项的用途是在当前创新之前已知的。

关于系统的更多信息

本文提供了示例以帮助图示技术的各方面,但是本文档内给出的示例并未描述所有可能的实施例。实施例不限于本文提供的特定实现方式、布置、显示、特征、方法或场景。给定实施例可以包括例如附加的或不同的技术特征、机制、序列或数据结构,并且可以以其他方式背离本文提供的示例。

具体参考图2、图6和图8,一些系统包括开发者机202、包括与开发者机通信212的扩展机204或者包括两个机器。每个机器202、204可以是物理机,或者可以是通过至少虚拟机管理程序604在底层物理机硬件606上运行的虚拟机602。虚拟机管理程序604可以是直接在硬件606上运行的“裸机”或I型虚拟机管理程序,或者其可以是在主机操作系统上运行的II型虚拟机管理程序,或者直接在硬件606上运行的另一内核。硬件606包括具有一个或多个核心902的至少一个处理器110,以及与具有存储器容量904的(多个)处理器可操作地通信的RAM或其他工作存储器。(多个)物理机或(多个)虚拟机可以各自位于或不位于云906中。

具体参考图2和图3,扩展机204包括存储库208形式的非易失性数字存储装置。开发者机也可以具有其自身的存储库208。存储库208由文件系统302配置,文件系统302包含文件304,文件304包括软件开发文件304。存储库208中文件系统302中的每个文件304具有由文件系统路径306表示的存储和获取位置。

如图4所示,文件304包含内容410。这些内容410通常包括诸如源代码、二进制代码、软件设计文档以及可用于开发软件的其他数据的内容。然而,与本发明人面临相同挑战的技术人员将把他们的注意力集中在技术领域(诸如,从单机到多机实现方式的工具部署迁移)以及工具组件的选择和更改上,以允许他们与共享文件系统并共享进程的操作环境相互分离,直到可以高效、安全地远程执行的实现,以及在这些上下文中的现有二进制文件的持续可用性。

具体参考图2、图4、图5和图7,开发工具系统700包括开发工具400、计算硬件、和文件304的至少一个文件系统302。软件开发领域本身不是适于理解当前创新的领域;它太宽泛了。如图所示,开发工具400包括用户界面部分(此处被称为渲染器206),并且还包括一个或多个被托管的扩展程序210。扩展程序由开发工具400的扩展主机402部分来托管。

如具体由图2和图5所示,开发工具400的组件可以驻留在两个不同的机器中。具有渲染器206的机器被称为开发者机,因为那是开发者104与开发工具400直接交互的地方。(多个)其他机器均被称为扩展机204,因为(多个)扩展程序210在它们之上运行。因此,开发者机202上的文件系统(如果存在这样的文件系统)可以被认为是“本地”文件系统,因为它对于开发者是本地的,而扩展机204上的文件系统可以被认为是“远程”文件系统,因为它远离开发者。

如图4和图5所示,开发工具400可以包括除渲染器、(多个)扩展主机和(多个)扩展程序之外的组件。附加组件可以包括通信代理502、(多个)编程语言服务器406、(多个)调试适配器408和其他代码412。渲染器206和代理502之间的连接可以是网络108连接,并且可以使用一个或多个熟悉的网络通信协议,诸如,TCP/IP、UDP、HTTPS等。与调试适配器408的通信可以利用调试适配器协议。与语言服务器406的通信可以利用语言服务器协议。

如图8所示,特定文件304可以由一个或多个文件标识符802来标识。如图13所示,这些文件标识符中的一个或多个可以在渲染器206或扩展程序210中内部使用,并且可以是机器间通信212的一部分。图8示出了两种文件标识符802:URI文件ID 804和路径文件ID806。

顾名思义,URI文件ID包括统一资源标识符(URI)808。每个URI 808包括诸如URI方案(scheme)810、URI主机名(authority)830和URI路径(path)812的组件。URI主机名830可以在IP套接字(即,具有端口编号816的IP地址814)中体现。备选地,URI主机名830可以在解析为网络套接字820的符号名818中体现。在其他变型中,IP地址或端口可以在URI 808的其他组件810、832中编码。URI路径812包括至少一个目录名称822和文件名824。

路径文件ID 806包括文件系统路径306。文件系统路径306包括卷标识符826、至少一个目录名822和文件名824。

如图10所示,扩展主机402可以在兼容性层1002中运行。例如,在某些实施例中,扩展机主机或整个虚拟机扩展机在Linux的Windows子系统(WSL)中运行。WSL子系统包括兼容性层1002,兼容性层提供Microsoft Windows操作系统120和

如图10所示,扩展程序210、扩展主机402或整个虚拟机扩展机204可以在安全沙箱1102内运行。沙箱提供了隔离的代码执行环境,从该环境中只能出现被严格控制并仔细检查的数据。沙箱1102禁止或严格限制网络108访问、检查扩展机204的能力、从外围设备106读取数据的能力以及其他数据路径。

如图12所示,扩展程序210可以通过API 404而与存储库208通信,并且具体地,API可以与有时被称为数据访问层1202的数据模型层1202直接通信。层1202插入抽象级别。例如,扩展API 404和层1202可以通过对API中的完成项进行操作,而不是对诸如像素或特定调用的较低级项进行操作,以绘画具有像素类型作为参数的像素。

如图13所示,机器间通信212可以包括文件标识符802和标识符1304,标识符1304标识开发操作1302,诸如,打开文件、关闭文件、将文件提交给编译器、启动可执行文件代码、获取有关文件的版本信息或其他元数据等。机器间通信212可以备选地或还包括:标识符1308,标识符1308标识待在扩展机204上衍生的进程1306;以及诸如“衍生进程”或其数字指示符的开发操作标识符1304。通信212还可以使用对应的操作标识符1304来命令进程1306被挂起、分叉、终止或以其他方式进行状态改变。

图14图示了可以被衍生或以其他方式被创建、终止或其他状态改变的进程1306。这些进程1306可以被表征为以下一个或多个:执行脚本1402的进程1404、模拟终端1406(通常是虚拟终端)的进程1408、访问环境变量1410的进程1412、搜索文件系统的进程1414、调用编译1416的进程1418、使用调试扩展1420(例如,以衍生调试器进程或被调试进程)的进程或启动编程语言服务器406的进程1424。扩展机204上的其他进程1426也可以通过开发者机202上的渲染器206来控制。

一些实施例提供或使用适用于在开发工具系统700中使用并且被配置为与开发工具扩展程序(“扩展程序”)210互操作的扩展机204,扩展程序在执行时,对文件内容410执行软件开发操作1302。扩展机包括处理器110以及与处理器可操作地通信的存储器112。该扩展机还包括扩展主机代理(“代理”)502,扩展主机代理在执行时,与处理器一起执行与扩展机外部的开发者机202上驻留的开发工具用户界面渲染器(“渲染器”)206通信。该扩展机还包括扩展主机(“主机”)402,扩展主机被配置为与代理以及与扩展程序以及与存储库208进行可操作的通信。存储库208具有文件系统302,文件系统302包含软件开发文件(“文件”)304。通过相应的统一资源标识符(“URI”)文件ID 804,在扩展机外部的至少一个位置中标识了存储库中的多个文件,并且这些URI文件ID被映射到文件系统路径306,以在扩展程序中用来标识文件,从而获得文件内容410。一些实施例还包括扩展程序210本身。

在一些实施例中,以下部署条件中的至少一个被满足:开发者机是物理机102,并且扩展机是与开发者机不同的物理机102;开发者机是物理机,扩展机是与开发者机不同的物理机,并且扩展机处理器110比开发者机的任何处理器更快;开发者机是物理机,扩展机是与开发者机不同的物理机,并且扩展机比开发者机具有更多的处理器核心902;开发者机是物理机,扩展机是与开发者机不同的物理机,并且扩展机存储器具有比开发者机的任何存储器更多的随机存取存储器容量904;开发者机是虚拟机602,扩展机是与开发者机不同的虚拟机602;开发者机和扩展机均是相应的虚拟机,并且这两个虚拟机均在同一个物理机上运行。

在一些实施例中,以下映射条件中的至少一个被满足:代理502将URI文件ID 804映射到相应文件系统路径306,以由扩展程序使用来标识文件,从而获得文件内容;主机402将URI文件ID 804映射到相应的文件系统路径306,以由扩展程序使用来标识文件,从而获得文件内容。

在一些实施例中,以下URI格式条件中的至少一个被至少一个URI文件ID 804满足,该至少一个URI文件ID 804被映射到由扩展程序使用的文件系统路径306:URI文件ID中的URI 808包括扩展机的IP地址814和扩展机的端口816;URI文件ID中的URI 808包括符号名818,符号名818可解析为扩展机的网络套接字820。

在一些实施例中,扩展程序210在兼容性层1002中运行。兼容性层被配置为提供不同种类的两个操作系统120之间的功能兼容性。

在一些实施例中,扩展机204和开发者机202位于防火墙908的不同相应侧。因此,防火墙被配置为允许机器间通信212通过防火墙,以允许在机器202和204之间进行通信。

在一些实施例中,扩展程序210在安全沙箱1102中运行,并且渲染器206位于沙箱外部。防火墙908可以是安全沙箱1102的一部分,但是安全沙箱1102不仅限于用防火墙阻挡网络流量。安全沙箱1102还禁止访问扩展机204的存储器,例如,禁止访问环境变量1410和操作系统120的数据结构以及可能在扩展机204上运行的任何应用124(如果将开发工具视为应用程序,则除外)。一些安全沙箱1102包括防止数据丢失的软件。

在一些实施例中,以下同步条件中的至少一个被满足:扩展程序210包括被配置为在读取时同步地操作并且在写入时异步地操作的扩展应用程序接口(“API”)404;扩展程序210包括被配置为通过数据模型层1202进行读取和写入的扩展API 404;主机402被配置为独立于渲染器206来执行。在一些实施例中,读取和写入两者均异步操作。

一些实施例提供或使用适合于在开发工具系统700中使用并且被配置为与开发工具扩展程序(“扩展程序”)210互操作的开发者机202,扩展程序在执行时,对文件内容410执行软件开发操作1302。开发者机包括处理器110以及与处理器可操作地通信的存储器112。该开发者机还包括开发工具用户界面渲染器(“渲染器”)206,渲染器在执行时,与处理器一起通过发送和接收机器间通信212而与扩展程序进行通信。这些通信212中的一些标识了软件开发操作1302中的一个或多个。扩展程序210驻留在开发者机外部的扩展机204上。渲染器被配置为使用统一资源标识符(URI)808来标识扩展机204上存储库208中的文件系统302中的文件304。渲染器206还被配置为在一个或多个机器间通信212中指定待在扩展机上衍生的一个或多个开发进程1306,而不是渲染器在开发者机上衍生那些开发进程。

在一些实施例中,渲染器206被配置为在一个或多个机器间通信212中指定待在扩展机上衍生的以下开发进程1306中的一个或多个:在扩展机上执行脚本1402;终端模拟1408;文件系统搜索进程1414;访问扩展机的环境变量的进程1412;将源代码编译为适合在扩展机上执行的二进制形式的进程1418;调试扩展进程1422;编程语言服务器进程1424;一个或多个其他进程1426,例如,静态分析工具。

一些实施例包括开发者机202与扩展机204组合。在这些实施例中的某一些中,扩展机包括与扩展机处理器可操作地通信的扩展机处理器110和扩展机存储器112。该扩展机还包括:扩展主机代理(“代理”)502,扩展主机代理在执行时,利用扩展机处理器来与渲染器通信;以及扩展主机(“主机”)402,扩展主机被配置为与代理502以及扩展程序210和扩展机的存储库208进行可操作的通信。

本文还通过计算硬件的扩展讨论,描述了其他系统实施例,直接或间接地作为所描述的方法或所配置的介质的系统版本。

方法

具体参考图15和图16,一些实施例提供或使用用于执行开发工具扩展程序(“扩展程序”)210来对文件内容410执行软件开发操作1302的方法。一个方法包括运行1502开发者机上的开发工具用户界面渲染器(“渲染器”)、将开发者机连接1504到扩展机来进行机器间通信,以及在扩展机上执行1506扩展程序。在一些情况下,将开发者机连接到扩展机包括获得1614网络连接1616。扩展机具有由包含软件开发文件的文件系统来配置的存储库。该方法还包括使用统一资源标识符文件标识(“URI文件ID”)来标识1508渲染器中的软件开发文件中的至少一个软件开发文件,以及将URI文件ID自动映射1510到软件开发文件的文件系统路径文件标识(“路径文件ID”)。该方法还包括使用路径文件ID来访问1512存储库中的软件开发文件,以及在扩展程序中对被访问的软件开发文件的文件内容进行操作1518。在一些方法中,将URI文件ID映射1510到路径文件ID在渲染器中发生。

在一些实施例中,方法以以下方式中的至少一个来提供1628开发工具扩展的透明远程执行:不论开发者机和扩展机是否共享相同的文件系统或具有单独的相应文件系统,扩展程序对文件内容同样地进行操作1518;不论渲染器和扩展程序是在同一台物理机上还是在单独的相应物理机上运行,扩展程序对文件内容同样地进行操作1518。

在一些实施例中,开发者机和扩展机在连接之后变为断开连接1602。方法还包括当机器未被连接时,渲染器解释1604用户输入1606。

一些方法包括在开发者机202中缓存1608软件开发文件304的至少一部分的副本,软件开发文件304被存储在扩展机204上的存储库中的文件系统中。

在一些实施例中,扩展程序是第一开发工具扩展程序(“第一扩展程序”),并且渲染器通过通信212来与第一扩展程序进行通信,通信212经受第一延时水平1612的影响,并且方法还包括在与运行第一扩展程序的扩展机不同的机器上运行第二开发工具扩展程序(“第二扩展程序”)。渲染器通过通信212来与第二扩展程序进行通信,通信212经受第二延时水平的影响,第二延时水平小于第一延时水平。例如,不标识扩展机文件的通信可以被限制到开发者机,从而允许系统700比它们通过网络到达扩展机时更快地处理它们。更一般地,渲染器206可以同时连接到N个不同的扩展机204,并且每个连接可以具有相应的延时。例如,分布式文件系统可以被映射到N个不同的机器,以获得更好的性能。用户可以在相应的扩展机上采用N个不同的工具扩展程序210,以彼此独立地执行。

如果存在开发者机通过网络连接而被连接到的网络或其他机器,一些实施例响应于检测到1618是哪个网络或哪个其他机器而自动同步1620至少一个软件开发文件的副本。

除非另有说明,否则附图中所示或以其他方式公开的技术方法将通过例如在计算机系统上执行的文本编辑器检测来自动执行。在牵涉到人类管理员或其他人类的动作的范围内,方法也可以例如通过向渲染器输入文件名或命令或两者来部分自动地或部分手动地执行。本文中设想为创新的方法均不是完全手动的。在给定的实施例中,可以重复方法的零个或更多个步骤,也许使用不同的参数或数据进行操作。实施例中的步骤还可以以与图15和图16所示的从上到下的顺序不同的顺序来完成。步骤可以依次、以部分重叠的方式或完全并行地执行。具体地,在方法以各种方式执行的情况下,遍历流程图1500或流程图1600以指示在方法期间执行的步骤的顺序可以变化。流程图的遍历顺序也可以随各种方法实施例而变化。如果所执行的方法是可操作的并且符合至少一项权利要求,则步骤也可以被省略、组合、重命名、重新分组或以其他方式背离所图示的流程。

经配置的存储介质

一些实施例包括经配置的计算机可读存储介质112。存储介质112可以包括盘(磁性、光学或其他)、RAM、EEPROM或其他ROM和/或其他可配置存储器,特别地包括计算机可读存储介质(不是单纯的传播信号)。经配置的存储介质具体可以是可移除存储介质114,诸如,CD、DVD或闪存。在一个实施例中,可以是可移除或不可移除的以及易失性或非易失性的通用存储器可以使用诸如通信212、代理502和URI文件ID 804的各项,以从可移除存储介质114和/或诸如网络连接的另一源读取的数据118和指令116的形式,被配置为形成经配置的存储介质。如本文所公开的,经配置的存储介质112能够使得计算机系统执行技术进程步骤来远程执行如本文所公开的开发工具扩展程序210。附图因此有助于图示经配置的存储介质实施例和过程实施例,以及系统和过程实施例。具体地,图7、图8、图9或图10中所示或本文以其他方式教导的任何过程步骤可以被用于帮助将存储介质配置为形成经配置的存储介质实施例。

以下讨论源自对如何针对被称为

VS Code是在单个机器上使用多进程架构的开发工具122。当在VS Code工具的版本中打开新的图形用户界面窗口时,渲染器进程被创建;为了将其与渲染器206区分开,该渲染器进程在本文中也被称为“RP”。在一些实现方式中,如以下示例进程树所示,渲染器进程RP被标记为“window(hover.ts–vscode)”。渲染器进程RP负责渲染用户界面(UI)、处理用户输入、将文件读取或写入磁盘以及其他交互功能。渲染器进程RP管理的一个功能是文件监视,这导致创建watcherService进程。渲染器进程RP与编程语言无关。相应地,所有编程语言支持均被构建为VS Code扩展程序210。渲染器进程RP衍生扩展主机进程(在某些实现方式中被标记为“extensionHost”),并在该进程内部加载扩展程序。该扩展主机在本文中被称为“EH”,以帮助将其与扩展主机402区分开。如果扩展程序210本身希望衍生附加进程,则它们也可以这样做,例如,tsserver、tslintServer和jsonServerMain是由扩展程序210本身衍生的进程。

用于在VS Code工具中打开TypeScript项目的典型进程树类似于以下内容:

因为所有涉及的进程共享同一文件系统,所以该VS Code多进程单机架构起作用。即,熟悉的VS Code架构类似于图4所示的架构,但有一些变化:扩展主机402被EH替换,并且渲染器206被RP替换。RP和EH之间的通信包括远程过程调用。在图4中由工具122的外部矩形界定的范围可以是任一方法(EH-RP方法或扩展主机402和渲染器206方法)下的机器或容器。

如上所述,在VS Code多进程单机架构中,所有涉及的进程均访问同一文件系统。当在UI中打开文件夹(例如,“C:\Projects\example”)时,该信息被通信到EH并且通过EHAPI而被通信到各个扩展程序210。这就是Java Language Server 406如何知道,例如,哪个项目在UI中打开,因此它不会在整个文件系统中扫描“.java”文件来提供标识符自动完成或其他开发支持功能。

在VS Code多进程单机架构中,EH进程通过假设RP保留有关文件和所衍生的进程的权威信息(authorritative information)而起作用。例如,当打开文件304时,RP从磁盘读取文件。缓冲区的内容410通过EH远程过程调用(RPC)而从RP被发送到EH。当用户104键入RP缓冲区时,RP立即接受按键并继续修改其缓冲区并在屏幕126上绘制其新内容。消息被分发到EH来通知其缓冲区已被修改,但是RP不等待该消息被确认。即使EH无响应或崩溃,也可以连续键入。

在一些实现方式中,扩展程序210被建立在“vscode”API上,“vscode”API进行操作,使得所有读取API同步,并且所有编辑、修改或其他写入API是异步的。因此,例如,缓冲区的整个副本对于EH中的扩展程序210是可用的。至少针对所有读API(例如,从某个位置处的RP缓冲器读取内容行),扩展程序210可以在不与RP进行任何附加通信的情况下执行。写入API异步,因为VS Code工具的该实现方式的真实信息与RP一起存在,并且依赖于RP的确认。例如,扩展程序210在看到某个版本N的缓冲区之后,可能希望编辑文本缓冲区。EH向RP分发消息来要求RP应用编辑。但是,由于EH和RP是单独的进程,因此RP可能同时接受了用户输入。在这种情况下,当处理用户输入时,RP将文本缓冲区版本提高到N+1。当编辑消息从EH到达时,文本缓冲区已被修改。RP识别出该情况,并且编辑被拒绝。该拒绝被通信回到EH。然后,由用户完成的编辑将被发送到EH,以使得其缓冲区版本达到N+1;编辑可以采用增量形式。因此,该VS Code示例中的扩展程序210独立于RP来运行,反之亦然。

现在考虑以下实施例,其中RP被替换为渲染器206,而EH被替换为一个或多个扩展主机402,其中功能在两个机器之间被划分,并且其中渲染器206和至少一个扩展主机402不共享文件系统。该实施例仍然可以提供VS Code工具的版本,但是所述版本是多机版本,相对于以上讨论的RP-EH版本,本文具有所教导的不同或附加功能。具体地,透明远程扩展托管在多机架构中成为可能。

一些实施例的一个方面是,渲染器进程206和扩展主机进程402可以在具有不同的相应文件系统302的不同机器(分别为开发者机202和扩展机204)上执行。例如,这可以通过从头开始对渲染器206和主机402进行编码,或者通过对渲染器进程RP进行修改、对扩展主机EH进行修改并引入扩展主机代理502来完成。无论如何,可以在无需对其进行任何修改的情况下,运行1506完全相同的现有VS Code扩展程序210。扩展程序210通常不知道它们在哪个架构(单机或多机)中执行。

图5图示了根据多机开发工具架构的一些创新实施例。该架构包括在其中运行UI的机器202;机器202被称为“本地机器”或“开发者机”。该架构还包括运行扩展主机的机器204,机器204被称为“远程机器”或“扩展机”。

在实现多机开发工具扩展架构时,对单机RP EH方法进行修改或制作功能相似的新代码的一个原因是,现有扩展程序210假设它们正在处理的文件304在本地可用并且可以使用标准文件系统API 302来访问。本地访问文件的假设被硬编码在扩展程序210二进制文件中。为了能够重用这些现有的扩展程序二进制文件,在创新架构中,扩展主机402和扩展程序210本身在提供文件系统302的机器204上运行。

相比之下,RP渲染器进程使用URI 808来访问资源。因此,一个备选的多机架构将会把远程机器目录结构复制到本地机器,使得渲染器访问该复制的目录结构中的文件,就像RP在单机架构中所完成一样,然后将这些文件系统访问镜像到远程机器的文件系统。相对于图5的架构,该方法将减少对RP的修改来形成渲染器206。

图5图示了针对多机开发工具实现方式的不同方法。代替使用普通文件URI来访问文件资源,渲染器206使用URI文件ID 804(诸如,带有特定vscode-remote URI的文件标识符802)来访问文件304。如本文所述,VS Code代理502允许扩展主机402进行操作,就好像它正在与主机的同一机器204上与本地渲染器通信一样,并且允许渲染器206进行操作,就好像它正在与渲染器的同一机器202上与本地扩展主机进行通信一样。

关于进程衍生,通过修改VS Code RP而创建的一个渲染器206将不再衍生扩展主机进程。相反,它将连接到在另一机器上运行的扩展主机代理502。在该特定实现方式中,该代码路径通过打开具有特定URI权限830(例如,在URI文件ID中)的文件夹来触发:

vscode-remote://10.211.55.6:8000/C%3A/Alex/src/working_dir

在该示例中,“10.211.55.6”是IP地址814,“8000”是端口编号816,“10.211.55.6:8000”是主机名830,“vscode-remote”是方案810和映射触发程序828,“C%3A”是卷标识符826,“Alex”和“src”和“working_dir”是目录名称822,“/C%3A/Alex/src/working_dir”是经URI编码的文件系统路径306,文件系统路径306标识经解码的路径和文件夹C:\Alex\src\working_dir(但是可能看起来在路径结束处不存在文件名,但实际上目录是特殊的文件)。在该示例中,IP地址和URI均不旨在用作真实的超链接,并且无意通过引用而将任何信息并入本公开文档中。映射触发程序828的存在将触发代码路径,渲染器进程206将在该代码路径中,连接1504到URI中指示的IP地址和端口,并且开始与扩展主机代理502进行通信。在一些备选实施例中,包括例如使用诸如WSL的兼容性层的一些实施例,URI可以具有诸如“vscode-remote://127.0.0.1:wsl/…”的形式,或者诸如“vscode-remote://ws:ubunti1804/…”的形式。URI可以在其主机名组件830中或以其他方式对待使用的兼容性层分布的符号名进行编码,或者对待使用WSL或某些其他特定兼容性层技术的指示进行编程。

该架构适用于例如正在开发的项目位于远程文件系统中且该文件系统与本地文件系统断开连接的情况。但是,架构也可以被用于其他场景中,诸如,其中两个文件系统被映射到同一存储设备的场景。例如,当使用

当打开文件304时,渲染器进程206无法直接访问远程文件系统。如果工具尝试在渲染器进程206中使用路径“C:\Alex\src\working_dir”,则将在开发者机上不包含该路径的本地文件系统中查找该路径。因此,一些实施例使用URI和URI映射作为一种使得远程工具扩展执行如所期望的那样起作用的技术。

作为示例,假设项目位于远程机器204中的“C:\Alex\src\working_dir”位置处。然后,该机器上的扩展主机402将调用位置“file:///C%3A/Alex/src/working_dir”,该位置是路径文件ID,而不是URI文件ID。扩展主机402中的VS Code API将使用路径文件ID来引用作为本地文件的该文件,使得所有扩展程序210可以直接读取该文件。但是渲染器进程206将使用作为“vscode-remote://10.211.55.6:8000/C%3A/Alex/src/working_dir”的URI文件ID来引用该文件。该实现方式图示了以下URI映射1510技术:

·位于远程机器文件系统上的文件:

ο在远程机器上使用文件://scheme(方案)

ο在本地机器上使用vscode-remote://scheme

·位于本地机器文件系统上的文件:

ο在本地机器上使用file://scheme

ο在本地机器上使用vscode-local://scheme

如前所述,实施例不限于在该示例中使用的特定标识符“vscode-local”和“vscode-remote”;不同的实现方式可以使用不同的名称作为映射触发程序。映射也可以使用主机名更改来完成。在一些示例中,该映射文件标识符可以在远程扩展主机代码中实现。在某些情况下,针对渲染器206和扩展主机402之间传递的所有消息212,映射被自动处理。因此,当从“vscode-remote://10.211.55.6:8000/C%3A/Alex/src/working_dir/file.txt”打开文件时,所执行的动作序列可以包括以下内容,以反映在代理502中完成的映射1510:

1.渲染器发送消息212,询问“vscode-remote://10.211.55.6:8000/C%3A/Alex/src/working_dir/file.txt”的内容。

2.扩展主机接收对“file:///C%3A/Alex/src/working_dir/file.txt”的内容的对应请求。

3.扩展主机将所请求的内容发送到渲染器。

4.渲染器发送消息212,其声明文件“vscode-remote://10.211.55.6:8000/C%3A/Alex/src/working_dir/file.txt”已打开。

5.扩展主机接收该文件“file:///C%3A/Alex/src/working_dir/file.txt”已打开的通知。

简而言之,在该示例中,渲染器进程206知道“vscode-remote”文件将被专门处理,因此它将向远程扩展主机发送请求来获取文件的内容。一旦渲染器206接收到完整的文件内容,它将分配文本缓冲区。然后,渲染器206将文件永久地(在该实现方式中)引用为“vscode-remote://10.211.55.6:8000/C%3A/Alex/src/working_dir/file.txt”。渲染器进程206向扩展主机进程402发送消息,以使其知道文件“vscode-remote://10.211.55.6:8000/C%3A/Alex/src/working_dir/file.txt”已在用户界面中打开;消息还包含存储器中的缓冲区的内容。URI映射被执行,并且扩展主机进程接收文件“file:///C%3A/Alex/src/working_dir/file.txt”已在UI中打开的消息。作为映射的结果,就扩展程序210而言,渲染器进程206可能已在本地运行并且对于扩展程序210而言,它的行为看起来与RP在本地运行时的行为相同。

总之,在该实现方式中,VS Code扩展代理502使得扩展主机402和远程机器204上正在运行的扩展程序210认为渲染器206和它们一起在本地运行并共享相同的存储资源。对于另一方向也是如此,因为通过VS Code扩展代理502的操作,大多数渲染器进程206认为扩展主机402和扩展程序210正在机器202上本地运行。例外在于,渲染器代码检测并处理映射触发程序828。如其他地方所述,代理502不是可能主要负责映射1510的唯一代码。URI文件ID和路径文件ID之间的映射也可以或替代地在渲染器206代码中完成,或者在其他实现方式中,在扩展主机402代码或多个位置中完成。

扩展程序210所传送的资源文件304可以以类似的方式被处理。例如,扩展程序210可以传送描述了基于编程语言语法在编辑器中如何对源文件着色的语法文件、定义应用于着色的特定颜色的主题文件、图标文件等。该信息可以在渲染器进程206中变得可用,例如通过UI,用户可能能够改变其主题并选择由远程扩展210贡献的方案。在这种情况下,工具400将从远程扩展主机402获取所选择的主题。通过使用URI来引用由扩展程序贡献的所有资源,这样的资源处理可以使用本文所述的相同URI映射技术来实现。类似地,当渲染器206在UI中绘制图标时,可以使用URI“vscode-remote://”来绘制。协议处理程序412可以例如针对Electron或另一软件框架来实现,以拦截对该URI的请求并且将其重定向到远程扩展主机代理502。

一些实现方式可以利用两个扩展主机402来执行渲染器进程206,一个扩展主机在本地运行,而一个远程运行。当启动正在开发的待调试的项目时,从远程扩展主机进程来启动项目。当启动终端或用于调试或其他目的的任务时,通常也可以从远程扩展主机进程来启动它。

当安装程序使用具有相对较高延时的WAN而将机器202和204连接时,运行两个扩展主机(一个本地和一个远程)可能会带来性能优势。UI扩展程序912可以在本地扩展主机上执行(在开发者机上运行),同时其他扩展程序可以在远程扩展主机上执行(可以在广域网中运行,例如,在远程云中的机器中运行)。例如,考虑在VS Code工具中模拟VIM模式的扩展程序210。该扩展程序最终处理所有用户输入,例如,当“j”被按下时,该信息到达VIM扩展程序,并且然后,如果在正常模式下,VIM扩展程序决定将光标向左移动,或者如果在插入模式或追加模式下则插入“j”。工具400可以在本地执行该扩展程序,而其他扩展程序(例如语言支持扩展210)将在远程执行。与在云中的机器中运行它们相比,在本地运行VIM扩展程序或其他UI扩展程序可以显著减少1610延时。类似的考虑可以应用于TypeScript基础扩展程序、素材主题扩展程序、Rainbow扩展程序或其他UI扩展程序912。

在一个变型中,开发工具系统700包括本地Docker容器,远程机器204实际上与开发者机在同一物理机上,并且相应机器的两个文件系统经由卷映射来共享。因此,正在开发的项目对于渲染器进程206和扩展主机进程402都是直接可见的。实现对该变型的支持的一个方法是使用“file://”<->“file://”URI映射。例如,在文件夹开发者机/Users/alex/src/vscode被映射到虚拟机或容器Z:\vscode的情况下,如果使用虚拟机602或容器910,则映射将与以下内容一致:

·在渲染器进程206上,文件将使用其规范(canonical)URI:

file:///Users/alex/src/vscode/folder1/file1.txt

·在虚拟机或容器上,文件将使用映射的URI:

file:///Z%3A/vscode/folder1/file1.txt

·映射1510然后将是:file:///Users/alex/src/vscode/X<->

file:///Z%3A/vscode/X

作为另一变型,一些实现方式包括用于由远程扩展程序贡献的资源的本地机器缓存。每当新的开发工具渲染器窗口被打开时,这提供了从远程机器加载相关联的图标或文件的备选方法。当远程扩展程序被更改或更新时,缓存将失效。

附加观察

在一些示例中,渲染器进程206从不尝试直接访问工作空间资源。它始终遵守与资源相关联的URI,并且委托给远程扩展主机。这包括所有文件系统访问,并且还包括进程的所有启动,例如用于调试、终端、任务、文件搜索以及环境变量的访问。代替文件路径,任何地方可以选择使用URI。URI映射和扩展主机代理的参与使得可以通过对单机方法进行适当的修改来使得远程扩展执行正常工作。

在一些示例中,扩展主机独立于渲染器进程执行。例如,即使与扩展主机的连接中断或终止,渲染器进程也可以解释用户输入(例如,在编辑器中键入)。

在一些示例中,扩展API对于读取是同步的,而对于写入是异步的。在某些示例中,尽可能遵循该架构选择。在某些情况下,始终可以使得扩展API异步来进行读取和写入,但这可能无法提供渲染器进程的状态的一致图片。

在一些示例中,与在扩展机文件系统中改变或创建或删除文件304的操作相反,渲染器206将URI映射到文件系统路径,仅用于渲染目的,即,仅用于实现用户界面的操作。针对开发者机上不可用的UI文件来完成映射。

在一些示例中,扩展程序210与单机部署(即,其中渲染器206、扩展主机402和扩展程序210在单个物理机上一起运行的部署)是二进制兼容的。因此,扩展程序可以未经修改(二进制兼容)远程运行,也可以在本地(单机部署)运行。

在一些示例中,开发者机和扩展机是在同一物理机M上运行的不同虚拟机,机器M具有文件系统FM,而开发者机的文件系统Fdev和扩展机的文件系统Fext均被映射到机器M的相同文件系统FM。

在一些示例中,如本文所教导的被增强以用于远程扩展执行的VS Code软件版本与本地扩展主机一起运行。经由本地扩展主机,一个或多个扩展程序210在与渲染器相同的开发者机中运行。本地扩展主机可以充当扩展程序的沙箱,并且将其与渲染器解耦合。在“远程”模式中,相同的经增强的渲染器206可以连接到远程扩展主机。该渲染器206可以同时与多个扩展主机对话,而不仅是与单个主机对话。因此,在某些配置中,一个扩展主机在扩展主机机器上运行,而另一扩展主机在开发者机上运行。

扩展程序210的子集可以被归类为UI扩展程序912。例如,UI扩展程序912可以通过在状态栏中显示天气或股票价格来仅在UI级扩展VS Code软件的功能。这样的UI扩展程序不需要文件系统访问。使得它们与渲染器206在同一台机器上运行确保了减少延时。

一些实施例还检测1618不同的网络或机器连接1616,并且相应地执行同步1620。例如,假设待开发的项目位于开发者机(例如,笔记本电脑)上。当开发者使用他们的笔记本电脑时,他们可以使用开发工具400来以熟悉的方式做他们的项目。当开发者机停靠在办公室时(例如,开发者将机器插入办公室以太网,或连接到办公室无线LAN),开发工具400将检测到该连接并自动进行以下操作:

·将所有开发者文件从开发者机上传1622到位于办公室中的扩展主机(或上传自上次开发者在办公室中连接以来所做的增量更改);

·终止1626本地运行的扩展主机;

·连接到远程扩展主机,远程扩展主机现在具有项目的文件系统克隆;

·远程扩展主机在该文件系统克隆上运行;

·每当文件在文件系统克隆中被修改时,这些修改就被同步回到开发者机;

·开发者可以在其机器上或扩展主机机器上执行项目来用于测试。

当连接丢失时(例如,开发者离开办公室),开发工具400检测到该丢失,关闭连接(如果尚未被关闭),并且启动1624本地扩展主机。由于文件系统一直都是同步的,因此开发者可以继续在笔记本电脑上工作。在一个变型中,扩展主机机器位于云中(经由WAN),而不是办公室(位于LAN上)中,因此当开发者连接到互联网时,他们可以使用单独的扩展主机机器。当开发者未连接到互联网时,工具将在本地执行所有操作。

一些实施例具有零工具安装特性。远程扩展主机以及期望的扩展程序及其先决条件在本地容器中运行。开发者然后不再需要在本地机器上手动安装工具链,而只需运行容器并且从适当增强的

一些实施例具有Leverage Linux Tool Chains(WSL)特性。远程扩展主机在Linux的Windows子系统(WSL)中运行。开发者通过Windows上运行的VS Code软件进行连接,并且然后连接到WSL内部的远程扩展主机。这使得能够透明地使用

一些实施例具有Leverage Hardware特性。远程扩展主机在比开发者机功能强大的机器(例如,为开发者提供附加CPU和RAM的机器)上运行。

关于扩展程序210,技术人员将确认以下内容。开发工具可通过扩展程序210来扩展,扩展程序210给工具增加附加服务,例如,对特定编程语言的支持。在许多情况下,针对扩展主机中的扩展API来实现扩展程序。本文提供的教导支持远程机器上的软件开发。所开发的源代码只能保存在开发者本地机器之外的远程机器上,以提供安全性,从而防止意外或故意违反源代码的机密性或完整性,并且保护源代码所表示的知识产权。远程扩展执行技术还允许计算密集的扩展程序在更强大的远程机器上运行,并且支持扩展程序的沙盒操作,使得保护本地机器免受恶意扩展程序的侵害。一些实施例隐藏了扩展程序是否与本地机器上的所有内容一起在本地运行,还是替代地,本地机器上的UI和远程机器上运行的其余工具软件远程运行。在一些实施例中,扩展程序作者不必针对本地实现与远程设置来实现不同的扩展程序。一些实施例提供或支持支持两种设置(本地或远程)的扩展程序的丰富生态系统。在某些情况下,即使进行远程开发,用户仍然可以访问所有本地工具。

在一些实施例中使用的构件块包括使得扩展程序能够远程运行的扩展API、将API中的文件引用映射到远程位置以及以其他方式映射到远程位置的代理、以及可以远程托管和运行未经修改的扩展程序的扩展主机。

本文所述的增强功能支持开发工具扩展程序210的透明远程执行。计算密集型扩展程序210可以在开发者机202外部的扩展机204上执行,开发者机202运行开发工具400的用户界面渲染器206。用户界面扩展程序912可以在本地运行。代替共享文件系统302,开发者机上的渲染器以及扩展机上的扩展主机402和扩展程序可以访问不同的相应机器文件系统。代替本地衍生调试扩展进程1422和其他扩展支持进程1306,渲染器可以指示扩展主机或扩展主机代理502在扩展机上远程地衍生进程。不需要对扩展程序210进行更改;现有扩展程序和新创建的扩展程序210与单机或多机开发工具400部署是二进制兼容的。项目文件304保留在有防火墙保护和防止数据丢失的环境中,但是对于远程工作的授权开发者104以及语言服务器406、调试适配器408和工具扩展所执行的操作而言,项目文件304完全可访问。

一些附加的组合和变型

代码、数据结构、逻辑、组件、通信和/或其功能等同物的这些组合中的任一个也可以与上述任何系统及其变型进行组合。过程可以以可操作的任何子集或组合或序列来包括本文描述的任何步骤。每个变型可以单独出现,或者与其他任何一个或多个其他变型组合地出现。每个变型可以与任何过程一起出现,并且每个过程可以与任何一个或多个其他过程进行组合。每个过程或过程的组合(包括变型)可以与上述经配置的存储介质组合和变型中的任一个进行组合。

结论

尽管在本文中明确地将特定实施例图示和描述为过程、经配置的存储介质或系统,但是应当理解,对一个实施例的讨论通常还扩展到其他实施例类型。例如,结合图15和图16对过程的描述也有助于描述经配置的存储介质,并且有助于描述与结合其他附图所讨论的系统和制造类似的系统和制造的技术效果和操作。并非必然地将来自一个实施例的限制引入另一实施例。具体地,过程不必限于讨论诸如经配置的存储器的系统或制造时所呈现的数据结构和布置。

本领域技术人员将理解,实现细节可以与特定代码(诸如,特定API、特定字段和特定示例程序)有关,因此不需要在每个实施例中出现。本领域技术人员还将理解,在讨论细节时使用的程序标识符和一些其他术语是实现方式特定的,并且因此不必涉及每个实施例。尽管如此,尽管此处不一定要求它们存在,但是这样的细节可以通过提供上下文来帮助一些读者和/或可以图示本文所讨论的技术的许多可能实现方式中的一些。

除非本文中明确指出了这种排除,否则本文中对具有一些特征X的实施例的引用以及本文中在其他地方对具有某些特征Y的实施例的引用并不排除同时具有特征X和特征Y的实施例。所有可能的否定权利要求限制都在本公开内容的范围内,在某种意义上,即使在本文任何示例中均未给出具体的排除,也可以将表示为实施例一部分的任何特征明确地从另一实施例中删除。术语“实施例”在本文中仅用作“过程、系统、制品、经配置的计算机可读存储介质和/或以与适用法律一致的方式应用的本文中的教导的其他示例”的更方便形式。因此,只要实施例与至少一个权利要求一致,则给定“实施例”可以包括本文所公开的特征的任何组合。

并非在每个实施例中都存在图中所示的每个项。相反,实施例可以包含未在图中明确示出的一项或多项。尽管此处通过特定示例在文本和附图中图示了一些可能性,但是实施例可以脱离这些示例。例如,示例的特定技术效果或技术特征可以被省略、重命名、不同地分组、重复、以不同的方式在硬件和/或软件中实例化、或者是出现在两个或更多个示例中的效果或特征的混合。在一些实施例中,在一个位置处示出的功能也可以在不同的位置处提供;例如,本领域的技术人员认识到,在不必从被视为整体的交互模块集合中省略所需技术效果的情况下,功能模块可以在给定实现方式中以各种方式来定义。

全文中通过附图标记参考了附图。在附图或文本中,与给定附图标记相关的措词中的任何明显不一致之处应被理解为简单地扩大了该附图标记所参考的范围。即使使用相同的附图标记,给定附图标记的不同实例也可以指代不同的实施例。类似地,给定附图标记可以被用于指代动词、名词和/或每个的对应实例,例如,处理器110可以通过执行指令来处理110指令。

如本文所使用的,诸如“一个”和“所述”的术语包括所指示的项或步骤中的一个或多个。具体地,在权利要求中,对项的引用通常意味着存在至少一个这样的项,而对步骤的引用意味着执行该步骤的至少一个实例。

标题仅是为了方便;关于给定话题的信息可以在标题指示该话题的部分之外找到。

所提交的所有权利要求书和摘要是说明书的一部分。

尽管已在附图中示出并在上文中描述了示例性实施例,但是对于本领域的普通技术人员显而易见的是,在不脱离权利要求中阐述的原理和概念的情况下,可以进行多种修改并且修改不必包含整个抽象概念。尽管以特定于结构特征和/或程序动作的语言描述了主题,但应理解,所附权利要求书中限定的主题不必限于权利要求书中所述的特定技术特征或动作。在给定定义或示例中标识的每个方式或方面或技术效果不必在每个实施例中都存在或被利用。而是,所描述的特定特征以及作用和效果被公开为示例,以在实现权利要求时考虑。

未涵盖整个抽象概念但落在权利要求等同含义和范围之内的所有变化应被包含在法律允许的完整范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号