`
ipioneer
  • 浏览: 48183 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

如何理解语言的跨平台性

阅读更多

英语是国际通用语言,但是我说的英语美国人就听不懂

很多人因为用了“跨平台的语言"写没有写的出跨平台的程序而盲目的认为该语言的跨平台性是子虚乌有。
本文以Java为例就来讨论一下”如何理解语言的跨平台性“。

从开发人员或编程语言的角度来理解,”平台“就是指语言的运行时环境,比如Java的平台就是JRE(Java Runtime Environment)。是不是觉得很奇怪,难道平台不是指Windows、Linux这样的操作系统吗?没错,Windows和Linux也确实是平台,但是这个平台对于Java来说太宽泛了,就象从来没有人说Java的平台是i386、arm一样。简单理解就是光有操作系统是无法运行Java程序的。而JVM则包含在JRE里。

如果某个语言对应的可执行体能够不作修改或者只做少量修改就能在其他平台运行,那么这个语言就是跨平台的。是的,允许做少量修改,但是这个过程一般是在程序员不知道的情况下进行的,通常这个任务由平台来完成。但是不管怎么说,这只跟可执行体有关,而不是源码。

对于一段Java程序,要让它可以执行,得至少经过两个步骤,第一步,用Java编译器将源码编译成字节码;第二步,用Java解释器执行字节码。可见可见,Java程序并非像C程序那样直接执行,而是要有个启动器,也就是所谓的JVM(Java Virtual Machine)来加载并执行。由此可见,Java跨平台的两个重要因素是:
1.有个能产生符合Java规范的字节码的编译器;
2.有个能解释上述符合Java规范的字节码的解释器。
换句话说,在任何操作系统上,只要存在JRE,就可以运行Java可执行体,而无所谓它来源于何处,只要”符合Java规范“就行。哈哈,到这里是不是有点乱,上面不是说Java的平台是JRE吗?难道JRE在不同的操作系统平台上还会变?是的,正是因为上述Java工具集是随操作系统的不同而不同的,我们才一再强调”符合Java规范的字节码“。因为Java编译器和Java解释器等一系列的工具集本身是依赖于操作系统的,只不过它们的输入和输出都符合统一的Java规范。如果上述两个条件换了其中任何一个,则很有可能使得Java不再跨平台。

除了以上两点,还有第三个因素,Java针对平台设计的库,也就是所谓的Jar包,这些jar包虽然大部分都是Java编写的,但是还是有不少地方是针对平台独特设计的,比如不同操作系统之间路径的表示,从这个角度讲,平台移植后的Java字节码已经被解释器改变了。

误区一:Java语言是跨平台的,所以Java程序也是跨平台的
”Java语言“和”Java程序“并非同一个概念,Java语言实际上只是一系列的规范,该规范为程序员规定了Java的语法和语义规则。Java程序则是根据这些规范产生的可执行体。通常情况下,程序的需求或多或少都会关系到一些操作系统之间的差异,比如,Windws的文件系统是多根的,Unix的文件系统则是单根的;再比如,Java连接数据库的程序中,用到了与平台相关的ODBC,此时当程序拿到其他平台上去难免会出错。前面说了,Java工具集是依赖于操作系统的,也就是说它们不能改变操作系统之间的差异,这就是JNI(Java Native Invoke)存在的原因之一。当一个程序使用了某个操作系统的特性并且移植后的操作系统没有此特性时,虽然它们能被该平台执行,但是还是会运行出错。

误区二:Java语言是跨平台的,所以Java程序是跨Java工具集的
从上面的说明可以看出,Java语言跨平台的本质是因为Java工具集遵循同一套规范。规范是个抽象的概念,那自然需要对应着一种实现,目前常见的有三种实现,即Sun的官方实现;IBM的实现;GNU的实现。很有可能一套工具集对应与一套实现,使得不同实现之间并不通用,况且,每套实现在满足规范后还可能增加自己的特性,比如,GNU可以直接将java源码、字节码、jar包等编译成本地可执行体。当然它们对源码规范的实现都是一样的,但是也并不保证这些实现一定不会出现不同。因此对于给定的一套工具集,Java语言才是跨平台的,其他工具集则允许不是。

误区三:Java语言是跨平台的,所以Java程序是跨Java应用服务器的
在一套给定的工具集上,Java应用服务器做为JavaEE的容器,从本质上来说是JavaEE规范的实现,这样结合误区二就很容易理解了。不过还是要说一点,误区三其实根本就不该有,因为原因和结果本就不是一个层次的东西。

文章出处:http://www.diybl.com/course/3_program/java/javajs/20081013/150474.html

分享到:
评论

相关推荐

    java跨平台性

    Java 跨平台性是 Java 语言的一项重要特性,它允许 Java 程序在不同的操作系统平台上运行,而不需要重新编译。这种跨平台性是通过 Java 虚拟机(JVM)来实现的。 Java 跨平台性的定义是指 Java 程序可以在不同的...

    java的跨平台性

    Java的跨平台性是其最显著的特性之一,这一特性使得Java程序能在不同的操作系统上运行,无需重新编译。这得益于Java的“一次编写,到处运行”(Write Once, Run Anywhere, WORA)的理念。Java的跨平台能力是通过Java...

    基于Lua解释性语言-脚本语言的手机跨平台架构 共11页.ppt

    3. 跨平台:Lua 语言具有良好的跨平台性,能够在多种平台上运行,如 Windows、Linux、Mac OS 等。 4. 可移植性:Lua 语言具有良好的可移植性,能够在多种设备上运行,如手机、PC 等。 5. 高效率:Lua 语言具有高效率...

    《C/C++编写跨平台程序:实践篇》

    跨平台编程不仅需要对语言有深入理解,还要熟悉不同操作系统平台之间的差异,以及如何利用跨平台工具和技术来克服这些差异。 C/C++作为一种广泛支持的系统编程语言,具有强大的功能和性能,但在编写跨平台程序时,...

    ice用户指南,ice是跨平台跨语言的高可靠性的通信平台

    《Ice用户指南》详细解析——跨平台跨语言的高可靠性通信平台 Ice,全称ZeroC Ice,是一款功能强大的、跨平台的、跨语言的分布式通信框架,它为开发人员提供了一种简单、高效且可靠的解决方案,使得不同操作系统和...

    java跨平台

    - **性能考量**:尽管Java通过JVM实现了跨平台性,但与直接编译成机器码的C程序相比,在运行时可能会稍微慢一些。这是因为JVM在执行字节码时存在一定的开销。然而,随着JIT(Just-In-Time)编译器技术的进步,这种...

    C++跨平台开发技术指南.pdf

    《C++跨平台开发技术指南》是一本专注于C++语言跨平台开发的实用技术书籍。这本书详细介绍了C++在不同操作系统上,如Windows、Mac OS和Linux上开发应用程序的策略和实践。跨平台开发是软件开发领域中的一个重要方面...

    c++跨平台开发

    标题:C++跨平台开发 描述:C++跨平台开发,值得参考 在现代软件开发领域,跨平台开发成为了一种趋势,它...通过采用上述策略和技术,开发者可以有效地克服跨平台开发中的挑战,创建出高质量、高可移植性的应用程序。

    Unity 3D脚本编程 使用C#语言开发跨平台游戏

    综上所述,"Unity 3D脚本编程:使用C#语言开发跨平台游戏"涵盖的内容广泛,从基本的脚本编写到复杂的系统设计,都需要开发者具备扎实的C#基础和对Unity引擎的理解。通过不断学习和实践,开发者可以创造出令人惊叹的...

    一个跨平台的聊天工具

    首先,我们来理解“跨平台”的概念。跨平台意味着该聊天工具能够在不同的操作系统上运行,比如Windows和Linux。这要求软件的开发采用能够兼容多种操作系统的编程框架或语言。在这个案例中,开发人员选择了QT框架来...

    基于C++语言下的跨平台软件开发设计研究

    了解跨平台软件开发的设计流程,结合理论与实践,是完成C++语言跨平台软件开发的基础。 在研究C++语言的跨平台开发设计时,既要利用C++语言的高性能和灵活性,也需要解决跨平台软件开发中遇到的共性和个性问题。...

    eC语言: 拥有C++项目的性能和Java的跨平台性以及Python的方便性

    eC(Extended C)是一种由加拿大开发者Jerome开发的编程语言,其目标是结合C++的高性能、Java的跨平台能力和Python的易用性。历经十二年的精心打磨,eC旨在为程序员提供一种高效、便捷且多平台兼容的编程工具。 ###...

    Unity 3D脚本编程-使用C#语言开发跨平台游戏1

    本教程的PDF文件《Unity 3D脚本编程 使用C#语言开发跨平台游戏》将详细讲解以上内容,并可能涵盖更高级的主题,如图形渲染、粒子系统、动画系统等。配合实践,你将能够创建出引人入胜的跨平台游戏。记得随时查阅和...

    跨平台跨语言API文档编写工具.rar(附带教程)

    标题中的“跨平台跨语言API文档编写工具”指的是一个能够帮助开发者生成适用于多种操作系统(如Windows、Linux、macOS)和编程语言(如Java、Python、C++等)的API文档的软件。这类工具通常采用一种标准化的格式,如...

    基于C语言的nanopb跨平台设计源码与多语言兼容性分析

    该项目是一款基于C语言的nanopb跨平台设计源码,包含522个文件,涵盖124个proto文件、112个C源文件、34个options文件、24个头文件、18个预期文件、13个...该源码支持多语言编写,旨在实现高效的跨平台通信协议设计。

    Unity 3D脚本编程 使用C#语言开发跨平台游戏_PDF

    Unity 3D是一款强大的跨平台游戏开发引擎,广泛应用于创建2D、3D游戏...这份"Unity 3D脚本编程 使用C#语言开发跨平台游戏"的PDF文档,无疑会是学习这一技能的重要参考资料,帮助开发者快速掌握Unity 3D的游戏开发技术。

    跨平台的C++播放器

    跨平台的C++播放器是一种基于C++编程语言开发的多媒体播放软件,它能够在不同的操作系统上运行,如Windows、Linux、macOS等。MFC(Microsoft Foundation Classes)是微软提供的一个C++库,用于简化Windows应用程序...

    原创跨平台菜单by漠北 v1.2

    - "delphi":Delphi是Embarcadero Technologies开发的一种集成开发环境(IDE),主要用于编写Windows和跨平台的应用程序,基于Object Pascal编程语言。 - "跨平台":意味着该菜单系统能够在多个操作系统上运行,包括...

    《使用wxWidgets进行跨平台程序开发》pdf + 光盘源码

    首先,wxWidgets库的核心特性在于它的跨平台性。通过封装各操作系统的原生API,wxWidgets提供了一致的接口,使得开发者可以在不同的操作系统环境下编写一致的代码。这大大降低了多平台支持的难度,提高了代码的可...

    .net跨平台如何实现的

    综上所述,.NET跨平台实现的关键在于其标准化的基础设施、CTS和CLS提供的语言互操作性,以及针对不同平台的适配器。开发者可以选择适合的工具和框架,如.NET Core、Xamarin或ASP.NET Core,来构建能够在多种操作系统...

Global site tag (gtag.js) - Google Analytics