文章目录
- 序
- 跨语言
- 跨平台
- 【饭后杂谈】为什么有人说Java的跨平台很鸡肋?
序
很多技术都具有跨语言、跨平台的特点
比如JSON是跨语言的、Java是跨平台的、UniAPP、Electron是跨平台的
跨语言和跨平台,是比较重要的一个特性。这些特性经常能够决定开发者是否要使用它
对于一项技术能不能跨语言、跨平台,我的理解是:基于一个语言特性设计的技术,就不能跨语言;基于一个平台特性设计的技术,就不能跨平台。
同理,设计一项技术时,如果这个技术独立于语言/平台特性,或者把语言/平台特性隐藏在调用接口层之下,那它就满足了跨语言、跨平台的基础要求
跨语言
不受语言限制,不需要让开发者关心在 不同编程语言 的影响的,就叫跨语言,也叫语言中立。
跨语言对什么最重要?
我认为 跨语言对"通信技术"最重要。
在分布式、微服务日益强大的今天,让整体架构都采用统一的语言已经不切实际。况且更好用的语言(例如Golang)层出不穷,新事物总要慢慢取缔旧事物,跨语言通信早已不是什么新鲜事。
很多我们常用的通信技术都是跨语言的,比如通信协议(每个语言都支持TCP/IP协议族吧,这是硬性需求)、序列化方案(XML、JSON、Protobuf等)
而不跨语言的技术也有,比如golang的gob、java的serializable,这些语言自带的序列化不是跨语言的,它们包含了很多语言特性。
跨平台
不受平台限制,不需要让开发者关心在 不同平台 的影响的,就叫跨平台,也叫平台中立。
平台指的是运行环境,如CPU架构不同(引发的指令集不同)、系统架构不同(导致的API不同)、设备形态不同(大小、运行方式、操作方式等)
例如:Windows、MacOS、Linux、手机、平板、web网页、小程序、穿戴设备(手表、手环等)、PS(PlayStation)、NS(Nintendo Switch)等等
跨平台对什么最重要?
我认为 跨平台对"编程语言和GUI框架"很重要。
因为不同平台的架构、GUI-API都不一样。
例如 UniAPP,可以编写一套代码,同时编译到多个平台(小程序、Web、IOS APP、Android APP)运行的UI框架。
例如 Java,一套代码编译之后的jar包,可以在Windows、MacOS、Linux、Solaris平台上运行,只需要在这些平台上安装对应平台的Java运行环境(JRE)即可
例如 GoLang,它的 交叉编译 技术让一套代码可以编译成任何平台的可执行程序。
尽管Java和Go的跨平台方法不一样,但他们都做到了跨平台,不需要开发者针对不同平台开发不同的代码。
当然也有不跨平台的技术。甚至还有不跨平台的序列化技术,现在看来是多么没有意义,如今作为一个序列化技术,"跨平台"应该是最基础的要求了。
跨平台的缺陷
跨平台虽然很好,但也有缺陷。
以GUI而言,每个平台提供的GUI控件和属性多多少少有点差别。为了保证跨平台,UI框架可能只能提供所有平台都有的控件和属性,但这样做出来的UI就会过于简单、不好看。但如果调用平台的API,就可以做出相对好看的效果
UniAPP为了解决这个问题,提供了"条件编译"这个办法,可以针对不同平台,编写不同的定制性代码,这些代码会在编译时根据选择的平台决定是否参与编译。
【饭后杂谈】为什么有人说Java的跨平台很鸡肋?
Java一直宣称的跨平台,其实现在来看已经不怎么重要了。因为现在主流的服务器开发技术也没有不支持跨平台的了。
像是go也可以跨平台编译,在哪个平台上运行直接打哪个平台的包即可。而且golang编译包还是exe,可以直接运行,不需要像java一样还要安装JRE。