首页 _NET中通用语言运行时环境初探

_NET中通用语言运行时环境初探

举报
开通vip

_NET中通用语言运行时环境初探_NET中通用语言运行时环境初探 . N ET 中通用语言运行时环境初探 许鑫 , 费翔林 , 吕琦 () 南京大学 计算机软件新技术国家重点实验室 , 江苏 南京 210093 摘 要 : 2000 年微软公司推出了. NET 构架 ,向网络计算和分布式跨平台计算迈出了鼓舞人心的一步 ,通 过对 JVM 和 CLR 作对比 ,着重介绍了. NET 跨平台计算的核心设施和跨平台计算的实现思想。 () 关键词 : 跨平台 ; JVMJ ava Virtual Machine; CLR ; MSIL () 文章编号 ...

_NET中通用语言运行时环境初探
_NET中通用语言运行时环境初探 . N ET 中通用语言运行时环境初探 许鑫 , 费翔林 , 吕琦 () 南京大学 计算机软件新技术国家重点实验室 , 江苏 南京 210093 摘 要 : 2000 年微软公司推出了. NET 构架 ,向网络计算和分布式跨平台计算迈出了鼓舞人心的一步 ,通 过对 JVM 和 CLR 作对比 ,着重介绍了. NET 跨平台计算的核心设施和跨平台计算的实现思想。 () 关键词 : 跨平台 ; JVMJ ava Virtual Machine; CLR ; MSIL () 文章编号 : 100123695 20030620035204 中图法分类号 : TP312文献标识码 : A An Introduction to Common Language Runtime in . NET XU Xin , FEI Xiang2lin , LV Qi ( )The State Key L aboratory f or Novel Sof tware Technology , Nanjing University , Nanjing Jiangsu 210093 , China Abstract : MS introduce its. Net to industry. It is one step of MS ambitious plan to advance network computing and distributed across2 platform computing. This paper briefly introduces the coral across2platform facilities of . NET and its idea on aross2platform computing by comparing JVC with CLR. () ()Key words : Across2platform ;JVM J ava Virtual Machine; CLR ; MSIL Microsoft Intermediate Language 能够在不同的操作系统上运行 ,从而实现类似 J ava 一样 1 引言( ) 的编译一次 , 多次运行 Compile Once , Run Many。J ava 采用了生成中间代码的方式实现此功能 , 而. NET 则是 随着计算机技术的进步 ,诞生了很多硬件平台和操 ( ) 先生成所谓的“微软即时语言”MSIL,然后用通用语言 作系统 , 在这些平台上的软件移植问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 , 成为困扰人们 运行时环境编译并执行它。 的重要问题。 ()211 MSIL Micro Soft Interme diate La ngua ge 直到 1994 年 , Internet 的迅猛发展 ,促成了 J ava 语言 . NET 中的编译器将源代码翻译成“微软即时语 的诞生 ,并逐渐成为 Internet 上广受欢迎的开发与编程 言”,它是一组与具体 CPU 无关的指令集 ,而且能被高效 语言 , 它有很多新的特性 , 其中最重要的一点就是平台 地转换成本地代码。MSIL 包括了一个很广泛的指令集 , () 无关性。借助JVM J ava Virtual Machine技术 , 用 J ava 编 例如加载指令集 ,初始化 ,以及对对象的方法调用 ,数学 写的软件可以在执行码层次上兼容 ,能不加修改地在任 和逻辑操作 ,控制流 ,直接内存存取 ,异常处理。 何平台上运行 ,只要所用的平台能提供JVM 就行了。J a2() 在代码被执行以前 ,MSIL 必须由J ITJ ust In Time编 va 语言取得了巨大的成功 ,一些著名的计算机公司纷纷 译器编译成特定的 CPU 代码。由于实时环境为每种它 购买了 J ava 语言的使用权 , 如 Microsoft , IBM , Netscape , 支持的计算机体系结构提供了一个或多个J IT 编译器 , Novell ,Apple ,DEC ,SGI 等。有人预言 :J ava 将是网络上的 同样的 MSIL 代码可被J IT 编译成不同的本地代码 ,这与 “世界语”,今后所有用其它语言编写的软件统统都要用J ava 的做法特别像 , 通过此技术 , 实现了真正的跨平台 J ava 语言来改写。最近几年 ,Microsoft 公司也推出了其 ( 性。当编译器生成 MSIL 时 ,它也同时生成元数据Meta2 新一代软件开发平台. NET。这一平台 ,吸收了各个公司 ) data, 元数据描述了源代码里的每种类型定义 , 每个类已有的先进技术 ,在 Microsoft 雄心勃勃的计划里 ,它力图 型成员的签名 , 代码引用成员 , 还有其它运行时环境需 打破信息孤岛 ,让任何人能在任何时间通过任何设备获( ) 要的数据。MSIL 和元数据包含于 PEPortable Executable取任何信息。在这个计划中平台无关性和语言无关性 文件里 ,这种文件是基于已经使用很久的可执行文件格 由微软推出的. NET 中的通用语言运行环境 CLR 担当。 式 ,即已发行的 Microsoft Portable Executable 和同用对象 ( ) 文件格式COFF。这种文件格式包含了 MSIL 或者本地 2 . N ET 中的 CL R 代码以及元数据 ,是操作系统能够识别出通用语言运行 微软公司提出的通用语言运行时环境实现了真正 时环境的镜像。由于元数据与 MSIL 一同保存在文件 的跨平台计算。所谓跨平台计算 ,是指同一语言的代码 里 ,所以源代码可以描述自身 ,因此 ,没有必要使用类型 库和接口数据语言 IDL 。 收稿日期 : 2002206228 ; 修返日期 : 2002209208 根据需要在运行的时候把 MSIL 翻译成本地代码 ,并把本( )12 CL R Co mmo n La ngua ge Runtime 2 地代码保存下来以便下次使用。在第一次调用一个方法 () 1什么是通用语言运行时环境 ? . NET 构架提供了 时 ,运行时控制 J IT 编译器 ,把 MSIL 转换成本地代码 ,当 一个运行时环境 , 叫做通用语言运行时环境 , 它提供了 以下功能 : ?管理代码的执行 ; ?为简化开发过程提供 以后对该方法再次调用时 ,运行时将直接运行以前编译 一系列服务 ; ?提供了实现运行时功能的工具 ; ?使开 生成的本地代码 ,从而减少了J IT 编译和运行的时间。发者能够在这种“受管理”环境中方便地开发应用程序。 通用语言运行时环境不仅提供了代码执行的环境 , () 2运行时如何为“受管理”代码提供服务 ? 为了使 运行而且在代码运行的时候提供了很多服务。在一个方法 时为“受管理”代码提供服务 ,编写应用程序所用的 被执行之前 , 它首先被翻译成特定 CPU 相关的代码 , 语言的编译器必须发出一些称为“元数据”的特殊数据 , MSIL 里的每一个方法在它被第一次调用时被即时编译 ,它提供了用于 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 代码里的类型、类成员和参考等的信 然后被执行。在下一次这个方法又被调用的时候 ,现存 息。“元数据”与代码存储在一起 , 因此 , 所有可加载的 的J IT 编译过的代码被执行。J IT 编译然后执行这一过 通用运行镜像都包含“元数据”,运行时使用元数据来定 程一直重复直到整个程序执行结束。 位和加载类 ,在内存中布局类实例 ,解析方法调用 ,产生 本地代码 , 实现安全性 , 并组织运行时的上下文边界。 3 CL R 与 J VM 的对比运行时自动处理对象布局 , 管理对对象的引用 , 当它们 对于 J ava 实现平台无关性的 办法 鲁班奖评选办法下载鲁班奖评选办法下载鲁班奖评选办法下载企业年金办法下载企业年金办法下载 其实很简单 ,就是 不再被使用的时候 ,将它们释放掉。在对象的生命周期 模拟一台特定功能的电脑。J ava 程序只能在这样的电脑 中受运行时管理的对象叫做“受管理数据”。自动内存里面执行。这个模拟的电脑就是 JVM ,也就是 J ava 虚拟 管理消除了内存溢出和其它一些编程错误。机。要实现多平台 ,只需要在其它的平台上写一个 JVM () 3通用语言运行时环境有哪些优点 ? ?使各种语 就行了。 言集成在一起 ; ?对各种语言都能集中进行异常处理 ; J ava 来源于 C + + ,但是做了不小的改动 ,抛弃了很 多 C + + 里面容易造成编程混淆和不安全的元素 , 如操 ?提高了安全性 ; ?方便版本控制 ; ?方便部署支持 ; ? 作符重载、多重继承、指针等等 ,使 J ava 成为纯面向对象 为组件间交互提供一个简单模型 ; ?提供了调试等服务 语言。不过由于这些简化 ,其虚拟机的功能也做了相应 功能。 的调整。JVM 一共有 201 个指令和三个保留操作。 () 4通用语言运行时环境还有哪些特点 ? 作为元数而对于 CLR , . NET 的结构类似于J ava ,不过要比J ava 据的一部分 ,所有的受管理组件附带了组件和资源的相 还要复杂一点。由于 Microsoft . NET 需要支持多语言和 关信息。运行时使用这些信息来保证组件或应用程序 多平台这两个特性 ,所以 Microsoft 的做法是先把任何语 已提供所有它需要的一切版本信息。因此 ,程序代码将 ( ) 言编译成 IL Intermediate Language, 然后再通过 CLR 来 不易因为一些独立性没有被满足而被损坏。注册信息 解释成本地语言执行。这个模式实际上和J ava/ JVM 的和状态信息不再被保存在不易被创建和维护的注册表 模式很接近。对比一下就可以知道 ,J ava 相当于 IL ,JVM 里 ,相反 ,程序员定义的类型将被保存在元数据里 ,从而 相当于 CLR 。不同的是 , 在 Microsoft . NET 的体系里面 , 使进行组件复制和删除的任务更加简单。 在 IL 上面还有一层 ,就是现在的各种语言。J ava 通过两 编译器和工具展现了运行时所提供的功能 ,这些对 层结构实现了平台无关性 ; . NET 则在这上面加了一层 ,开发人员来说是很有用的 ,运行时的一些特性可能在一 在原来的基础上实现了多语言性。由于. NET 需要支持 些环境中将被忽略 ,而在其它环境中则不是这样。运行 多语言特性 ,于是 CLR 做得比较复杂 , 为了支持多种面 时经历将由你所使用的语言编译器或者工具所决定。 向过程的语言 ,其 架构 酒店人事架构图下载公司架构图下载企业应用架构模式pdf监理组织架构图免费下载银行管理与it架构pdf 的层次要比 JVM 的高。在下面的 例如 :如果你是 Visual Basic 开发者 , 你可能意识到通用CLR 和 JVM 的具体比较中我们在部分场合使 用 CLI 运行时 ,Visual Basic 语言比以前更面向对象了 ; 且会发 ( ) Common Language Infrastructure这一名称 ,它与 CLR 属于 现性能提高了 ; 可以更方便使用其它语言来使用组件; 同一事物对于架构者和使用者的不同表述。 使用可由类库提供的扩展类型 ; 拥有更多的语言特性。 311 体系结构 如果使用 Visual C + + ,可以使用“受管理的 C + + 扩展” ( CLR 的基本结构包含 : 指令指针 指向下一条即将 来写“受管理代码”, 可以完成各种语言的集成 , 尤其是 ) ( ) 执行的指令、赋值堆栈存放中间运算的指令、本地变 跨语言集成 ; 自动内存管理 , 控制对象的生命周期而不 ( ) 量队列存放任何类型的数据、输入参数队列、方法描 必使用参考计数 ; 自我描述对象 , 不必使用 IDL ; 编译一 ( 述句柄 包含方法的一些信息 , 如署名、变量类型、异常 ) ( 处理信息、本地内存池、返回状态句柄从当前方法返 次 ,就可以在任何支持运行时环境的 CPU 和操作系统上 ) 回时 ,用于恢复方法状态。相当于术语 : 动态连接、安 运行程序。 ( 全描述符被 CLI 的安全系统用来记录重载的安全信息 , ()213 J ITC J u st In Time Co mpile ) 这个描述符不能被代码直接访问。 在 MSIL 被执行之前 ,必须被转换成本地代码 , 这个 作为对比 ,JVM 都是以 4 字节宽存放所有本地数据构想在上面已经提到过。J IT 编译的构想意识到一些代 ( ) 本地变量、堆栈槽、输入参数的。而 CLR 则是多态的 ,码在执行时可能永远无法被调用 ,于是 ,J IT 没有浪费时 间和内存把所有在 PE 里的 MSIL 转换成本地代码 ,而是 ( ) 它们可以是 4 字节宽如 32 位整数,也可以是上百个字,这么做可以更方便地翻译成 JVM 代码 , 不有类型要求 ( ) 节如用户自定义的类型。过却使产生JVM 代码的编译器增加了负担。不像JVM , ()312 方法集合 As se mblie s CLI 的指令集形态更多 , 而且一般只需要指令结果的外 部的类型信息 , 这样编译器可以更方便地生成 MSIL 代 每一种执行环境都有一个“软件组成”的概念。一 码 ,不过 J IT 需要更多的工作。( ) 个集合是许多包含 MSIL 代码和元代码的文件 模块, () 1常数、参数、变量、指针。CLI 提供一系列的指令 在 CLI 里面作为一个软件组成的主单元。安全、版本、类 把数据从临时堆栈传入传出。编译执行时可能会出现 型、进程、所有在一个方法集合基础上工作的实体。 如下几种情况 : ?J IT 能从方法的签名上知道数据的类一个方法集合描述单描述了它的信息 ,比如它的版 型 ; ?J IT 可以从上下文中推出数据的类型 ; ?J IT 不能得 本、文件组成 ,从这个方法集合继承的类型 ,以及数字签 出结果的类型 , 需要类型 ; ?用于处理实例和静态域的 名和这个描述信息的公钥。在 CLI 中 , 我们可以自由地 指令直接处理等。定义类、接口、数组、指代的引用 ,就像定义结构 ,联合和 在 JVM 里面也包含着几套数据的装入读出指令 ,如 自己构造的数值类型一样。与 JVM 不同 , CLI 允许定义 把本地变量的值压入堆栈 , 从堆栈读出值写入本地变 最高级的方法和域。所有的声明都包含在方法集合的 量 ,把常量压入堆栈等 ,此系列指令都执行相似的操作。元数据中。CLI 未来的一个独特的特性就是允许用户自 指令首字母代表处理不同的数据类型 ,如 : I 代表 int ,l 代由扩展它的元数据。 表 long ,f 代表 fload ,d 代表 double 等等。 方法集合在JVM 里面可以粗略地比较为J ar 。J ar 实 由此可以看出 ,JVM 的处理要比 CLR 简单 , 不过没 际上就是打包 , 没有专门的存放文件版本、文件组成等 有 CLR 灵活。CLR 具有装入变量地址的能力 ,以及消除 信息的地方。不过可以通过在J ar 文件中加入文本描述 指针指向以间接地获取其值的能力 ,允许编译器的开发 文件的办法来解决这些问题。 者方便地实现引用传值。JVM 不允许编译器取得本地 313 类型体系 变量的地址 , 因此它不可能实现引用机制。作为代替 , 除了用户自定义类型 ,CLI 支持绝大多数现有的数据类 编译器只能用一些小伎俩 ,比如传入一个只有一个元素 型 ,而且可以通过下面的类型构造器进一步组合:valuetype 的数组等。 typeref , class typeref , reference to value or reference type , type () 2算术运算。CLI 中的 add 指令把堆栈顶端的两 () (pinned ,typebounds, multi2dimensionalarray 与JVM 作比较 , ( ) 个值加起来其它的算术操作类似,溢出在正常情况下 ) (CLI 支持真正的多维数组,method callConv type 3 parameters ( ) 是不会被检测到的 , 除非你定义. ovf 有符号或 ovf . un ) ,function pointer , type &, managed pointer , type 3 , transient ( ) 无符号,浮点溢出返回正负无穷大。 () pointer not user declarable。 JVM 在整数运算中永远不会指出溢出 ,这意味着必 在 CLI 里有个机制可以在后期决定一个类型的大 须在语言中增加溢出判断。还有一个问题就是每一个 小。CLI 会在 J IT 或运行时 ,针对某一个处理器映射相应 ( 类型都有一个单独的 add 指令其它算术运算指令也类 的类型大小。比如 ,一个 int 在 Pentium 处理器中可能映 ) 似,就如同 load 和 store 的情况一样。 射成 int32 ,但在 Ia64 处理器中会映射成 int64 。() 3简单的流控制。CLI 支持大量常见的分支指令CLI 控制着对象引用类型。一个受控的指针就像一 ( ) 如 br ,beg ,bge 等。CLI 没有类似 JVM 的“跳入子程序”个对象类型 ,但是它指向的是对象的内部。受控的指针 的指令 ,但是 CLI 也没有像JVM 那样限制分支的长度为和对象引用是不能互换的。暂时指针是受控和不受控 ( 64 K这对编程者来说不是大问题 ,不过对编译器来说产 指针的中介。当一个临时指针被当作参数传递的 ,当值 ) 生代码比较麻烦。 返回 , 或者存储在一个用户可见的区域时 , 它可以转换 315 数值类型成受控指针或不受控指针 , 这要根据目标的类型而决 CLI 值的类型与 C 里面的结构或 Pascal 里面的记录 定。 很类似 , 即一系列有各种类型的域名。作为引用的对 自动类型大小调节机制提供一个比 JVM 更明显的 比 ,数值类型是“即刻”分配的。在 CLI 里面 ,数值类型也 优势。JVM 过早的假设所有的存储都使用 32 位宽。这 可以包括方法。 决定了像 long 或 double 的类型占用了两个区域 , 这么做 () 1结构。CLI 中的结构是一个简单的包含两个域 使编译更困难。 ( ) x ,y的指针结构的定义。 J ava 是强类型语言 , 这意味着所有的表达式和变量() 2联合。CLI 支持对域的连续直接地控制设计 ,可 都有一个确定的类型。这种方式可方便地在编译的时 ( ) 以实现 C 风格的联合类型在 Pascal 里的多重记录, 一 候能及时发现错误。所以 JVM 需要编译器在编译时就 个可以允许几个域交叠的结构。 () 确定变量的类型 ,而不支持在运行时决定数据类型。3枚举。除了结构以外 ,CLI 中还有一种在 C 语言 中提到的数值类型 ———枚举。枚举提供了一个安全而 314 基本指令集 方便的办法把名字和整数值联系起来 , CLI 也允许定义 CLI 大约有 220 个指令 , 我们将取其中一些与 JVM 枚举的内容 ,比如内部存储的类型或者指出哪个枚举由 有所区别的来分析说明。首先当把 JVM 和 CLI 的指令 bit 位组成等。 进行比较时会发现 JVM 大多数的指令都对它们的参数 () 4初始化数值类型。除了 boxing 以及. locals 指令 ,, 性能开销太大 , 更为麻烦的是这会迫作引用多次传递 使你为每一个值的类型定义一个新的类。CLI 没有特殊的机制或指令直接给数据类型分配内存。 CLR 内建支持 Boxing 和 Unboxing 。一个数值类型 T initobj T 指令在堆栈中寻找数值类型为 T 的地址 , 并把 可以通过 Box T 指令被转换成对象的引用 ,并通过 Unbox 所有这个数值类型的所有的域都初始化成 null 或 0 。 T 指令返回成数值类型。 对于 Pascal 或与 C 类似的那些有联合、记录、枚举的 语言来说 ,值有类型是很显然的。而在JVM 上编译这样 4 应用现状和前景分析的语言却并不轻松 , 因为你需要用类来描述枚举和结 构 ,用类的层次来描述联合。一些更严重的结果就是不从以上分析可以看出 ,CLR 的设计目的之一就是支 持多语言特性。而 JVM 的设计者并没有把多语言特性 能完全支持这些语言的所有语义 ,因为不可能用通用的 放在首位。只从这一点出发就认为 CLR 比 JVM 好是一 技巧实现 :当你把一个 float 存在一个 float 或 int 的联合 种眼光狭隘的看法。况且事实上 JVM 尽管专门为 J ava 类型里面 ,却把它作为 int 来获取。 设计 ,它依然很好支持了面向对象语言的大部分的特 316 引用类型 性。可以说 , 如果只从面向对象语言出发 ,JVM 本身的 设计就具有很好的语言无关性。这种能力 , 使得通过 CLI 支持比如类、接口、数组、指令这样的类型 ,让我 JVM 共享各种语言编写的模块成为可能。而且 ,一些致 们把视线放在类上 , 类可以包括方法和域 , 但是为了支 力于此的项目已经开展并已经获得成功的结果 , 比如 持尽可能多的语言 ,CLI 又做了一次变通 ,包括虚方法和 J emacs Project 。静态方法 ,也支持方法的实例。 现在已经有很多语言被移植到JVM 下 ,而 CLR 虽然 317 调用方法 号称能支持所有语言 ,不过事实上现在却只支持三四个 CLI 有两个指令用于直接调用方法和接口。Call m 语言。而且 ,Microsoft 的平台及在上面运行的语言没有( 指令一般用于调用静态方法 m也就是在 JVM 里的 Call2 一个是免费的 ,而现在基于JVM 的软件实现有很多是免 ) ( ) static,用 Call 而不是 Callvirt调用虚方法或实例都是合 费的 ,况且有更多的基于JVM 的免费的语言编译器。 法的 ; 这样方法查找是静态的 , 也就是说会调用到最初 ( ) 绑定的函数在 JVM 与 Invokespecial 类似。Callvirt m 指 令把虚方法 m 进行后期连接 , 也就是说 , 真正被调用的 (方法根据 this 参数的类型动态确定JVM 有两个单独的 5 结束语指令 , Invokevirtual 和 Invokeinterface 又一次使编译器编写 ) 更困难。对实例的方法来说 , Callvirt 还使用早期连接 通过以上的比较 ,我们大致了解了两种运行环境的 的调用。第三个调用指令 Calli 允许间接地调用一个函 区别与联系。总的来说 ,JVM 设计的时候就是根据 J ava 数指针。 语言定制的。为了保证最大的执行效率 ,很多地方的设 在JVM 里面 , 一共有四种调用方法 : ?Invokevirtual 计对其它语言来说 , 都不是很理想。比如 :JVM 里面出 是 J ava 里面最常见的调用方法 ,根据对象的类型调用对 现了大量类似的指令 , 而这些指令 , 仅仅是因为需要处 象实例的方法 ; ?Invokeinterface 将会调用已实现的接口 理的数据类型不同。这一点与真正的计算机的机器指 的方法 ,JVM 先搜索特定的运行时对象以找到合适的方 令很类似 , Intel x86 系列的指令就是针对不同寄存器有 法 ; ?Invokespecial 调用需要特殊处理的实例的方法 ; ? 不同指令的。这样的机制 , 对于多语言构架来说 , 是很 Invokestatic 静态调用一个命名了的类的方法。 不方便的 ;而 CLI 则不同 ,它的出现比较晚 , 而且又吸收 ( ) 对于回调Tailcall,虽然难以理解 ,但是一些语言的 了这么多语言及系统的精华。其设计就是冲着多语言 , 确只用递归来表示表达式嵌套。在这些语言里 ,本质就 多平台而来的 , 它的构架要比 JVM 高一层 , 所以在这些 是底层执行环境支持回调。CLI 中 tail . 前缀指示 J IT 编 方面胜过JVM 也是理所当然的。 译器忽视调用者的堆栈段 , 先完成调用 , 这样有些方法 尽管如此 ,JVM 还是有很多优势的。首先 ,J ava 经过实际上会永远循环而不是出现一个堆栈溢出异常。如 果这个调用是从自不可信的代码到可信的代码 ,由于安 全问题 , 这个段将不会完全被忽视。但 JVM 不支持回 这么多年的发展 ,已经相当完善 ,也产生了众多的应用。调 ,编译器的编写者只能用类似跳转的技巧来人为地强 JVM 以及其函数库已经历了实践的考验 , 被事实证明是制 JVM 忽略堆栈段。 稳定成熟的平台。而且JVM 的设计 ,使虚拟机更容易实 318 值与引用类型的互动 现 ,使其运行环境可在更多的平台上工作 , 甚至可以设 如果有数值类型和引用类型 ,程序员就会希望在需 ( 要引用类型的地方用数值类型可以让实例把一个指针 计 JVM 的芯片 ,这也是 CLR 望尘莫及的地方。 ) 存储在集合里, 同样的问题发生在动态语言和类型静 网络计算和分布式计算是未来的发展方向 ,在这样 态函数多态的语言 ,多态函数需要统一的描述。为了支 的背景下 ,跨平台就成为关键的支撑。CLR 虽然支持跨 持这些 ,本质就是从执行环境有效地支持那些从值到应 平台 ,并具有多语言的优势 ,但由于受制于. NET 整个庞用类型的转移。为了创建一个类的实例而把一个值当 大的体系以及 MS 的商业计划 , 其真正跨平台能力无疑 还有待时间的检验 ,我们将拭目以待。 参考文献 : 1 CL I Partition II : Metadata EB/ OL . http :/ / msdn. microsoft . com/ net/ ecma/ , 2001. ECMA TG3 ,2001212210. () 下转第 106 页 径 ,如果有二次配送 , 二次配送起点的选择关系到配送,可以提高距离是相当费时的。改进数据库的查找原则 网络布局的全面、科学。合理的配送网络格局不仅可以 程序的响应时间 ,改善整体性能 ,提高配送效率。 () 3配送智能学习法。实际配送中由于各种条件的 减轻各配送点的配送任务 ,还可以减少建立配送点的费 用。这对于业务量的变化有很强的适应能力 ,可减少出约束 ,必然产生与理论分析不符甚至相悖的结果。因此 现区域不同而配送任务相差很大的现象 ,能够合理调度 对配送实施过程中返回的数据进行分析 ,能够提高系统 整个配送网络 ,提高网络工作效率。 的可靠性与稳定性。这个分析过程就是系统智能学习 从地理信息系统的角度来说 ,这些配送的二级中心的过程。这个过程主要表现在对特定条件下路况的分 实际上是一些地理网络中心 ,这些配送点配送的范围是 析、货物配送分解的方式以及两点间配送的时间估计。它能够服务的地理范围。确定地理网络中心服务范围 4 存在的问题算法有很多种 ,根本原则在于对整个区域用户的需求分 析 ,对潜在用户的合理分析 , 将配送中心设置在用户分 由于物流配送系统需要处理许多并不固定的配送 布区的几何中心。点 ,需要接收大量信息数据 , 因此数据库的数据量随着 配送中心的规模增大而越来越大 ,这就造成系统要求变 31313 最佳路径选择 高 ,反应速度降低。而目前对这种问题并没有很好的解 最佳路径的选择 , 实际就是要求车辆从配送站出 决方法。 发 ,经过多个配送点最后回到配送站的路线选择。这是 参考文献 : 图论中一个典型的“旅行商”问题 , 就是求一个最小值 , 无论是时间最短 ,还是距离最短、费用最少 ,对于不同的 货物可以根据配送的要求调整计算权值 ,以取得不同原 1 Bowersox D J ,Closs D J . 物流管理 :供应链过程中的一体化则的最佳路线。目前各种最短路径的算法虽然表面上 M . 林国龙 ,等. 北京 :机械工业出版社 ,1999.有很大差异 ,但实际上都是根据图论的相关经典算法改 2 徐孝凯. 数据结构简明 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 M . 北京 : 清华大学出版社 ,进而来。其差异不在于计算已知点之间距离的差异 ,而 199611402144. 主要在于道路通畅的权值设定、数据库设计、程序设计 肖位 枢. 图 论 及 其 算 法 M . 北 京 : 航 空 工 业 出 版 社 ,3 和程序响应时间上。 199312342247. () 1数据库存储结构设计。地理信息系统虽然具有 张铎. 电子商务与物流M . 北京 :清华大学出版社 ,2000.4 空间拓扑结构和较多的空间分析功能 ,但对于大量的数 5 丁立言 , 张 铎. 物流系统工程 M . 北京 : 清华大学出版 据操作方面显然不能与 Oracle ,SQL Server 等专业数据库 社 进行比较。因此 ,主要的属性数据必须放在大型数据库 ,2000. 中。为节省数据库资源和便于检索 ,应依照一定的原则 6 胡俊明. 关于加快发展我国配送中心的问题 J . 物流 ,设计数据库的存储结构。这样可以提高数据库的运行 () 2001 , 1:16219. 速度 ,并且可以顺利地实现与地理数据的结合。 菊池康也 1 物流管理 M . 丁立言. 北京 : 清华大学出版 7 () 2配送点的快速地理编码。在配送实施之前 , 首 社 ,1999. 先要判断坐标点所属道路的位置 ,然后对该道路进行内 龚洁晖 ,白玲. 确定地理网络中心服务范围的一种算法8 插。对于单行道和非单行道 , 以及有其它限制的道路 , () J . 测绘学报 ,1998 ,11 4:3572362.还要根据不同的时间与路况进行权值调整。判断坐标 曾文 ,徐世文. 地理信息系统中的常规网络分析功能及 9 点的位置是否是已知地点的一种方法是: 首先做坐标转 () 相关算法J . 中国地质大学学报 ,1998 ,4 4:3542358. 陈( ) 换 因为屏幕上显示的只是整个地图的一个局部;然后 沐天 ,等. 货郎担问题的几何分块算法及 ChinaTSP 问 题10 遍历数据库内的所有点 , 计算与该坐标点的距离 , 从中 () 的最终解决J . 计算机工程与科学 ,1998 , 2:22227. 找出距离最近的点即认为是已知点。但在实际情况下 , 数据库内的点是非常多的 ,逐一计算坐标点与所有点的 作者简介 : () 徐虹19792,女 ,硕士研究生 ,主要研究方向为网络工程及多媒 () 体计算技术 ;刘志强 19772,男 ,博士研究生 ,主要研究方向为 () 物流、GIS、多媒体技术 ;罗杰19632,男 ,副教授 ,硕士生导师 ,主 要研究方向为算法程序理论、网络工程及多媒体计算技术。 () 6 Andrew Kennedy , Don Syme . Design and Implementation of 上接第 38 页 1http :/ / java . Generics for the . NET Common Language Runtime C . Pro 2 The J ava Virtual Machine Specification EB/ OL 2 sun. com/ docs/ books/ vmspec/ 2nd edition/ html/ VMSpecTOC. ceedings PLDI’01 , 2001. doc . html ,2001212210. 7 T Lindholm , F Yellin. The J ava Virtual Machine Specification 3 Per Bothner. Kawa 2Compiling Dynamic Languages to the J ava () 2eM . Addison Wesley ,1999. VMC . USENIX ’98 Technical Conference ,1998. 作者简介 :4 J Engel . Programming for the J ava Virtual Machine M . Addison 许鑫 ,男 ,硕士研究生 ,研究方向为面向对象软件工程 ;费翔林 , Wesley ,1999. 男 ,教授 ,副主任 ,大学本科 ,研究方向为面向对象软件工程和操 Andrew Gordon ,Don Syme . Typing a Multilanguage Intermediate 5 作系统 ;吕琦 ,男 ,本科生 ,研究方向为面向对象软件工程。 Code C . Proceedings POPL ’01 ,2001124822601
本文档为【_NET中通用语言运行时环境初探】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_682974
暂无简介~
格式:doc
大小:40KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-12-01
浏览量:15