Java最大的优势真的在于跨平台吗?

澳门新浦京app下载 10

以下讨论只针对PC端和移动端。

澳门新浦京app下载 1

澳门新浦京app下载,正式上架:《Kotlin极简教程》Official on shelves: Kotlin Programming
minimalist
tutorial京东JD:

Java最大的优势真的在于跨平台吗?以前是,但现在已经不是了。

为啥大学都是用到Java语言教学?那就是因为——它是门靠谱的语言

fun max(a: Int, b: Int): Int { return if  a else b}fun main(args: Array<String>) { println)}

澳门新浦京app下载 2

Java语言的设计从现在的角度看非常中庸,啥都不是特别出色,但都“还行”。

“我真正关心的是Java虚拟机的概念,因为是它把所有的东西都联系在了一起;是它造就了Java语言;是它使得事物能在所有的异构平台上得到运行;也还是它使得所有类型的语言能够共存。”
( James Gosling, Java之父 (2011, ServerSide))

有跨平台需求的仅仅是客户端应用,而不是服务端。例如桌面应用,你的客户可能是Windows用户,也可能是Linux用户,这时候如果不想多投入成本对各个平台进行适配,那么Java所谓的”Write
once, run
everywhere”就显得异常光彩。然而今天,整个软件世界都在向B/S应用倾倒(嵌入式除外),即使要做客户端跨平台,QT等第三方框架远远比Swing更强大,Java在桌面应用领域基本被淘汰已经是不争的事实了,而当初Java引以为豪的Applet也早已销声匿迹。如果说客户端Java还有一点优秀的话,那只有Android了。Android最初确实靠JVM屏蔽了不同硬件设备之间的区别并取得了巨大的成功,但在今天,Android
L中ART模式的出现也即将颠覆这一情况,况且Google还可能会想用自家的Go语言取代Java成为Android平台的第一语言。所以在客户端,Java几乎完败。

出来找工作,会Java的话还是有不少选择余地的。

JetBrains开源其Kotlin语言 基于JVM的新编程语言。Kotlin,类似 Xtend
一样,旨在提供一种更好的 Java
而非重建整个新平台。这两种语言都向下编译为字节码(虽然 Xtend
是首先转换成相应的 Java 代码,再让 Java
编译器完成繁重的工作),而且两者都引入了函数和扩展函数(在某个有限范围内静态地增加一个新方法到某个已有类型的能力)。Xtend
是基于 Eclipse 的,而 Kotlin 是基于 IntelliJ
的,两者都提供无界面构建。能够首先演变到其他 IDE
的语言有可能成为最后的赢家。

服务端应用不需要跨平台。做一个Web服务器,我想没有哪家公司今天用Linux,下个月就换Windows吧?如果仅仅是更换Linux发行版,如从Debian到Fedora,本质上讲其Linux内核是不变的,因此像C++这样纯编译类型的语言已经没什么问题。如果做游戏服务器,我想几乎都会选择Linux而不是Win平台。Java的跨平台优势的实用性其实已经被大大弱化了,可以说在实际应用中并不明显,在一般情况下几乎感知不出Java还能跨平台这个特性。作为三大商用JVM之一的JRockets是只有编译器的JVM,即应用启动时会将字节码全部编译为本地机器码,这其实就很大程度上摒弃了跨平台,而追求性能。

澳门新浦京app下载 3

Kotlin1.1发布日志:

今天,Java最大的优势在于其庞大而完善的生态系统。
一门编程语言是否能流行,主要是由其生态系统决定的。Java生态系统的完善性主要体现在以下几个方面:

澳门新浦京app下载 4

Our vision for Kotlin is to enable the use of a single expressive,
performant, strongly typed language across all components of a modern
application. Kotlin 1.1 makes two major steps towards this goal.

First, the JavaScript target is no longer experimental, and supports
all Kotlin language features, a large part of the standard library, as
well as JavaScript interoperability. This allows you to migrate the
browser frontend of your applications to Kotlin, while continuing to
use modern JavaScript development frameworks such as React.

Second, we’re introducing support for coroutines. As a lightweight
alternative to threads, coroutines enable much more scalable
application backends, supporting massive workloads on a single JVM
instance. In addition to that, coroutines are a very expressive tool
for implementing asynchronous behavior, which is important for
building responsive user interfaces on all platforms.

Below we describe these two changes further. In other news: we’ve
added type aliases, bound callable references, destructuring in
lambdas and more. See the details in our What’s new page (check out
the runnable examples!).

Java拥有世界上数量最多的程序员。你说他们是农民也好,但数量放在那里,最明显的效果就是公司招人的时候会比较容易地招到Java程序员。试想如果你想要做一套软件,你有一个很棒的技术方案需要用C++,Scala或Ruby等语言实现,但招不到足够的人手,那么计划多半泡汤。这时候你的应用Java也能做到,并且很轻松就能招到足够的人,那么你选择Java的可能性就要大一些。

在JavaScript引擎们爆发之前,主流JVM的技术一直是业界实用的高级语言虚拟机/运行时里的领先者。现在更多热钱流向了JavaScript引擎那边,它们终于开始接近JVM的技术水平了。但像是GC方面,最先进的通用GC技术现在恐怕还是在主流JVM里。(CLR的概念跟JVM是比较同质的,但在内部看主流JVM的实现远比CLR更动态,更能够适应变化的环境,两者的很多部分目前还不在一个层面上。当然,性能特性不同,适用于两者的性能测试方面也有很大不同。)

March 1, 2017

Java拥有大量的第三方类库。假如你想解析HTML,用C/C++这类语言恐怕多半只能自己编写解析算法库了,而如果是Java,你可以非常轻松地在Github上找到JSoup,使用Maven导入依赖后分分钟就搞定HTML。为此还有一句讽刺Java的话是:“我们不生产代码,我们只是Github的搬运工。”这句话从字面上看是很有道理的,但却忽略了对软件生产效率的提升所带来的巨大价值。对于软件的开发,公司的唯一成本其实就是“人头费”,每减少一个月开发时间,就能帮助公司节省几十万几千万的研发成本。

澳门新浦京app下载 5

澳门新浦京app下载 6Kotlin语言

Java拥有功能强大的IDE。
Eclipse,通过插件几乎可以满足你开发的任何需求。它虽然有些慢,但你可以通过JVM调优来提高程序的流畅度,千万不要使用默认的JVM参数。不过,IntelliJ
Idea已经完全超越Eclipse了,Idea的智能程度几乎可以媲美Win平台下的VS。我是那类离了Vim就活不下去的人,在这两款IDE中都有Vim插件从而让我愉快地存活下去。

Java的优势主要体现在:

Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。

Java拥有很多杀手级应用。 不必多说,Spring, Struts, Hibernate, Hadoop,
Tomcat, JBoss等等。

澳门新浦京app下载 7

Github源码:

Java的语法特性很少。对,这也是一项优点。C++相比C添加了大量特性,学起来费事不说,用起来还会降低代码可读性,其实是费了工夫不讨好。当今世界对编程语言的要求是语法简单,代码可读,对性能已经是退而求其次了,因此才诞生了Python,
Ruby这样的编程语言。有很多人批评Java语法写起来很臃肿,我承认这一点,但事实是,编程语言从来都不是因为语法臃肿而被淘汰的,决定其生死的是生态系统。对于批评者,引用知乎的一句话:”动态类型一时爽,代码重构火葬场”

1、Java拥有世界上数量最多的程序员。

其主要设计目标:

Java的性能已经足够高了。 Sun/Oracle的HotSpot
JVM内置的JIT编译器在运行时对字节码已经做出了非常大的优化努力,服务端应用启动后对JVM进行足够的”预热”,并给出合理的启动参数即可。如果不是对性能十分敏感的系统类应用,Java已经足够快了。有一种简单可行的方法可以形象地看出这点,在JVM启动参数中添加+XX:PrintCompilation可以看到JIT编译器的忙碌。当今世界对软件的需求量越来越大,在性能可接受的情况下,开发效率才是第一位的,这也是Python这类动态脚本语言流行的主要原因。

虽然大家都称他们为码农,但数量放在那里,最明显的效果就是公司招人的时候会比较容易地招到Java程序员。试想如果你想要做一套软件,你有一个很棒的技术方案需要用C++,Scala或Ruby等语言实现,但招不到足够的人手,那么计划多半泡汤。这时候你的应用Java也能做到,并且很轻松就能招到足够的人,那么你选择Java的可能性就要大一些。

创建一种兼容 Java 的语言

让它比 Java 更安全,能够静态检测常见的陷阱。如:引用空指针

让它比 Java 更简洁,通过支持 variable type inference,higher-order
functions ,extension functions,mixins and first-class delegation
等实现。

让它比最成熟的竞争对手 Scala语言更加简单。

以上仅做客观分析,并不想引起语言战争。毕竟,没有最好的语言,只有最适合某种项目的语言。引用黑格尔的一句话:”存在即合理。”

2、Java拥有大量的第三方类库。

一个非常好的交互式Kotlin学习教程:

假如你想解析HTML,用C/C++这类语言恐怕多半只能自己编写解析算法库了,而如果是Java,你可以非常轻松地在Github上找到JSoup,使用Maven导入依赖后分分钟就搞定HTML。为此还有一句讽刺Java的话是:“我们不生产代码,我们只是Github的搬运工。”这句话从字面上看是很有道理的,但却忽略了对软件生产效率的提升所带来的巨大价值。对于软件的开发,公司的唯一成本其实就是“人头费”,每减少一个月开发时间,就能帮助公司节省几十万几千万的研发成本。

此开篇第一回也。

3、Java拥有功能强大的IDE。

kotlin的定位非常有特点,它并不像是scala另起炉灶,将类库,尤其是集合类都自己来了一遍.kotlin是对现有java的增强,通过扩展方法给java提供了很多诸如fp之类的特性,但同时始终保持对java的兼容.这是kotlin官网首页重点强调的:

Eclipse,通过插件几乎可以满足你开发的任何需求。它虽然有些慢,但你可以通过JVM调优来提高程序的流畅度,千万不要使用默认的JVM参数。不过,IntelliJ
Idea已经完全超越Eclipse了,Idea的智能程度几乎可以媲美Win平台下的VS。我是那类离了Vim就活不下去的人,在这两款IDE中都有Vim插件从而让我愉快地存活下去。

这意味着什么呢?或者换个问法:我什么时候可以开始在我的项目中引入kotlin呢?我的回答是:现在,立刻,马上!

4、Java拥有很多杀手级应用。

上个图。

Spring, Struts, Hibernate, Hadoop, Tomcat, JBoss等等。

JVM语言家族

5、Java的语法特性很少。

澳门新浦京app下载 8JVM语言家族澳门新浦京app下载 9

C++相比C添加了大量特性,学起来费事不说,用起来还会降低代码可读性,其实是费了工夫不讨好。当今世界对编程语言的要求是语法简单,代码可读,对性能已经是退而求其次了,因此才诞生了Python,
Ruby这样的编程语言。有很多人批评Java语法写起来很臃肿,我承认这一点,但事实是,编程语言从来都不是因为语法臃肿而被淘汰的,决定其生死的是生态系统。

一个完整的语言有:

6、Java的性能已足够高。

前端、优化、后端、runtime、库

Sun/Oracle的HotSpot
JVM内置的JIT编译器在运行时对字节码已经做出了非常大的优化努力,服务端应用启动后对JVM进行足够的”预热”,并给出合理的启动参数即可。如果不是对性能十分敏感的系统类应用,Java已经足够快了。有一种简单可行的方法可以形象地看出这点,在JVM启动参数中添加+XX:PrintCompilation可以看到JIT编译器的忙碌。当今世界对软件的需求量越来越大,在性能可接受的情况下,开发效率才是第一位的,这也是Python这类动态脚本语言流行的主要原因。

JVM生态体系,把后面四个都给包办了。

jvm,是用C写的,跟操作系统打交道C/C++目前看来,是好的选择。虚拟机就是java与操作系统的中间层。

库/API就基本是java自身封装实现。

从最初的Jython和JRuby,到Scala,Clojure都是在JVM上实现的语言。为什么它们选择JVM?

跨平台

你的语言编译器后端只需要输出 JVM
字节码就可以。跨平台需要极大的工作量(这个轮子,造起来有点耗时耗力)

JIT (Just-In-Time 即时编译)性能

JIT 可以在运行中记录程序运行的特征,并在其基础上做大量的优化(Java
企业级应用的优秀性能很大程度上是由此而来)。 JIT 自从 HotSpot JVM 随
Java 1.2 发布以来,JVM JIT 的性能不断提高,是无可争议的成功产品。把 JVM
作为目标平台意味着大量的性能优化工作可以「外包」给 JVM 来做,大大缩减了
Guest 语言的开发预算。

JVM 作为一个成熟的高层运行环境,为 Guest
语言提供了很多运行时所需要的服务,比如内存管理(有业界领先的垃圾回收等),很大程度上避免了额外的独立开发。

社区庞大且成熟

JVM 有多个独立实现,也有若干厂商会持续推进,资料完备,社区巨大。Java
社区有大量成熟的库,一般来说,运行在 JVM
上的其它语言都会设计一个专用的「桥」来帮助直接使用 Java 的库。Java
有成熟的开发工具和环境。

题外话

另外一个趋势是把 Javascript
成为新的目标平台。很多主流语言都已经出现了编译器可以翻译成
Javascript,这也是得益于近年来 Javascript 虚拟机性能的显著提升。

List-of-languages-that-compile-to-JS:

下一代普遍可接受语言(next mass-appeal
language)中,人的因素应该起到重要作用。

  1. 新的程序设计语言中的代码片段应该具备一个典型程序员所希望的适度复杂性。程序员会去期望在每天的工作中使用的语言。
  2. 中级程序员认可。所谓中级程序员是指那些普遍对博客、微博或者新语言不感兴趣的人。
  3. 程序员可以不用别人的帮助或者接受培训,就能对新的程序设计语言中的代码片段的功能进行合理的准确的推测。

NBJL可以走多远就目前来看是难以下定论的,但是我相信这是一个比较实际的问题。我们所需要的新的程序设计语言能够不需要大规模的培训,程序员们可以快速上手。

在其功能方面,注诸如如下条目:

  • 类C的语法
  • 静态类型(动态类型过于松散并且性能有限)
  • 遵循面向对象程序设计(Object Oriented
    Programming,OOP)思想,并且包括函数式语言的元素(纯函数式言非主流编程语言)
  • 易于反射获得(从而避免静态类型限制)
  • 属性(getter和setter实在是太让人讨厌了)
  • 闭包
  • Null判断(提供一个判断变量能否为null的方式)
  • 并发(好过原始线程和共享可变状态(shared mutable state))
  • 模块化(需要考虑更大的单元)
  • 工具(希望新语言能够对于工具开发有所帮助)
  • 可扩展性(语言的设计具备很好的可扩展性,以支持其上的二次开发,而不需要去修改语言本身的设计)…

当然还有其他一些可以讨论的主题-语言设计其实堪比艺术品设计,有太多角度可以观察了。

Java虚拟机已经不再是仅仅局限在 Java
了,很多语言提供了脚本转换,可以让其他的程序在java虚拟机上运行,这样能够让更多的开发者能够依靠JVM在Java平台上大有作为。而且虚拟机以及
对应的字节码都是开源的,所以你也能很容易地生成对应字节码来做一款属于你自己的编程语言。我们今天来看看以下9种新的编程语言。

GroovyGroovy是一个被编译成字节码的面向对象的语言。它的语法风格与java很像,但是又没java那么混乱。Java程序员能够很快的熟练使用
Groovy;实际上,Groovy编译器是可以接受完全纯粹的Java语法格式的,这样能够让程序员在学习Groovy时不需要学习任何新语法。需要注
意使用Groovy的一个重要特点就是使用类型推断,即能够让编译器能够在程序员没有明确说明的时候推断出变量的类型。同时Groovy也提供了一个高级
架构来解决字符串处理,xml的序列化与反序列化以及单元测试等等 —
所有的这一切好处都能为程序员节约不少时间。

JRubyJRuby是用来桥接Java与Ruby的,它是使用比Groovy更加简短的语法来编写代码,能够让每行代码执行更多的任务。就和Ruby一
样,JRuby不仅仅只提供了高级的语法格式。它同样提供了纯粹的面向对象的实现,闭包等等,而且JRuby跟Ruby自身相比多了很多基于Java类库
可以调用,虽然Ruby也有很多类库,但是在数量以及广泛性上是无法跟Java标准类库相比的。

JythonJython,aka
JPython,属于第一种专门为JVM专用的脚本语言。它能够用Python语言来高效生成动态编译的Java字节码。一些可选的静态编译方式能够被用
来开发applets,servlets,以及beans。作为Jython的首席程序员,Jim
Hugunin,现在已经停止了Jython的相关工作而去微软干活。所以这门语言的发展仅仅也就从2005-2008年,所以就现在看来Jython已
经无法与Groovy以及JRuby作为对手了。现在Jython可以在一些商业应用中找到,也已经得到了WebSphere
Application Server以及IMB的商业Java EE产品部门的官方支持。

ClojureClojure是纯粹的函数式编程语言。与Scala类似,Clojure已经有很多内置的并行运行基础建设能够让很多方法同时执行。Clojure也是
被设计为生成通用语言,能够生成.NET以及JavaScript。虽然Clojure也能被直接编译成Java字节码,但是无法使用动态语言特性以及直
接调用Java类库。与其他的JVM脚本语言不一样,Clojure并不算是面向对象的。

ScalaScala经常被我们描述为多模式的编程语言,因为它混合了来自很多编程语言的元素的特征。但无论如何它本质上还是一个纯粹的面向对象语言。它相比传统编

程语言最大的优势就是提供了很好并行编程基础框架措施了。这是唯一一个在JVM中拥有actors

另一种并行编程代码生成器。Scala代码能很好的被优化成字节码,运行起来和原生Java一样快。KotlinKotlin是静态类型的语言,也可以编程成Java字节码以及JavaScript,作为一个时髦又表现丰富的编程语言,Kotlin就是被设计用来生
产高性能要求的程序的,所以运行起来和Java也是不相上下。Kotlin可以从
JetBrains InteilliJ Idea IDE这个开发工具以插件形式使用。

RhinoRhino是使用Java编写的开源的JavaScript引擎。当前是Mozilla公司在主导它的发展,Rhino的特点是为JavaScript加
了个壳,然后嵌入到Java中,这样能够让Java程序员直接使用。其中Rhino的JavaAdapters能够让JavaScript通过调用
Java的类来实现特定的功能。

CeylonCeylon是一个通用的,静态类型编程语言,也是基于阻塞以及面向对象的。据说这个语言深受Java的影响,而且它一开始就是被Red
Hat公司设计为给大型团队合作完成大型项目来的。Ceylon的主要努力方向是将语言变得更加可读,更加可预期,更加工具化以及更加模块化。据
Gavin King所说,Ceylon将不仅仅只是个编译器,而将是一个可以取代Java
SDK的新Ceylon SDK。

FantomFantom能够在运行时为JVM以及.NET或者JavaScript平台生成字节码,Fantom是与Groovy以及JRuby差不多的一样面向对
象的编程语言,但是悲剧的是Fantom无法使用Java类库,而是使用它自己扩展的类库。忘了说Fantom也包括actors,而且它最大的优势就是
在网站上有一个非常完备卓越的API文档系统。

中文参考文档:

国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring
Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。

澳门新浦京app下载 10开发者社区
QRCode.jpg

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图