平码五不中公式规律
  • / 26
  • 下载费用:30 金币  

桥接模块系统和非模块系统.pdf

关 键 ?#21097;?/dt>
模块 系统
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201680001886.9

申请日:

2016.04.28

公开号:

CN106663011A

公开日:

2017.05.10

当前法律状态:

实审

?#34892;?#24615;:

审中

法?#19978;?#24773;: 实质审查的生效IPC(主分类):G06F 9/44申请日:20160428|||公开
IPC分类号: G06F9/44 主分类号: G06F9/44
申请人: 甲骨文国?#20351;?#21496;
发明人: A·R·巴克利; M·B·莱茵霍尔德; J·J·吉博恩斯; A·E·贝特曼; M·L·钟
地址: 美国加利福尼亚
优?#28909;ǎ?/td> 2015.07.24 US 14/808,689; 2015.07.24 US 14/808,590
专利代理机构: 中国国际贸?#29366;?#36827;委员会专利商标事务所 11038 代理人: 邹丹
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201680001886.9

授权公告号:

|||

法律状态公告日:

2018.08.03|||2017.05.10

法律状态类型:

实质审查的生效|||公开

摘要

生成桥接模块,以桥接模块系统中的标准模块与非模块系统中的非模块代码。桥接模块包括与命名空间相关联的显式依赖性,诸如对应于非模块代码的依赖性路径。桥接模块至少向标准模块暴露非模块代码的包。对使用标准模块、桥接模块和非模块代码的代码基执行操作。

权利要求书

1.一种非瞬时性计算机可读介?#21097;?#25152;述非瞬时性计算机可读介质包括指令,所述指令
当被一个或多个硬件处理器执行时,使得以下操作被执行,包括:
识别第一非模块代码,其中第一非模块代码不对应于多个模块中的任?#25105;?#20010;;
生成用于第一非模块代码的第一模块;及
其中生成操作包括:
定义(a)对应于第一模块并且(b)包括基于与非模块代码的一个或多个集合对应的命
名空间的显式依赖性的模块描述符。
2.如权利要求1所述的介?#21097;?#20854;中所述命名空间包括与非模块代码的所述一个或多个
集合对应的依赖性路径。
3.如权利要求1所述的介?#21097;?#20854;中所述操作还包括:
在生成第一模块之前,确定第一非模块代码与所述命名空间相关联,其中定义包括基
于所述命名空间的显式依赖性的模块描述符是响应于确定第一非模块代码与所述命名空
间相关联?#27169;?#25110;者
独立于第一非模块代码的任?#25991;?#23481;或依赖性,确定要包括在模块描述符中的显式依赖
性。
4.如权利要求1所述的介?#21097;?#20854;中,在模块描述符中,显式依赖性显式地参考所述命名
空间或者显式地参?#21363;?#19982;所述命名空间对应的非模块代码的所述一个或多个集合中选择
的第二非模块代码。
5.如权利要求1所述的介?#21097;?#20854;中与所述命名空间对应的非模块代码的所述一个或多
个集合包括不被第一非模块代码使用或要求的第二非模块代码,并且其中,在模块描述符
中,所述命名空间允许第一模块访?#23454;?#20108;非模块代码,即使第二非模块代码不被第一非模
块代码使用或要求。
6.如权利要求1所述的介?#21097;?#20854;中对应于第一模块的模块描述符由系统响应于所述系
统检测到触发事件的发生而定义。
7.如权利要求1所述的介?#21097;?#20854;中所述操作还包括:
确定第一非模块代码不对应于所述多个模块中的任?#25105;?#20010;;及
其中生成用于第一非模块代码的第一模块是响应于至少确定第一非模块代码不对应
于所述多个模块中的任?#25105;?#20010;的。
8.如权利要求1所述的介?#21097;?#20854;中所述操作还包括:
接收以下至少一个:(a)用于执行模块操作的第一命令,该命令包括第一非模块代码作
为参数;(b)包括MODULEPATH关键字的第二命令,该第二命令参考用于第一非模块代码的标
识符作为参数,或者(c)要求第一非模块代码的模块化的第三命令;及
其中生成用于第一非模块代码的第一模块是响应于接收第一命令、第二命令或第三命
令当中的至少一个的。
9.如权利要求1所述的介?#21097;?#20854;中所述多个模块包括(a)在显式地依赖于与非模块代码
的所述一个或多个集合对应的所述命名空间方面受限制的标准模块的第一集合,和(b)在
显式地依赖于与非模块代码的所述一个或多个集合对应的所述命名空间方面不受限制的
桥接模块的第二集合。
10.如权利要求1所述的介?#21097;?#20854;中第一模块是桥接模块,并且其中所述操作还包括:
在生成所述桥接模块之后:利用对所述桥接模块的显式依赖性成功地证实特定的标准
模块;及
其中该特定的标准模块在包括对所述命名空间的显式依赖性方面受限制。
11.如权利要求1所述的介?#21097;?#20854;中所述操作还包括:
基于以下一个或多个来定义包括特定显式依赖性的模块描述符:
所述多个模块中允许由第一模块的显式依赖性的每个模块;
所述多个模块中对执行由标准模块组成的应用所必需的每个模块;
所述多个模块中每个能?#36824;?#23519;到的标准模块;
由开发者列举的每个标准模块;及
除第一模块之外的每个桥接模块。
12.如权利要求1所述的介?#21097;?#20854;中所述操作还包括:
定义模块描述符,以允许第一非模块代码中的每个包被标准模块、任何桥接模块和任
何非模块代码访问。
13.如权利要求1所述的介?#21097;?#20854;中生成用于第一非模块代码的第一模块至少响应于确
定:
确定第一非模块代码不包含任何重复的包;
确定第一非模块代码不依赖于所述多个模块中受限制的模块集合中任?#25105;?#20010;;及
确定第一非模块代码不查?#20197;?#25152;述多个模块中的其它模块中的类或资源。
14.一种系统,包括:
包括硬件处理器的至少一个设备,
该系统被配置为执行如权利要求1-13中任?#25105;?#39033;所述的操作。
15.一种方法,包括:
如权利要求1-13中任?#25105;?#39033;所述的操作;
其中该方法是由包括硬件处理器的至少一个设备执行的。

说明书

桥接模块系统和非模块系统

?#38469;?#39046;域

本公开内容涉及模块系统和非模块系统。具体而言,本公开内容涉及用于桥接模
块系统和非模块系统的?#38469;酢?br />

背景?#38469;?br />

用于开发和维护软件的计算平台一般而言依赖两种类型的系统之一:模块系统和
非模块系统。

非模块系统是指其中不同代码片之间的依赖性未严格声明或限制的系统。行业定
义的术语“JAR hell”是指Java归档(JAR)文件在非模块系统中的示例使用,这导致例如对
于类加载过程的问题。

模块系统包括标准模块的集合并且定义标准模块的集合如?#25105;?#36215;工作。标准模块
的集合中的每个特定标准模块可以显式地定义对其它标准模块(或者其内容)的依赖性。但
是,标准模块通常在显式地依赖任何非模块代码方面受限制。

图1A示出?#21496;?#26377;模块环境102的部件和非模块环境130的部件的系统100。非模块
环境130包括非模块代码132-146。不同的非模块代码之间的依赖性不需要显式地声明。因
而,当第一非模块代码依赖于第二非模块代码时,软件开发环境必须在与所有代码相关联
的文件集?#31995;?#25152;有文件中搜索第二非模块代码。不同的非模块代码之间的依赖性(可能没
有显式声明)在图1A中利用箭头示出。例如,非模块代码132对非模块代码140的依赖性利用
在非模块代码132开始并在非模块代码140结束的箭头示出。此外,非模块代码140对非模块
代码142的依赖性利用在非模块代码140开始并分别在非模块代码142和非模块代码144结
束的两个箭头示出。

模块环境102包括标准模块(例如,标准模块104-112)的集合。诸如模块环境102的
模块环境中不同标准模块之间的依赖性被模块显式声明。显式声明的依赖性在本文可以被
称为“显式依赖性”。模块环境102中不同标准模块(或者其内容)之间的显式依赖性也利用
箭头示出。例如,标准模块104对标准模块108的显式依赖性利用在标准模块104开始并在标
准模块108结束的箭头示出。另外,标准模块108对标准模块110的显式依赖性利用在标准模
块108开始并在标准模块110结束的箭头示出。

如图1A中所示,在模块环境102和非模块环境130之间存在分区。具体而言,标准模
块不能显式地依赖于非模块代码。例如,标准模块110不能显式地依赖于非模块代码132或
非模块代码134。因此,包括标准模块的模块环境不能建立在包括非模块代码的非模块环境
之上。

本节中描述的做法是可以寻求的方法,但不一定是先前已经构想或寻求的做法。
因此,除非另有说明,否则不应当假定在本节中描述的任何做法仅仅由于它们包括在本节
中而被认为是现有?#38469;酢?br />

附图说明

在附图的图示中通过例子而不是限制示出了各种实施例。应当指出的是,在本公
开内容中对“实施例”或“一个实施例”的引用不一定指相同的实施例,并且它?#19988;?#21619;着至少
一个。在附图中:

图1A示出了在模块环境中的标准模块和在非模块环境中的非标准模块;

图1B和1C示出了根据一个或多个实施例的系统;

图2示出了根据一个或多个实施例用于生成桥接模块的操作集合;

图3A-3D示出了根据一个或多个实施例的详细例子;及

图4示出了根据一个或多个实施例的系统。

具体实施方式

在下面的描述中,为?#31169;?#37322;的目?#27169;?#38416;述了众多具体?#38468;冢?#20197;便提供对本公开内容
的透彻理解。一个或多个实施例可以在没有这些具体?#38468;?#30340;情况下实践。在一个实施例中
描述的特征可以与在不同实施例中描述的特征组合。在一些例子中,众所周知的结构和设
备参照框图形式来描述,以避免不必要地模糊本发明。

1.一般概述

2.体系架构概述

3.开发环境例子

4.生成用于桥接模块环境和非模块环境的桥接模块

5.示例实施例

6.杂项;扩展

7.硬件概述

1.一般概述

在实施例中,生成桥接模块,以桥接模块环境中的标准模块和非模块环境中的非
模块代码。来自模块环境的标准模块可以显式依赖于桥接模块,但不能显式依赖于非模块
代码。桥接模块可以依赖于非模块代码。例如,桥接模块可以显式地引用对应于非模块代码
的命名空间。例如,桥接模块可以显式地依赖于对应于非模块代码的依赖性路径。桥接模块
还可以依赖于其它桥接模块以及标准模块。

在实施例中,生成桥接模块包括模块化非模块环境中的非模块代码。非模块代码
的模块化可以响应于一个或多个触发事件而被执行。此外,模块化要求可被用于确定非模
块代码是否可以被模块化。

模块化非模块代码不一定包括对非模块代码本身的任何修改。模块化非模块代码
包括生成对非模块代码的描述,以供其它模块使用。例如,模块化非模块代码包括经由模块
描述符识别并向模块系统暴露非模块代码的包。包是通过桥接模块暴露给其它桥接模块、
标准模块和其它非模块代码的。桥接模块的依赖性在模块描述符中显式地指出,但是,在至
少一个实施例中,不暴露给其它部件。模块化代码还可以包括识别非模块代码的依赖性路
径并?#20197;?#23545;应桥接模块的模块描述符中包括该依赖性路径。

在实施例中,操作是对至少对应于标准模块、桥接模块和非模块代码的组合集合
的非编译或编译代码基执行的。例如,代码基可以被系统编译、验证或执行。

本说明书中描述和/或权利要求中陈述的一个或多个实施例可能没有包括在一般
概述这一节中。

2.体系架构概述

图1B和1C示出了根据一个或多个实施例的系统的例子。其它实施例可以包括比系
统中所示和/或以下描述的更多或更少的设备和更多或更少的部件。被描述为对应于一个
设备的硬件部件、软件部件和/或功能可以代替地对应于另一个设备。单独示出的部件可以
被组合成单个部件或者在单个设备上实现。因而,权利要求的范围不应当被认为受本文的
具体例子限制。

系统101示出了与模块环境102和非模块环境130当中一个或二者相关联的部件。
系统101中的部件可以依赖于系统101中的其它部件(依赖性限制在下面详细描述)。在例子
中,如果第一部件需要由第二部件提供的包或服务,则第一部件依赖于第二部件。

部件之间的依赖性可以或可以不显式指出。如本文所提到?#27169;?#23545;特定部件的显式
依赖性包括其它部件的声明和/或命名空间。命名空间将资源的名称(例如,Java类)?#25104;?#21040;
资源定义(例如,类定义)。在一个例子中,命名空间被实现为依赖性路径。依赖性路径可以
包括实体的?#34892;?#38598;合作为参数。每个实体可以包含并透明地暴露命名资源定义(例如,Java
类定义)的集合。在另一个例子中,命名空间被实现为类加载器。类加载器是实体,包含并透
明地暴露命名资源定义(例如,Java类定义)的集合。本文提到依赖性路径的实施例和例子
可以同等地适用于任何其它命名空间,例如类加载器。

在实施例中,依赖性路径识别可以但并非必须被依赖的非模块代码。依赖性路径
可以在软件开发环境中被存储为环境变量或者存储在文件(例如,清单文件)中。

在实施例中,依赖性路径对应于命名空间。命名空间可以包括对应于非模块代码
的相应集?#31995;?#26631;识符集合。标识符集合可以根据策略排序。在例子中,命名空间识别Java归
档(JAR)文件的集合。

在Java模块系统中,关键词“requires”被用来声明显式依赖性。关键词
“requires”可以和识别另一部件或识别依赖性路径(例如,CLASSPATH)的参数一起使用。对
依赖性路径的显式依赖性允许依赖于与该依赖性路径相关联的参数。在例子中,第一部件
直接地或者经由依赖性路径依赖于第二部件。在图1B中为了示出第一部件依赖于第二部
件,绘出从第一部件到第二部件的箭头。箭头头部指向直接地或者经由依赖性路径被第一
部件依赖的第二部件。

在所示的例子中,模块环境102包括共同定义标准模块的集合如?#25105;?#36215;工作的标
准模块(例如,标准模块104-112)的集合,标准模块的集合如?#25105;?#36215;工作包括但不限于其任
何依赖性。如本文所提到?#27169;?#26631;准模块包括具有禁止直接地或者经由依赖性路径对任何非
模块代码(例如,非模块代码140-146)的显式依赖性的?#38469;?#30340;任何模块。标准模块可以包括
对其它标准模块和/或桥接模块的显式依赖性。此外,标准模块可以间接地依赖于非模块代
码(例如,经由如本文所述的桥接模块)。

在实施例中,桥接模块可以充当标准模块与非模块代码之间的桥。具体而言,桥接
模块是指可以(a)被标准模块依赖并且(b)依赖于非模块代码的模块。桥接模块可以在对应
于非模块代码的依赖性路径上经由显式依赖性依赖于非模块代码。除了依赖于非模块代码
的功能,桥接模块还可以依赖于其它桥接模块和/或标准模块。桥接模块经由模块化向标准
模块、其它桥接模块和其它非模块代码暴露非模块代码的一个或多个包,如以下参照图2描
述的。

在所示的例子中,标准模块108显式地依赖于标准模块110。标准模块110显式地依
赖于桥接模块122和桥接模块124。桥接模块122显式地依赖于对应于非模块代码140的依赖
性路径。此外,桥接模块122显式地依赖于桥接模块124。桥接模块124显式地依赖于对应于
非模块代码146的依赖性路径。此外,桥接模块124显式地依赖于标准模块112。

在至少一个实施例中,具有本文所述的特点和功能的桥接模块的使用可以被限
制。在一个例子中,桥接模块的生成可以被限制到系统或软件开发环境。可以禁止定义标准
模块的开发者定义用于桥接模块的模块描述符。

在实施例中,系统模块化非模块代码,以获得模块化的代码(例如,模块化的代码
133和模块化的代码135)。模块化非模块代码以获得模块化的代码不一定要求对非模块代
码本身的任何修改。模块化非模块代码以获得模块化的代码包括基于非模块代码的内容生
成数据。与模块化的代码相关联的数据在命名与模块化的代码相关联的桥接模块的模块描
述符中指示。模块描述符被用于暴露(例如,通过导出)模块化的代码的包,用于由其它模块
或非模块代码访问。此外,桥接模块的模块描述符可以包括对对应于非模块代码的依赖性
路径的显式依赖性,而不暴露非模块代码。作为替代,模块描述符可以暴露非模块代码。用
于非模块代码的模块化的详细示例操作集?#26174;?#19979;面参照图2进行描述。

再次参考所示出的例子,图1B包括是模块化在图1A中识别出的非模块代码132和
非模块代码134的结果的系统101。在非模块代码132和非模块代码134的模块化之前,诸如
模块环境102的任何模块环境中的标准模块没有一个可以获得对非模块代码132-146的功
能的直接或间接访问。具体而言,标准模块104-112不能显式地依赖于非模块代码132-146
当中任?#25105;?#20010;。在这个例子中,如图1A中所示,非模块代码132和非模块代码134被模块化,
以分别获得如图1B中所示的模块化的代码133和模块化的代码135。

非模块代码132和非模块代码134的模块化不一定要求分别对非模块代码132和非
模块代码134的任何修改。模块化非模块代码132以获得模块化的代码133包括对非模块代
码132中的包的识别。非模块代码132的模块化还包括对非模块代码132(例如,对依赖性路
径和/或对其它非模块)的依赖性的识别。桥接模块122向标准模块、其它桥接模块和其它非
模块代码暴露模块化的代码133(之前被称为非模块代码132)的包。作为例子,桥接模块122
允许标准模块110访问模块化的代码133的包。但是,桥接模块122不必向其它模块暴露模块
化的代码133的显式依赖性。例如,虽然桥接模块122的模块描述符包括对对应于非模块代
码140的依赖性路径的显式依赖性,但是桥接模块122不向任何其它模块暴露非模块代码
140。因而,可以访问模块化的代码133的包的标准模块110不能显式地依赖于非模块代码
140。替代实现可以包括向其它模块暴露非模块代码的桥接模块。在以上例子的变体中,桥
接模块122向标准模块110暴露非模块代码140。桥接模块可以使用“requires public”关键
词来依赖并向标准模块110暴露非模块代码140。

在例子中,桥接模块被用于向标准模块暴露非模块代码。具体而言,桥接模块向标
准模块暴露被模块化的非模块代码。此外,桥接模块可以暴露模块化的代码所依赖的其它
非模块代码的全部或子集。

在实施例中,非模块代码可以依赖于由桥接模块或者由标准模块暴露的包。在例
子中,非模块代码146依赖于由标准模块112暴露的包,例如,在Java模块系统中经由
“exports”命令。此外,非模块代码146可以访问由桥接模块122暴露的模块化的代码133的
包(访问在图1B的例子中未示出)。

在实施例中,桥接模块可以无需任何标准模块地实现。如图1C中所示,系统102包
括桥接模块122和124。系统102还包括非模块代码140、142、144和146。但是,系统102不包括
任何标准模块。充当用于执行的入口点的主要方法或主要应用可以在模块化的代码133或
模块化的代码135中实现。无标准模块的系统(例如,图1C中所示的系统102)可以是(a)永久
性配置或(b)瞬时性配置,直到系统被修改为包括标准模块(例如,图1B中所示的系统101)。

3.开发环境例子

本文描述的实施例适用于任何开发环?#24120;?#29992;于开发、调试或更新软件。为?#31169;?#37322;,
具体例?#30828;?#29031;利用Java开发工具箱(JDK)执行的操作。除JDK之外的其它开发环境可以与
JDK而不是其他的开发环境共享一些功能构造,并且JDK的大多数功能构造都不是实现本文
要求保护或描述的实施例所需的。即使其它语言使用不同的名称来指相同或高度相似的功
能构造,普通?#38469;?#20154;?#24065;?#23558;理解这些相同或高度相似的功能构造可以如何代替对应的JDK
构造而结合本文要求保护或描述的实施例来使用。以下描述JDK的某些特征。但是,一个或
多个实施例包括未在下面描述的附加特征和/或省略下面描述的特征。

Java程序管理两种类型的信息:原始数据和对象。原始数据包括公共的基本值,诸
如数字和?#22336;?#23545;象通常表示更专用或复杂的东西,诸如银行帐号。对象由类(class)定义。
类包含方法,方法一般表示可以对从那个类创建的对象执行的操作。

相关的类可以分组成包(package)。包的一个例子是包括用于与数据库交互的类
的java.sql包(SQL代表结构化查询语言)。包的另一个例子是包括提供对绘图和创建GUI的
支持的类的java.awt包(AWT代表抽象窗口化工具箱)。包可以暴露一些类(例如,对开发者
非常重要的类),而隐藏与实现?#38468;?#30456;关的其它类(例如,不可能被开发者引用的类)。暴露
的类的集合被称为应用编程接口(API)。例如,java.awt包包括Java抽象窗口化工具箱API。
在另一个例子中,java.sql包包括Java数据库连接API。

包的集合可以被称为类库。类库支持程序的开发和执行。编译器和类库常常打包
到一起;类库也可以通过第三方供应商单独获得。

为了开发Java程序,要求编译器将Java源代码编译成Java类文件。Java源代码可
以由开发者预定义(例如,在类库中)或定义。开发者可以利用任何工具生成Java源代码,该
工具包括但不限于文本编辑器或完全成熟的集成开发环境(IDE)。编译器将所有Java源代
码,?#36824;?#26159;预定义的还是开发者定义?#27169;?#37117;编译成Java类文件。包括在JDK中的javac编译器
是用于将源代码编译成Java类文件的编译器的一个例子。

Java类文件(即,*class文件)包含以高效、可移植和体系架构中立的格式表示原
始源代码的?#32440;?#20195;码。?#32440;?#20195;码由Java虚拟机(JVM)的实现执行。包括在JDK中的Hostpot是
JVM实现的例子。JVM实现可以通过解?#22270;际?#25191;行?#32440;?#20195;码,这包括一次执行一个?#32440;?#20195;码
“语句”。JVM实现可以通过编译?#38469;?#25191;行?#32440;?#20195;码,这包括在运行时将?#32440;?#20195;码转换成机器
代码。在编译?#38469;?#20013;,对于?#32440;?#20195;码要在其上被执行的每种类型的处理器,需要用于将?#32440;?br />代码转换成机器代码的不同转换器。

在执行Java类文件之前,JVM实现验证Java类文件中的所有?#32440;?#20195;码。该验证确
保:(a)分支引用?#34892;?#20301;置和(b)数据被初始化并且引用是类型安全的。验证过程的步骤(a)
和(b)可以在利用类加载器加载类时执行。

类加载器是负责首先定位类的二进制表示、然后将该二进制表示传递到JVM以便
在存储器中创建类的对象。定位之后跟着创建的过程被称为“类加载”。类加载可以在JVM执
行一个类中的代码并解析那个代码对其它类的引用时被JVM触发。JVM可以根据需要通过程
序触发对类的类加载,而不是一次将所有类都加载到存储器中。类加载还可以由Java程序
触发,因为类加载器是普通对象,该普通对象的类(java.lang.ClassLoader或子类)向定位
和创建类暴露方法。

Java运行时通常与三个或更多个类加载器相关联。一个类加载器是用于加载信任
类的“引导程序”类加载器(也被称为“原始类加载器”)。另一个类加载器是“扩展”类加载
器,其将类加载委?#26800;?#24341;导程序类加载器或者从指定的目录加载。扩展类加载器将通常加
载“非核心”和/或不太信任的类。另一个类加载器是用于加载开发者定义的类的“应用”类
加载器。应用类加载器从命名空间加载类。命名空间可以参考CLASSPATH。本文所述的各种
实施例参考CLASSPATH的使用。如果Java程序创建其自己的类加载器,则在那个类加载器尝
试定位和创建类之前,那个类加载器通常“委托”?#25509;隞ava运行时相关联的类加载器。

4.生成用于桥接模块环境和非模块环境的桥接模块

图2示出了根据一个或多个实施例用于生成桥接模块环境和非模块环境的桥接模
块的操作集合。桥接模块可以为非模块代码集合中的任何非模块代码生成,而?#36824;?#35813;非模
块代码位于依赖性路径中?#26410;Α?#22312;例子中,第一非模块代码经由依赖性路径依赖于第二非
模块代码。第一非模块代码和第二非模块代码当中?#25105;?#19968;个可以在第一非模块代码和第二
非模块代码当中另一个的模块化之前被模块化或者不需要另一个非模块代码的模块化。

图2中所示的一个或多个操作可以被修改、重新布置或者完全被省略。因而,图2中
所示的操作的特定序列不应当被认为限制一个或多个实施例的范围。

最初,检测用于模块化非模块代码的触发事件(操作202)。在实施例中,触发事件
是显式地请求非模块代码的模块化或者隐含地要求非模块代码的模块化的命令或操作。如
果命令要求非模块代码的模块化版本,则可以要求非模块代码的模块化。在例子中,将执行
利用关键字“MODULEPATH”的与模块相关的命令。与模块相关的命令可以是编译、证实或执
行特定代码基的命令。当命令被执行时,对应于非模块代码的标识符foo-bar.jar被识别为
与关键字“MODULEPATH”相关联的参数。foo-bar.jar的分析指示不存在识别对应于foo-
bar.jar的模块的模块描述符。由于缺乏模块描述符,foo-bar.jar被确定为非模块代码。但
是,MODULEPATH要求foo-bar.jar的模块化的版本,即,具有模块描述符的foo-bar.jar。由
于MODULEPATH要求foo-bar.jar的模块化的版本,因此触发foo-bar.jar的模块化。

在另一个例子中,触发事件包括从开发者接收模块化第一非模块代码的显式命
令。该命令可以根据开发者在系统内移动或复制文件来确定。系统被配置为使得,当任何非
模块代码被移动或复制(例如,利用图形用户界面或命令行接口)到特定的文件或目录中
时,系统触发那个非模块代码的模块化。

在检测?#25509;?#20110;模块化非模块代码的触发器之后,确定该非模块代码是否满足模块
化的要求(操作204)。如果非模块代码不满足模块化的要求,则确定第一非模块代码不能被
模块化(操作206)。

不同的系统可以实?#32440;?#38750;模块代码模块化成模块化的代码的不同要求。模块化非
模块代码的要求可以包括例如以下中的一个或多个:

(a)要被模块化的非模块代码不能包含任何重复的包

(b)要被模块化的非模块代码不能依赖于受限制的模块代码的特定集合中的任何
一个(例如,Java开发工具箱内部的API)

(c)要被模块化的非模块代码不能执行反应性操作,诸如查找其它模块中的类或
资源

在一个例子中,被特定代码基依赖的非模块代码的两个不同集合被确定为暴露相
同的包。响应于确定非模块代码的两个不同集合暴露相同的包,非模块代码的这两个不同
集合不被模块化。

一旦确定要模块化非模块代码,就为该非模块代码生成桥接模块。桥接模块是至
少部分地通过为该非模块代码定义命名桥接模块的模块描述符来生成的(操作208)。如果
模块描述符是系统定义?#27169;?#21017;任何确定性命名惯例都可被用于为桥接模块选择名称。在一
个例子中,名称根据对应于被模块化的非模块代码的文件名变化而变化。

一旦已经为非模块代码定义了模块描述符,该非模块代码就可以被称为模块化的
代码。因而,模块化非模块代码以获得模块化的代码不必包括对非模块代码本身的任何修
改。

如本文所提到?#27169;?#27169;块描述符包括对应于关于模块化的代码的信息的声明。声明
涉及模块化的代码的使用和功能。各种声明的例子在下面提供,这些不应当被认为是以任
何方式限制权利要求的范围。

在一个实施例中,模块描述符声明对应桥接模块对依赖性路径的显式依赖性(操
作208a)。在第一个例子中,非模块代码与依赖性路径相关联。具体而言,非模块代码依赖于
在依赖性路径中识别出的其它非模块代码。响应于确定非模块代码与依赖性路径相关联,
模块描述符声明桥接模块对该依赖性路径的显式依赖性。在第二个例子中,由模块描述符
声明的依赖性路径是独立于非模块代码确定的。依赖性路径可以是用于桥接模块的缺省的
和/或系统定义的依赖性路径。在第三个例子中,由桥接模块声明的依赖性路径基于非模块
代码的依赖性(上面第一个例子)和独立于非模块代码的系统定义的依赖性(上面第二个例
子)的组合。在第四个例子中,被模块化的非模块代码依赖于非模块代码的两个或更多个集
合。模块描述符包括对非模块代码的两个或更多个集?#31995;?#31532;一非模块代码的显式依赖性
和/或暴露该第一非模块代码。模块描述符不包括对非模块代码的两个或更多个集?#31995;?#31532;
二非模块代码的显式依赖性和/或不暴露该第二非模块代码。在另一个例子中,非模块代码
依赖于不被特定平台正式支持的另一非模块代码或另一模块。桥接模块不暴露不被特定平
台正式支持的非模块代码或另一模块。在另一个例子中,模块描述符包括对与被模块化的
非模块代码不使用或要求的非模块代码的至少一个集合对应的依赖性路径的显式依赖性。

模块描述符可以显式地依赖于依赖性路径本身,而不需要参考或识别依赖性路径
的参数。模块描述符可以被定义,甚至都不需要检查或识别依赖性路径的参数。模块描述符
中所包括的依赖性路径可以指被模块化的非模块代码既不使用也不要求的文件(例如,JAR
文件)。

模块描述符中所包括的显式依赖性可以或者可以不暴露给系统内的其它模块。在
与Java模块系统相关的例子中,“requires#CLASSPATH”可被用来声明对在CLASSPATH中识
别出的参数的依赖,而不向其它模块暴露该参数。作为替代,“requires public#
CLASSPATH”可被用来声明对在CLASSPATH中识别出的参数的依赖并且将该参数暴露给其它
模块。

在另一个例子中,非模块代码的依赖性可以被递归地确定。非模块代码被分析,以
确定非模块代码(直接地或者经由依赖性路径)依赖的第一层次结构层。然后,代码的第一
层次结构层被分析,以确定代码的第一层次结构层所依赖的代码的第二层次结构层。该过
程递归地重复,直到到达不依赖于任何其它层的基础层。然后,递归确定的依赖性的集合可
以作为显式依赖性被包括在模块描述符中。

在实施例中,执行检查,以确保依赖性路径的内容在(a)当桥接模块为包括依赖性
路径的非模块代码创建的初始时间和(b)当依赖性路径被访问的稍后时间(在初始时间之
后)之间不被修改。具体而言,依赖性路径的内容可以在创建桥接模块时被识别和存储。在
稍后的时间,当依赖性路径被访问时,当前内容与存储的内容进行比较。对依赖性路径的内
容的任何改变都可以触发报警。

在一个实施例中,模块描述符声明桥接模块对所有其它桥接模块的显式依赖性
(操作208b)。在例子中,系统维护已经创建的所有桥接模块的列表。当新的桥接模块通过定
义用于非模块代码的模块描述符而被创建时,该新的桥接模块显式依赖于桥接模块的列表
中所包括的每个桥接模块。对其它桥接模块的显式依赖性被定义为使得其它桥接模块被暴
露给其它模块或非模块代码。在Java模块系统的例子中,“requires public”被用于对其它
桥接模块的显式依赖并且向其它模块或非模块代码暴露其它桥接模块。

在一个例子中,所有桥接模块都被配置为显式地依赖于并暴露所有其它桥接模
块。当在这种配置中标准模块显式地依赖于桥接模块之一时,所有桥接模块都被暴露给该
标准模块。具体而言,由所有桥接模块暴露的所有包都被暴露给该标准模块。

在实施例中,模块描述符声明对每个能?#36824;?#23519;到的标准模块、对允许显式依赖性
的每个标准模块和/或对由运行时环境确定为执行由标准模块组成的应用所必需的每个标
准模块的显式依赖性(操作208c)。在例子中,标准模块暴露可以被其它标准模块、桥接模块
和/或非模块代码依赖的包。桥接模块的模块描述符可以声明对暴露包的标准模块的显式
依赖性。在另一个例子中,标准模块M具有使用户能够将标准模块M作为应用来运行的入口
点。标准模块M要求标准模块N和非模块代码B、JAR文件。此外,标准模块N要求标准模块O。
JAR文件被包括在MODULEPATH上,并且因此,运行时环境从JAR文件生成桥接模块B。桥接模
块B被设置为要求标准模块M、N和O。如果附加的标准模块P是能?#36824;?#23519;到?#27169;?#20294;不被标准模
块M、N或O当中任?#25105;?#20010;要求,则桥接模块B不被设置为要求标准模块P。

在实施例中,模块描述符声明被桥接模块暴露的包(操作208d)。在例子中,系统遍
历被模块化的非模块代码的内容。该遍历识别所有可用的包。然后,利用识别这些包的声
明,使得这些包可用于被其它部件依赖。

在实施例中,模块描述符声明用于启动应用的执行的入口点(操作208e)。在例子
中,文件的集合包括作为用于启动应用的执行的入口点的特定文件。该特定文件可以包括
对应于在文件集合中定义的操作集合内的初级操作集?#31995;摹?#20027;要”方法或其它初级方法。

在实施例中,如以上参照操作208所描述?#27169;?#23450;义用于非模块代码的模块描述符导
致对应于桥接模块的模块化的代码。桥接模块的模块描述符描述与模块化的代码相关联的
声明。

在实施例中,标准模块、桥接模块和非模块代码的组合形成代码基。使用代码基涉
及并发地使用标准模块、桥接模块和非模块代码(操作210)。在例子中,代码基可以被编译、
证实和/或执行。标准模块可以部分地基于利用非模块代码执行的操作来产生结果。

在实施例中,对应于桥接模块的模块化的代码可以完全地被分析,以确定在模块
化的代码外部的被模块化的代码使用和/或要求的实际代码。确定实际代码可以涉及基于
代码依赖性?#35789;?#21035;代码的完整层次结构的递归的操作集合。桥接模块对依赖性路径的显式
依赖性可以被仅对被使用和/或要求的实际代码的显式依赖性代替。

5.示例实施例

在实施例中,操作包括:识别第一非模块代码,其中第一非模块代码不对应于多个
模块中任?#25105;?#20010;;生成用于第一非模块代码的第一模块;并且其中生成操作包括:定义(a)
对应于第一模块并且(b)包括基于与非模块代码的一个或多个集合对应的命名空间的显式
依赖性的模块描述符。命名空间可以包括与非模块代码的该一个或多个集合对应的依赖性
路径。操作还可以包括:在生成第一模块之前,确定第一非模块代码与命名空间相关联;并
且其中定义包括基于命名空间的显式依赖性的模块描述符是响应于确定第一非模块代码
与该命名空间相关联的。操作还可以包括:独立于第一非模块代码的任?#25991;?#23481;或依赖性,确
定要包括在模块描述符中的显式依赖性。在模块描述符中,显式依赖性可以显式地参考命
名空间,而不显式地参考与该命名空间对应的非模块代码的该一个或多个集合。模块描述
符中的显式依赖性可以显式地参?#21363;?#19982;该命名空间对应的非模块代码的该一个或多个集
合中选择的第二非模块代码。与该命名空间对应的非模块代码的该一个或多个集合可以包
括不被第一非模块代码使用或要求的第二非模块代码,并且其中,在模块描述符中,命名空
间允许第一模块访?#23454;?#20108;非模块代码,即使第二非模块代码不被第一非模块代码使用或要
求。如以上提到的第一模块可以是如本文所述的桥接模块。对应于第一模块的模块描述符
可以由系统响应于系统检测到触发事件的发生而定义。操作还可以包括:接收要求第一非
模块代码的模块化的命令;并且其中生成用于第一非模块代码的第一模块是响应于接收到
该命令的。操作还可以包括:确定第一非模块代码不对应于该多个模块中的任?#25105;?#20010;;并且
其中生成用于第一非模块代码的第一模块是响应于至少确定第一非模块代码不对应于该
多个模块中的任?#25105;?#20010;的。操作还可以包括:接收用于执行模块操作的命令,该命令包括第
一非模块代码作为参数;并且其中生成用于第一非模块代码的第一模块是响应于接收到该
命令。操作还可以包括:接收包括MODULEPATH关键字的命令,其参考用于第一非模块代码的
标识符作为参数;并且其中生成用于第一非模块代码的第一模块是响应于接收到该命令
的。该多个模块可以包括(a)在显式地依赖于与非模块代码的该一个或多个集合对应的命
名空间方面受限制的标准模块的第一集合,和(b)在显式地依赖于与非模块代码的该一个
或多个集合对应的命名空间方面不受限制的桥接模块的第二集合。当第一模块是桥接模块
时,操作还可以包括:在生成桥之后:利用对桥接模块的显式依赖性成功地证实特定的标准
模块;并且其中该特定的标准模块在包括对命名空间的显式依赖性方面受限制。操作还可
以包括:基于以下中的一个或多个来定义包括特定显式依赖性的模块描述符:该多个模块
中允许由第一模块的显式依赖性的每个模块;该多个模块中对执行由标准模块组成的应用
所必需的每个模块;该多个模块中每个能?#36824;?#23519;到的标准模块;由开发者列举的每个标准
模块;以及除第一模块之外的每个桥接模块。操作还可以包括:定义模块描述符,以允许第
一非模块代码中的每个包被标准模块、任何桥接模块和任何非模块代码访问。生成用于第
一非模块代码的第一模块可以至少响应于确定:确定第一非模块代码不包含任何重复的
包;确定第一非模块代码不依赖于该多个模块中受限制的模块集合中的任?#25105;?#20010;;以及确
定第一非模块代码不查?#20197;?#35813;多个模块中的其它模块中的类或资源。

在实施例中,操作包括:对与该多个模块对应的代码基执行操作,该代码基包括:
在包括基于与非模块代码的一个或多个集合对应的命名空间的显式依赖性方面不受限制
的第一模块集合;以及在包括基于与非模块代码的该一个或多个集合对应的命名空间的显
式依赖性方面受限制的第二模块集合;并且其中第二模块集?#31995;?#20013;的至少一个显式地依赖
于第一模块集?#31995;?#20013;的至少一个。第一模块集合可以由一个或多个桥接模块组成。第二模
块集合可以由一个或多个标准模块组成。命名空间可以包括依赖性路径。命名空间可以包
括与非模块代码的该一个或多个集合对应的依赖性路径。第一模块集合中的特定模块可以
包括模块描述符,其中该模块描述符包括基于与非模块代码的该一个或多个集合对应的命
名空间的显式依赖性。

为了清晰,图3A-3D示出了详细的例子。以下描述的部件和/或操作应当被理解为
可能不适用于某些实施例的具体例子。因而,以下描述的部件和/或操作不应当被认为限制
任何权利要求的范围。此外,?#32654;硬?#38480;于给出信息的完整集合。例如,以下仅描述与模块
或模块描述符相关联的内容的子集。

在实施例中,图3A示出了非模块系统,其部件被迁移到模块系统。具体而言,非模
块系统中的非模块代码被模块化,以生成桥接模块。

代码描述304描述四个文件A.jar 320、B.jar 310、C.jar 330和D.jar 340的特
点。A.jar包括类a.AA,B.jar包括类b.BB,C.jar包括类c.CC,并且D.jar包括类d.DD。类a.AA
创建b.BB和c.CC的实例,并且相应地依赖于b.BB和c.CC。类c.CC扩展d.DD,并且相应地依赖
于d.DD。软件开发环境根据各种文件的需要搜索并加载类。

在初始操作状态T0中,被识别为依赖性路径350的环境变量CLASSPATH包括A.jar、
B.jar、C.jar、D.jar。当操作(例如,编译、证实或执行)被执行时,软件开发环境利用
CLASSPATH?#39029;?#25152;有文件。

在时间T1,示出在D.jar 340的模块化之后的操作状态。D.jar 340的模块化通过
将D.jar 340添加到MODULEPATH被触发,如在列表355中示出的。D.jar 340的模块化导?#38706;?br />义基于文件名“D.jar”命名桥接模块D 342的模块描述符。用于桥接模块342的模块描述符
还导出d.DD。当对A.jar和C.jar需要时,基于由桥接模块D 342的导出,软件开发环境现在
?#39029;鰀.DD。对于让软件开发环境经由桥接模块D 342的导出函数而不是CLASSPATH?#39029;?br />d.DD,不需要对A.jar 320和C.jar 330的修改。D.jar 340不能利用CLASSPATH被?#39029;觶?#22240;为
D.jar 340已经从CLASSPATH中被移除了。

在时间T2,示出在A.jar 320的模块化之后的操作状态。A.jar 320的模块化通过
将A.jar 320添加到MODULEPATH被触发,如在列表355中示出的。A.jar 320的模块化导?#38706;?br />义基于文件名“A.jar”命名桥接模块A 322的模块描述符并?#19968;?#23548;出a.AA。如果和在需要
时,软件开发环境可以基于由桥接模块A 322的导出而?#39029;鯽.AA。A.jar 320不能利用
CLASSPATH被?#39029;觶?#22240;为A.jar 320已经从CLASSPATH中被移除了。

在时间T3,示出在添加标准模块360和标准模块370之后的操作状态。标准模块360
显式地依赖于桥接模块A 322。当对标准模块360需要时,软件开发环境使用标准模块360的
“requires”声明和桥接模块A 322的“exports”声明?#35789;?#21035;A.jar 320。标准模块370显式地
依赖于桥接模块342。当对标准模块370需要时,软件开发环境使用标准模块370的
“requires”声明和桥接模块D 342的“exports”声明?#35789;?#21035;D.jar 340。桥接模块(桥接模块
A 322和桥接模块D 342)向标准模块导出非模块代码(A.jar 320和D.jar 340)。此外,桥接
模块允许标准模块利用未被暴露给标准模块的非模块代码间接地完成操作。具体而言,桥
接模块A 322允许标准模块360访问A.jar 320。A.jar 320可以使用B.jar 310和C.jar 330
来执行操作,用于获得可以被传递到标准模块360和370的结果。

6.杂项;扩展

实施例针对具有一个或多个设备的系统,其中设备包括硬件处理器并?#20918;?#37197;置为
执行本文所述和/或在以下?#25105;?#26435;利要求中陈述的任何操作。

在实施例中,非瞬时性计算机可读存储介质包括指令,所述指令当被一个或多个
硬件处理器执行时,使得本文所述和/或在以下?#25105;?#26435;利要求中陈述的任何操作被执行。

在实施例中,操作包括识别第一非模块代码,其中第一非模块代码不对应于多个
模块中任?#25105;?#20010;;生成用于第一非模块代码的第一模块;并且其中生成操作包括:定义(a)
对应于第一模块并且(b)包括基于与非模块代码的一个或多个集合对应的命名空间的显式
依赖性的模块描述符。在实施例中,命名空间包括与非模块代码的所述一个或多个集合对
应的依赖性路径。在实施例中,操作还包括:在生成第一模块之前,确定第一非模块代码与
命名空间相关联;并且其中定义包括基于命名空间的显式依赖性的模块描述符是响应于确
定第一非模块代码与该命名空间相关联的。在实施例中,操作还包括:独立于第一非模块代
码的任?#25991;?#23481;或依赖性,确定要包括在模块描述符中的显式依赖性。在实施例中,模块描述
符中的显式依赖性显式地参考命名空间,而不显式地参考与该命名空间对应的非模块代码
的该一个或多个集合。在实施例中,在模块描述符中,显式依赖性显式地参?#21363;?#19982;该命名空
间对应的非模块代码的该一个或多个集合中选择的第二非模块代码。在实施例中,与该命
名空间对应的非模块代码的该一个或多个集合包括不被第一非模块代码使用或要求的第
二非模块代码,并且其中,在模块描述符中,命名空间允许第一模块访?#23454;?#20108;非模块代码,
即使第二非模块代码不被第一非模块代码使用或要求。在实施例中,第一模块是桥接模块。
在实施例中,对应于第一模块的模块描述符由系统响应于系统检测到触发事件的发生而定
义。在实施例中,操作还包括:接收要求第一非模块代码的模块化的命令;并且其中生成用
于第一非模块代码的第一模块是响应于接收该命令的。在实施例中,操作还包括:确定第一
非模块代码不对应于该多个模块中任?#25105;?#20010;;并且其中生成用于第一非模块代码的第一模
块是响应于至少确定第一非模块代码不对应于该多个模块中的任?#25105;?#20010;的。在实施例中,
操作还包括:接收用于执行模块操作的命令,该命令包括第一非模块代码作为参数;并且其
中生成用于第一非模块代码的第一模块是响应于接收该命令的。在实施例中,操作还包括:
接收包括MODULEPATH关键字的命令,其参考用于第一非模块代码的标识符作为参数;并且
其中生成用于第一非模块代码的第一模块是响应于接收该命令的。在实施例中,该多个模
块包括(a)在显式地依赖于与非模块代码的该一个或多个集合对应的命名空间方面受限制
的标准模块的第一集合,和(b)在显式地依赖于与非模块代码的该一个或多个集合对应的
命名空间方面不受限制的桥接模块的第二集合。在实施例中,第一模块是桥接模块,并且其
中操作还包括:在生成桥之后:利用对桥接模块的显式依赖性成功地证实特定的标准模块;
并且其中该特定的标准模块在包括对命名空间的显式依赖性方面受限制。在实施例中,操
作还包括:基于以下中的一个或多个来定义包括特定显式依赖性的模块描述符:该多个模
块中允许由第一模块的显式依赖性的每个模块;该多个模块中对执行由标准模块组成的应
用所必需的每个模块;该多个模块中每个能?#36824;?#23519;到的标准模块;由开发者列举的每个标
准模块;以及除第一模块之外的每个桥接模块。在实施例中,操作还包括:定义模块描述符,
以允许第一非模块代码中的每个包被标准模块、任何桥接模块和任何非模块代码访问。在
实施例中,生成用于第一非模块代码的第一模块至少响应于确定:确定第一非模块代码不
包含任何重复的包;确定第一非模块代码不依赖于该多个模块中受限制的模块集合中任何
一个;以及确定第一非模块代码不查?#20197;?#35813;多个模块中其它模块中的类或资源。

在实施例中,操作包括:对与该多个模块对应的代码基执行操作,该代码基包括:
在包括基于与非模块代码的一个或多个集合对应的命名空间的显式依赖性方面不受限制
的第一模块集合;以及在包括基于与非模块代码的该一个或多个集合对应的命名空间的显
式依赖性方面受限制的第二模块集合;并且其中第二模块集?#31995;?#20013;的至少一个显式地依赖
于第一模块集?#31995;?#20013;的至少一个。在实施例中,第一模块集合由一个或多个桥接模块组成。
在实施例中,第二模块集合由一个或多个标准模块组成。在实施例中,命名空间包括依赖性
路径。在实施例中,命名空间包括与非模块代码的该一个或多个集合对应的依赖性路径。在
实施例中,第一模块集合中的特定模块包括模块描述符,其中该模块描述符包括基于与非
模块代码的该一个或多个集合对应的命名空间的显式依赖性。

本文所述的特征和功能的?#25105;?#32452;合可以根据一个或多个实施例被使用。在前面的
说明书中,已经参照众多?#38468;?#25551;述了实施例,这些?#38468;?#21487;以随实现而变。因而,说明书和附
图应当在说明性而不是限制性的意义上考虑。本发明范围的唯一且排他指示,以及申请人
预期要作为本发明范围的内容,是由本申请产生的权利要求集?#31995;?#25353;照这种权利要求产生
的具体形式的字面和等效范围,包括任何后续的校正。

7.硬件概述

根据一个实施例,本文所描述的?#38469;?#30001;一个或多个专用计算设备实现。专用计算
设备可以是硬连线的以执行所述?#38469;酰?#25110;者可以包括诸如被永久性地编程以执行所述?#38469;?br />的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)的数字电子设备,或者可以
包括编程为按照固件、存储器、其它存储装置或者其组合中的程序指令来执行所述?#38469;?#30340;
一个或多个通用硬件处理器。这种专用计算设备还可以合并定制的硬连线逻辑、ASIC或
FPGA与定制的编程?#35789;?#29616;所述?#38469;酢?#19987;用计算设备可以是台式计算机系统、便携式计算机
系统、手持式设备、联网设备或者结合硬连线和/或程序逻辑?#35789;?#29616;所述?#38469;?#30340;任何其它设
备。

例如,图4是示出本发明的实施例可以在其上实现的计算机系统400的框图。计算
机系统400包括总线402或者用于传送信息的其它通信机制,以及与总线402耦合用于处理
信息的硬件处理器404。硬件处理器404可以是例如通用微处理器。

计算机系统400还包括耦?#31995;?#24635;线402用于存储信息和要由处理器404执行的指令
的主存储器406,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器406还可以用于
在要由处理器404执行的指令执行期间存储临时变量或其它中间信息。当存储在处理器404
能够访问的非瞬时性存储介质中时,这种指令使计算机系统400变成为被定制以执行指令
中所指定的操作的专用机器。

计算机系统400还包括只读存储器(ROM)408或者耦?#31995;?#24635;线402的其它静态存储
设备,用于为处理器404存储静态信息和指令。诸如?#25490;?#25110;光盘的存储设备410被提供并且
耦?#31995;?#24635;线402,用于存储信息和指令。

计算机系统400可以经由总线402耦?#31995;?#26174;示器412,诸如阴极射线管(CRT),用于
向计算机用户显示信息。输入设备414,包括字母数字和其它键,耦?#31995;?#24635;线402,用于向处
理器404传送信息和命令选择。另一种类型的用户输入设备是游标控件416,诸如鼠标、轨迹
球或者游标方向键,用于向处理器404传送方向信息和命令选择并且用于控制显示器412上
的游标运动。这种输入设备通常具?#24615;?#20004;个轴——第一个轴(例如,x)和第二个轴(例如,
y)——中的两个自由度,以允许设备在平面内指定位置。

计算机系统400可以利用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或
程序逻辑?#35789;?#29616;本文所述的?#38469;酰?#36825;些与计算机系统相结合,使计算机系统400成为或者把
计算机系统400编程为专用机器。根据一个实施例,本文的?#38469;?#30001;计算机系统400响应于执
行包含在主存储器406中的一条或多条指令的一个或多个序列的处理器404而执行。这种指
令可以从诸如存储设备410的另一存储介质读到主存储器406中。包含在主存储器406中的
指令序列的执行使处理器404执行本文所述的过程步骤。在可替代的实施例中,硬连线的电
路系统可以代替软件指令或者与其结合使用。

如在本文所使用?#27169;?#26415;语“存储介质”指存储使机器以特定方式操作的数据和/或
指令的任何非瞬时性介质。这?#25191;?#20648;介质可以包括非?#36164;?#24615;介质和/或?#36164;?#24615;介质。非?#36164;?br />性介质包括例如光盘或?#25490;蹋?#35832;如存储设备410。?#36164;?#24615;介质包括动态存储器,诸如主存储
器406。存储介质的常见形式包括,例如,软盘、柔性盘、硬盘、固态驱动器、磁带或者任何其
它磁性数据存储介质、CD-ROM、任何其它光学数据存储介质、任何具有孔模式的物理介质、
RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。

存储介质与传输介?#24335;?#28982;不同但是可以与其结合使用。传输介质参与在存储介质
之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线402的配线。传输
介质还可以采取声或光波的形式,诸如在无线电波和红外线数据通信中产生的那些。

各?#20013;?#24335;的介质可以涉及把一条或多条指令的一个或多个序?#34892;?#24102;到处理器404
供执行。例如,指令最初可以在远程计算机的?#25490;?#25110;固态驱动器上携带。远程计算机可以把
指令加载到其动态存储器中并且利用调制解调器经电话线发送指令。位于计算机系统400
?#38236;?#30340;调制解调器可以在电话线上接收数据并且使用红外线发送器把数据转换成红外线
信号。红外线检测器可以接收在红外线信号中携带的数据并且适当的电路系统可以把数据
放在总线402上。总线402把数据携带到主存储器406,处理器404从主存储器406检索并执行
指令。由主存储器406接收到的指令可以可选地在被处理器404执行之前或之后存储在存储
设备410上。

计算机系统400还包括耦?#31995;?#24635;线402的通信接口418。通信接口418提供耦?#31995;?#32593;
络链路420的双向数据通信,其中网络链路420连接到?#38236;?#32593;络422。例如,通信接口418可以
是综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器,或者提供到对应类型电
话线的数据通信连接的调制解调器。作为另一个例子,通信接口418可以是提供到兼容的局
域网(LAN)的数据通信连接的LAN卡。也可以实现无线链路。在任?#26410;?#31867;实现中,通信接口
418发送和接收携带表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。

网络链路420通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络
链路420可以通过?#38236;?#32593;络422提供到主机计算机424或者?#25509;?#20114;联网服务提供商(ISP)426
运营的数据装备的连接。ISP 426又通过现在通常称为“互联网”428的全球分组数据通信网
络提供数据通信服务。?#38236;?#32593;络422和互联网428两者都使用携带数字数据流的电信号、电
磁信号或光信号。通过各种网络的信号以及在网络链路420上并通过通信接口418的信号是
传输介质的示例形式,其中这些信号把数字数据携带到计算机系统400或者携带来自计算
机系统400的数字数据。

计算机系统400可以通过(一个或多个)网络、网络链路420和通信接口418发送消
息和接收数据,包括程序代码。在互联网例子中,服务器430可以通过互联网428、ISP 426、
?#38236;?#32593;络422和通信接口418发送对应用程序的请求代码。

接收到的代码可以由处理器404在它被接收到时执行、和/或存储在存储设备410
或其它非?#36164;?#24615;存储装置中,用于以后执行。

在前面的说明书中,已经参照众多?#38468;?#25551;述了本发明的实施例,这些?#38468;?#21487;以随
实现而变。因而,说明书和附图应当在说明性而不是限制性的意义上考虑。本发明范围的唯
一且排他指示,以及申请人预期要作为本发明范围的内容,是由本申请产生的权利要求集
?#31995;?#25353;照这种权利要求产生的具体形式的字面和等效范围,包括任何后续的校正。

关于本文
本文标题:桥接模块系统和非模块系统.pdf
链接地址:http://www.pqiex.tw/p-6091850.html
关于我们 - 网站声明 - 网?#38236;?#22270; - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
平码五不中公式规律 南通棋牌大厅下载安装 天天2筒子棋牌官网 股票投资 双色球红球复试奖金查询表 江苏十一选五遗漏排行 河南脉动时空棋牌 幸运农场开奖号码查询 青海11选5走势图一定牛 2010年上证指数分析 山东十一选五的开奖图