都说java是跨平台语言 什么叫跨平台语言呢? 我看php C语言也能在不同平台下开发啊 都有什么语言是跨平台的呢 他们的跨平台特性有区别么
回复内容:
Java的跨平台是“一次编译,到处运行”。Java在编译的时候没有编译成指定CPU类型的汇编代码,也没有和具体操作系统的系统调用相关联,所以编译出来的结果是和CPU,操作系统都不相关的。Java编译出来的是一种字节码,这种字节码必须在Java的虚拟机上才能运行,Java虚拟机会屏蔽不同操作系统,CPU之间的差异。
C编译出来后,就是指定CPU类型的汇编代码,编译过程中肯定也要和具体操作系统的系统库相关连,所以做不到Java那种跨平台。但是,如果写的C代码,没有直接调用任何系统调用,这个代码在不同的平台下都能编译,也能运行。和Java的区别是,C要在不同平台上分别编译。
有些语言如JavaScript,Python等,他们是解释执行的,不存在编译过程,所以也能跨平台,前提是必须要有一个对应的解释器,PHP好像也是解释性的。
语言的跨平台是建立在不跨平台的底层设施之上的
比如C/C++的标准库
Java虚拟机,.NET运行时
这些都是不跨平台的
其实现在讨论跨平台意义不大,所谓跨平台的语言,就是说,你写的代码,可以不经改动直接应用在另一个操作系统系统、甚至cpu上。
但是现在几乎所有的语言都是这样的……C/C++,Java,C#,Python,PHP,JS,Ruby,Go……等等等等。
java说自己跨平台,是因为它和C相比,编译出来的二进制文件可以在其他任何
安装了Java运行环境的平台上运行,注意,没安装的话那就歇菜。而C,编译出来的东西一般只能在一类操作系统上运行,换了地儿就不行了,但是运行时
不需要额外安装任何运行环境,然而你依然可以为指定的cpu、操作系统单独编译一份。
另外C#,python,php,js等等全都可以一份代码在多种平台上直接运行。不过都需要
相应的运行环境。
是时候秀我大JavaScript了!
只要能上网就得用js吧。
手机上跑WebView,当然比较高逼格的是React-native。
游戏Canvas
连单片机都能写了,虽说功能比较弱吧。
PC端,现在有很多用electron的。
浏览器。。。说出来,哪个语言想被虐。
我看“跨平台”的意义应该只是界面方面。
毕竟服务器端几乎就是Linux的天下。写个服务器端软件也犯不着做Windows版本。
请相信!界面UI这一块必定是js或者其衍生语言的天下!
java跨平台开发者的代价最小,一次编译到处运行。c语言,python和php的一些功能都要使用一些操作系统的特定函数,开发代价比较大。
实际上现在的很多语言都有了一定程度的跨平台能力,但其实一般也没什么卵用,像java和h5这种没什么代价就能跨平台使用的,多半体验不好。
跨不跨有意义不大,能很方面的把东西做出来是第一位的,然后在用C去重写重性能的模块。
现在严格来说,没有哪个语言不能跨平台。你说C#吧,开源了,说Swift吧,也开源了……
首先不把可移植叫做跨平台,很多人容易搞混这个概念。
那么跨平台语言最大特点是不编译机器码,不使用系统API。
1. 不编译机器码,因为不同环境CPU不同,虽然PC都是x86,但如果不是PC而是手机,那么CPU的指令集就不是x86,那么你的机器码就全废,不能跨平台。
2. 不使用操作系统API,很简单不同的系统API定义不同,用法不同,软中断向量不同,凡是使用系统API创建线程,创建进程的代码,代码将无法通用。
java运行在虚拟机上,编译的代码是JVM在运行,逻辑直接运行者不是CPU,只要硬件装JVM,那么不需要关心是什么CPU,同理他把系统API封装成了JAVA通用的库,虽然系统不同,但系统内核做的都是做相似的事,封装一下,也是到处使用,所以没问题,还有上面提到的QT,就是靠这样封装统一化实现跨平台或可移植,但问题是QT不是编程语言,所以答非所问。。。
但语言本身跨平台不代表代码跨平台,否则PC和android就不会要写两个版本的java了,因为很多系统资源想要全部用统一封装,这工作量极大,也容易带来一些负面作用,这是要付出代价的,有代价没回报(比如微软做一个支持android系统的VS,而且能在PC上运行,做这个回报在哪里?做了也有可能被程序开发者认为哗众取宠,无意义,做两个APP不算问题,两者出现不兼容BUG才是问题),没有回报就没人做这个造福人类的工作,所以java的一次编译处处运行,看起来很美,实际只是句扯淡话,但这不妨碍说java是跨平台语言,只是工作没做到位。
另一种跨平台叫做宏语言,很多此类语言是不用编译,这类语言通常工作范围受限,比如专门就是搞网页,专门就是搞数据库,以及flash的as脚本等等。。拿HTML来说,他是不编译的,说到底他只是个协议,这个语言的目就是用文本描述网页呈现,有浏览器商来实现这个协议,它可以实现android版本,PC版,苹果版的浏览器,但都识别HTML脚本,那么HTML就是个跨平台语言。。。其他此类语言也是同理,形象的说他们算是是一个的抽象协议,需要执行他们的APP或者服务来运行他们,只要开发商按约定的协议做程序,这个语言就跨平台,但这种宏语言,功能范围被限定。。。
必须是qt啊。
程序语言的作用仅仅是描述算法,如果不是为了优化或者自己去翻译,那么它怎么翻译不关我事