Java 25 岁了!Google 加持的 Kotlin 真能取代它?

1995 年 5 月 23 日,Sun 公司在 Sun world 会议上正式宣布了 Java 的到来,从此一代编程语言界的翘楚就此诞生。而在不断地迭代与适配中,今时今日,Java 以需要满足各个层面开发者的需求与横扫各大编程语言榜单。

20世纪90年代,硬件领域出现了单片式计算机系统,这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。

由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。

为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。

由于在开发Oak语言时,尚且不存在运行字节码的硬件平台,所以为了在开发时可以对这种语言进行实验研究,他们就在已有的硬件和软件平台基础上,按照自己所指定的规范,用软件建设了一个运行平台,整个系统除了比C++更加简单之外,没有什么大的区别。1992年的夏天,当Oak语言开发成功后,研究者们向硬件生产商进行演示了Green操作系统、Oak的程序设计语言、类库和其硬件,以说服他们使用Oak语言生产硬件芯片,但是,硬件生产商并未对此产生极大的热情。因为他们认为,在所有人对Oak语言还一无所知的情况下,就生产硬件产品的风险实在太大了,所以Oak语言也就因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。

1994年6、7月间,在经历了一场历时三天的讨论之后,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿写了一个小型万维网浏览器WebRunner。 

1995年,互联网的蓬勃发展给了Oak机会。

Java 簡史

1991年,Sun公司的Green项目,Oak(James Gosling博士)。

1995年,推出Java测试版

1996年,JDK1.0

1997年,JDK1.1。

1995年5月23日, 0ak语言更名为Java,并且在 Sun World大会上正式发布Java 1.0版本。Java 语言第一次提出了“Write Once, Run Anywhere”的口号。

1996年1月23日,JDK 1.0发布,Java语言有了第一个正式版本的运行环境.JDK 1.0提供了一个解释执行的Java 虚拟机实现(Sun Classic VM) 。JDK1.0版本的代表技术包括 Java虚拟机、Applet 以及 AWT等。

1996年4月,10个最主要的操作系统供应商申明,将在其产品中嵌入Java 技术。同年9月,已有大约8.3万个网页应用了 Java技术来制作。在1996年5月底,Sun 公司于美国旧金山举行了首届JavaOne大会,从此JavaOne成为全世界数百万Java语言开发者每年一度的技术盛会。

1997年2月19日, Sun公司发布了JDK 1.1, Java 技术的一些最基础的支撑点9(如 JDBC等)都是在JDK1.1版本中发布的 JDK 1.1版的技术代表有JAR文件格式、JDBC、 JavaBeans 和 RMI. Java语法也有了一定的发展,如内部类(Inner Class)和反射(Reflection)都是在这个时候出现的。

从1.1.47后,每个JDK版本都有一个自己的名字(工程代号),分别为JDK 1.1.4 - Sparkler (宝石)JDK1.1:5- Pumpkin(南瓜) JDK1.1.6- Abigail(阿比盖尔,女子名)、JDK1.1.7- Brutus(布鲁图,古罗马政治家和将军)和JDK1.1.8- Chelsea(切尔西,城市名)

1998年,JDK1.2,大大改进了早期版本的缺陷,是一个革命性的版本,更名为Java2。1998年12月4日,JDK迎来了一个里程碑式的版本JDK1.2, 工程代号为Playground(竞技场)Sun公司在这个版本中把Java 技术体系拆分为3个方向,分别是面向桌面应用开发的J2SE (Java 2 Platform, StandardEdition)、面向企业级开发的J2EE (Java 2 Platform, Enterprise Edition)和面向手机等移动终端开发的J2ME (Java 2 Platform, Micro Edition)。在这个版本中出现的代表性技术非常多,如EJB、Java Plug-in、Java IDL 以及 Swing等,并且这个版本中Java 虚拟机第一次内置了 JIT (Just In Time)编译器(JDK 1.2中曾并存过3个虚拟机, Classic VMs HotSpot VM 和 Exact VM, 其中 Exact VM 只在 Solaris平台出现过:后面两个虚拟机都是内置JIT编译器的,而之前版本所带的 Classic VM只能以外挂的形式使用JIT编译器)。在语言和API级别上,Java 添加了 strictfp关键字与现在 Java编码之中极为常用的一系列 Collections集合类。在1999年3月和7月,分别有JDK 1.2.1和JDK1.2.2两个小版本发布。

1999 Java被分成J2SE、J2EE 和J2ME,JSP/Servlet技术诞生。

1999年4月27日, HotSpot 虚拟机发布。HotSpot 最初由一家名为“Longview Technologies"的小公司开发,因为 HotSpot 的优异表现,这家公司在1997年被Sun公司收购了。HotSpot 虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK1.3及之后所有版本的Sun JDK 的默认虚拟机。

2000年5月8日,工程代号为 Kestrel(美洲红)的JDK 1.3发布,JDK 1.3相对于JDK 1.2的改进主要表现在一些类库上(如数学运算和新的 Timer API等),JNDI服务从JDK 1.3开始被作为一项平台级服务提供(以前JNDI仅仅是一项扩展),使用CORBA IIOP来实现RMI的通信协议等。这个版本还对 Java 2D做了很多改进,提供了大量新的 Java 2D API,并且新添加了 JavaSound类库。JDK 1.3有一个修正版本JDK 1.3.1,工程代号为 Ladybird(瓢虫),于2001年5月17日发布。从JDK1.3开始, Sun 公司维持了一个习惯:大约每隔两年发布一个JDK的主版本,以动物名作为工程代号,期间发布的各个修正版本则以昆虫名作为工程代号。

2002年2月13日, JDK1.4发布,工程代号为Merlin (灰背)。

2002年9月16日,发布了工程代号为Grasshopper (蚱蜢)的JDK 1.4.1。

JDK1.4是Java真正走向成熟的一个版本,Compaq、 Fujitsu、 SAS、 Symbian 以及IBM等著名公司都有参与甚至实现自己独立的JDK 1.4。哪怕是在十多年后的今天,仍然有许多主流应用(Spring、 Hibernate 以及 Struts等)能直接运行在JDK 1.4之上,或者继续发布能运行在JDK 1.4上的版本。

2004年,J2SE 5.0 (1.5.0) Tiger老虎.为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0。 

2006年,J2SE 6.0 (1.6.0) Mustang野马.此时,Java的各种版本被更名,取消其中的数字"2":J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME

2009年4月20日甲骨文收购Sun公司,交易价格达74亿美元

2011年,JavaSE7.0

2014年 ,JavaSE8.0。Java 8是Java自Java 5(发布于2004年)之后的最重要的版本。这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性。

Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:函数式开发者非常熟悉这些概念。很多JVM平台上的语言(Groovy、Scala等)从诞生之日就支持Lambda表达式,但是Java开发者没有选择,只能使用匿名内部类代替Lambda表达式。

Lambda的设计耗费了很多时间和很大的社区力量,最终找到一种折中的实现方案,可以实现简洁而紧凑的语言结构。最简单的Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:

Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );

在上面这个代码中的参数e的类型是由编译器推理得出的,你也可以显式指定该参数的类型,例如:

Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.println( e ) );

如果Lambda表达式需要更复杂的语句块,则可以使用花括号将该语句块括起来,类似于Java中的函数体,例如:

Arrays.asList( "a", "b", "d" ).forEach( e -> {
    System.out.print( e );
    System.out.print( e );
} );

Lambda表达式可以引用类成员和局部变量(会将这些变量隐式得转换成final的),例如下列两个代码块的效果完全相同:

String separator = ",";
Arrays.asList( "a", "b", "d" ).forEach( 
    ( String e ) -> System.out.print( e + separator ) );

final String separator = ",";
Arrays.asList( "a", "b", "d" ).forEach( 
    ( String e ) -> System.out.print( e + separator ) );

2017年9月22日, Java SE 1.9正式发布。Java 9提供了一个全新的模块系统,它的核心变化就是引入了一种新的 Java编程组件,也就是模块化。Java 9提供了轻量级JSON API;使用G1作为默认的垃圾收集器,替代了之前默认使用的 Paralel GC; 引入了 jshel这个交互性工具,jshel 为Java带来了读入一一求值一一打印一一循环的功能。它的目的在于以即时结果和反馈的形式,简化原型的实现并帮助我们探索语言在编码时的可选项;对os process拥有更好的控制和管理方式;全面支持Http 2.0,以所谓的孵化器模块交付,并且为Java配备一个全新的 Http客户端来替代 HttpURLConnection,同时还实现 Http 2.0 和 websockets。

从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, Java 14。

Java 9引入了模块化系统,这是个看起来很美的特性,可是对程序员来说,这是一个破坏性的更新,因为JDK做了模块化,但是很多第三方库没有做模块化, 如果想让自己的项目也模块化,很有可能是一次不断填坑的经历,尤其在使用第三方库的时候。Java 11的ZGC是个有吸引力的特性,它的设计目标是:支持TB级内存容量,GC暂停时间低(<10ms),对整个程序吞吐量的影响小于15%,确实挺让人激动的!如果真的实现了,程序员就可以可劲儿造对象,而不用考虑GC了,可惜这仍然是个实验性质的版本。至于局部变量类型推导,也只是方便了变量的声明而已。一个JDK的版本如果想被广泛采用,一定得能提升开发效率(如泛型、注解),带来变革,这样才有吸引力, 如果给程序员们带来了麻烦, 大家就会用脚投票了。

J2SE Java的标准版本 (Java2 Standard Edition) 定位在客户端,主要用于桌面应用软件的编程;

J2ME (Java2 Micro Edition) 主要应用于嵌入式系统开发,如手机和PDA的编程;

J2EE 企业版本(Java2 Enterprise Edition)定义在服务器端Java2的企业版,主要用于分布式网络程序的开发,如电子商务网站;

对于一个成熟的公司来说,代码只是辅助业务的手段,而非目的。如果没有十分的利益保证,别说升级,连bug都是可以不修的。

從Java 到 Kotlin

Kotlin 设计目标

  • 创建一种兼容Java的语言

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

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

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

Kotlin 尝试提供比 Java 更好的函数、模式匹配、空指针预防和泛型。该语言同时也支持特征(traits)和模式匹配。

编程语言趋势报告1200 万开发人员使用JavaScript Kotlin增速最快

数据分析网站 SlashData 发布了第 18 刊开发者研究报告。该次报告调研从 2019 年 11 月持续到 2020 年 2 月,共调查了 159 个国家的 17000 名开发者。

从该报告中,我们可以得出很多已知或者没想到的分析结果,比如:

JavaScript 是最受欢迎的编程语言,全球有超过 1200 万的开发者在使用它。Python 新增了近 220 万开发者,在流行程度上超过了 Java。按百分比计算,Kotlin 是增长最快的语言社区。在过去两年中,它的规模几乎翻了一番。每 5 个开发者中就有 3 个参与过开源项目献。使用 CI/CD 工具的开发人员成为专业开发人员的可能性提高了 20 个百分点。从事大数据和深度学习框架的 ML 开发人员更倾向于在混合云和多云上部署代码。增强现实(AR)和虚拟现实(VR)的从业者大多是具有不同兴趣和技能的热情爱好者。22% 的 AR&VR 非开发者正在学习代码。最受该人群欢迎的语言是 Java、C++ 和 C#。
大多数开发人员(59%)都在从事 DevOps 工作,其中 27% 的人目前正在从事涉及 DevOps的项目。

下面,我们针对报告做一些详细分析,完整的报告可以在文末获取。

上千万开发者使用 JavaScript

根据最新的数据统计,全球共有 2040 万活跃的开发者,而根据 SlashData 的报告显示,全球有 1,220 万开发者在使用 JavaScript,像 Google 维护的 AngularJS、Facebook 的 React 和 Vue.js 都享受着 JavaScript 框架的大力扶持。

据该公司估计,在过去两年中,已经有 300 万开发者加入了 JavaScript 社区。因此开发者分析机构 RedMonk 将 TypeScript 列为第九大最受欢迎的语言,甚至超过了苹果公司的 Swift。

Java 和 Python 最受欢迎

Java 和 Python 仍然是最受开发者喜欢的语言。据 SlashData 统计,全球约有 840 万 Python 开发者和 820 万 Java 开发者。

其他拥有超过 100 万用户的语言还包括 C++、C#、Visual tools、Kotlin、Swift、Go、Ruby、Objective C,Rust 的用户为 60 万,Lua 的用户数量也达到了了 50万。

Python 日益受欢迎的原因之一,就是人工智能在当今科技领域的重要性。据报告显示,大约四分之三的机器学习开发者和数据科学家在使用 Python,只有不到 20% 的比例在使用 R 语言。

Kotlin 增速最快

Kotlin 是过去两年来增长最快的语言,共新增了 110 万开发者,最大的原因应该是 Google 选择了 Kotlin 作为 Android 开发的首选语言。这一数据与 GitHub 近两年报告当中的数据也是吻合的。

根据 SlashData 报告中的数据,在过去一年中,使用 Swift 的开发者数量实际上比前一年有所下降,目前为 200 万。与此同时,Objective C 仍然有 120 万开发者在使用,但这个数字也在下降。

半数以上开发者参与开源

调查还发现,59% 的开发者参与了开源项目。有一个数据很有意思,在参与开源项目的开发者中,24 岁以下的开发者占了近三分之一。

有 29% 的开发者参与开源的原因,是希望提高自己的编程能力;26% 的人相信开源软件可以为开发者和行业带来好处;只有 3% 的开发者在开源项目的实际工作中得到了报酬。

除了Android开发Kotlin 还能做什么?六款优质Kotlin项目分享

Kotlin 语言 2011 年由 JetBrains 推出,2012 年开源,2017 年成为 Android 官方开发语言,并于 2019 年成为 Andoid 开发官方首选语言。凭借其原生支持 Java 以及更少代码量的优势,也有越来越多的开发者投向 Kotlin 的怀抱,同时 Kotlin 在其他领域的应用也越来越广泛,今天就为大家介绍六款优质的 Kotlin 项目。

1.AndroidZdog

项目作者:prostory

开源许可协议:MIT

项目地址:https://gitee.com/prostory/AndroidZdog

Android平台上的伪3D图形动画引擎Zdog,使用kotlin编写。

2.HiWeather

项目作者:ZhiyuanLing

开源许可协议:GPL-3.0

项目地址:https://gitee.com/vitoling/HiWeather

一个使用 Kotlin 语言开发的天气网站,其他使用的技术包括 SpringBoot、Webmagic等。

3.wechat-miniprogram-plugin

项目作者:zxy

开源许可协议:MulanPSL-1.0

项目地址:https://gitee.com/zxy_c/wechat-miniprogram-plugin

基于JetBrains平台的微信小程序插件。

4.bk-ci

项目作者:腾讯蓝鲸智云

开源许可协议:MIT

项目地址:https://gitee.com/Tencent-BlueKing/bk-ci

bk-ci是一个免费并开源的CI服务,可助你自动化构建-测试-发布工作流,持续、快速、高质量地交付你的产品。

5.Twobbble

项目作者:生存以上生活以下

开源许可协议:Apache-2.0

项目地址:https://gitee.com/550609334/Twobbble

这是一个完全使用Kotlin开发,小而美的Dribbble客户端。

6.OKBook

项目作者:Xiaolei123

开源许可协议:Apache-2.0

项目地址:https://gitee.com/xcode_xiao/OKBook

kotlin + 协程 + MVVM 模式来编写的看小说APP。

以上六款开源项目不知道能否让大家更了解 Kotlin,如果你还想在 Gitee 上看到更多 Kotlin 项目,那么就点击后面的链接去看看吧:https://gitee.com/explore/all?lang=Kotlin&order=starred

Kotlin开发者社区

专注分享 Java、 Kotlin、Spring/Spring Boot、MySQL、redis、neo4j、NoSQL、Android、JavaScript、React、Node、函数式编程、编程思想、"高可用,高性能,高实时"大型分布式系统架构设计主题。

High availability, high performance, high real-time large-scale distributed system architecture design

分布式框架:Zookeeper、分布式中间件框架等
分布式存储:GridFS、FastDFS、TFS、MemCache、redis等
分布式数据库:Cobar、tddl、Amoeba、Mycat
云计算、大数据、AI算法
虚拟化、云原生技术
分布式计算框架:MapReduce、Hadoop、Storm、Flink等
分布式通信机制:Dubbo、RPC调用、共享远程数据、消息队列等
消息队列MQ:Kafka、MetaQ,RocketMQ
怎样打造高可用系统:基于硬件、软件中间件、系统架构等一些典型方案的实现:HAProxy、基于Corosync+Pacemaker的高可用集群套件中间件系统
Mycat架构分布式演进
大数据Join背后的难题:数据、网络、内存和计算能力的矛盾和调和
Java分布式系统中的高性能难题:AIO,NIO,Netty还是自己开发框架?
高性能事件派发机制:线程池模型、Disruptor模型等等。。。

合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。不积跬步,无以至千里;不积小流,无以成江河。

Kotlin 简介

Kotlin是一门非研究性的语言,它是一门非常务实的工业级编程语言,它的使命就是帮助程序员们解决实际工程实践中的问题。使用Kotlin 让 Java程序员们的生活变得更好,Java中的那些空指针错误,浪费时间的冗长的样板代码,啰嗦的语法限制等等,在Kotlin中统统消失。Kotlin 简单务实,语法简洁而强大,安全且表达力强,极富生产力。

Java诞生于1995年,至今已有23年历史。当前最新版本是 Java 9。在 JVM 生态不断发展繁荣的过程中,也诞生了Scala、Groovy、Clojure 等兄弟语言。

Kotlin 也正是 JVM 家族中的优秀一员。Kotlin是一种现代语言(版本1.0于2016年2月发布)。它最初的目的是像Scala那样,优化Java语言的缺陷,提供更加简单实用的编程语言特性,并且解决了性能上的问题,比如编译时间。JetBrains在这些方面做得非常出色。

Kotlin语言的特性

用 Java 开发多年以后,能够尝试一些新的东西真是太棒了。如果您是 Java 开发人员,使用 Kotlin 将会非常自然流畅。如果你是一个Swift开发者,你将会感到似曾相识,比如可空性(Nullability)。Kotlin语言的特性有:

1.简洁

大幅减少样板代码量。

2.与Java的100%互操作性

Kotlin可以直接与Java类交互,反之亦然。这个特性使得我们可以直接重用我们的代码库,并将其迁移到 Kotlin中。由于Java的互操作性几乎无处不在。我们可以直接访问平台API以及现有的代码库,同时仍然享受和使用 Kotlin 的所有强大的现代语言功能。

3.扩展函数

Kotlin 类似于 C# 和 Gosu, 它提供了为现有类提供新功能扩展的能力,而不必从该类继承或使用任何类型的设计模式 (如装饰器模式)。

4.函数式编程

Kotlin 语言一等支持函数式编程,就像Scala一样。具备高阶函数、Lambda 表达式等函数式基本特性。

5.默认和命名参数

在Kotlin中,您可以为函数中的参数设置一个默认值,并给每个参数一个名称。这有助于编写易读的代码。

6.强大的开发工具支持

而由于是JetBrains出品,我们拥有很棒的IDE支持。虽然Java到Kotlin的自动转换并不是100% OK 的,但它确实是一个非常好的工具。使用 IDEA 的工具转换Java代码为 Kotlin 代码时,可以轻松地重用60%-70%的结果代码,而且修改成本很小。

Kotlin 除了简洁强大的语法特性外,还有实用性非常强的API以及围绕它构建的生态系统。例如:集合类 API、IO 扩展类、反射API 等。同时 Kotlin 社区也提供了丰富的文档和大量的学习资料,还有在线REPL。

A modern programming language that makes developers happier. Open source forever

图来自《Kotlin从入门到进阶实战》 (陈光剑,清华大学出版社)

图来自《Kotlin从入门到进阶实战》 (陈光剑,清华大学出版社)

https://kotlinlang.org/

猜你喜欢

转载自blog.csdn.net/universsky2015/article/details/108353989