java
您现在所在的位置:首页>企业动态>java

聊聊Java 平台上的非Java语言

编辑:学到牛牛IT培训    发布日期: 2022-02-24 17:09:26  

Java 的创造者们在一开始就把Java 语言和Java 虚拟机分开, 现在看来是个非常明智的决定。

Java虚拟机定义了一个"软CPU",   和Intel 的x86 的指令集一样, 这个软CPU也有一套自己的指令,这就意味者对于任意一门编程语言, 只要你能编译成Java 的字节码指令,或者在运行时动态的生成字节码指令,就可以运行在Java虚拟机中。

Java 虚拟机发展了这么多年, 已经非常的成熟和稳定, 是一个很有吸引力的平台。 除了Java 之外还有不少编程语言慕名而来,今天就来聊一聊。

1、Jython和JRuby

从这两位名字开头的字母 "J" 就可以看出来这两个语言和Java 的血缘关系。没错,他们就是可以运行在Java 虚拟机上的Python 和 Ruby 。不同于用C语言写的CPython和 CRuby,这两者需要一个JVM才能运行。

既然是运行在JVM上的语言, 自然要能调用Java 类库, 要不然放着这么多优质Java 资源不用多可惜!

如果你思考的深入一些,就会有这么一个问题 :由于Python 和ruby 都是脚本语言,都是解释执行的。没有编译的过程,那Jython和JRuby 在解释的过程中,肯定得生成Java 字节码,要不然JVM就会把他们拒之门外。那字节码是怎么在运行中生成的?

答案就是ASM , 一个可以动态生成字节码的Java 类库。

我个人觉得Jyhton和JRuby能在JVM上运行起来,调用Java 类库, 是个很好的卖点, 但是却难以大规模流行, 原因可能也是类库造成的。

最早的时候学习C语言, 由于没有良好的类库,就是对一个字符串操作都很麻烦, 那些更加高层的语言例如Java, Python, Ruby 就弥补了这个缺陷, 语言自带强大的类库, 再加上社区的贡献, 用起来非常顺手。 说个题外话, 这也直接导致了很多初学者的疑问: 语言都封装好了, 我还学数据结构干嘛?!

Python, Ruby 社区已经积累了大量的、好用的库, 他们才是Python, Ruby一派繁荣的主要原因,  但是这些库都是Python, Ruby写的, 也有不少是C语言写的, 这些海量的类库全部移植到Java 上绝非易事, 我们也不能要求类库的作者同时提供Java 版本 。

而Java 现成的类库总是感觉和Python , Ruby 有一点Gap,  语言设计的思维不同, 虽然可以集成互操作, 但还是感觉别扭。

也许Jython和JRbuy 只是小范围内或者特定场合使用吧。

2、Groovy

Groovy 并不像Jython, JRuby, 它并不是一个现有语言在JVM上的移植, 而是一个全新设计的语言。

Groovy被定义为JVM上的动态脚本语言, 适合编写脚本, 测试用例和 领域特定语言(DSL)。

用Groovy 写的软件中有两个比较知名:

1.Gradle

一个风头正劲的Build 工具, 得益于Groovy 简洁的语法, 可以用“Build领域特定的语言”来描述一个软件的构建过程,   写出的Build脚本 和Ant, Maven 的xml 脚本 相比,读起来更赏心悦目。 在Web项目,Android项目的 Build过程中有大量使用。

2. Grail

这应该是模仿Ruby on Rail的一个项目,热度已经过去, 估计使用的人不多了。

记得在2008年IBM的毛新生带领着团队搞了一个Project Zero出来, 基于Groovy和PHP,  目标是快速Web项目开发, 喧嚣了一阵也是归于沉寂。

在JVM上, Java 是毋庸置疑的老大, Spring 是一座难以撼动的大山, 所以Groovy 最好还是把注意力集中到 小工具,测试 以及Build上, 这是它能最大发挥能量的地方。

3、Scala 和 Clojure

Scala 第一次进入我的视线是一则新闻: Twitter 决定把核心应用从Ruby on Rails 迁移到Scala,作为曾经的Ruby拥趸, 看到这个消息是让人沮丧的 : Twitter 可是Ruby on Rails 经常拿来宣传的一个明星系统了,   现在Twitter 竟然想转到Scala , Scala是什么鬼?  怎么可能获得Twitter 工程师的青睐?

后来看了一下,Scala是一个很有趣的语言, 在他的官网上写着“Object-Oriented Meets Functional” , 面向对象遇上了函数式编程 !   也就是说一门语言混合了两种编程范型。 不仅如此,它还是一个可以运行在Java 虚拟机上的语言, JVM的成熟和稳定, 可能也是Twitter 工程师选择Scala的重要原因。

有人说了,我面向对象还没学完呢, 还学函数式编程?我推荐你看看《黑客与画家》一书, 看完以后十有八九会被Paual 自身成功的案例和 富有煽动性的语言给鼓动起来,热血沸腾的去尝试函数式编程语言Lisp(我就是如此)

但是我相信大部分人都只是浅尝辄止, 因为纯函数式编程和我们日常使用的C, Java, Python 这些命令式编程语言大相径庭, 需要巨大的思维转变, 最好是完全忘掉之前所学的命令式编程才行, 所以学习曲线极为陡峭, 把很多人都吓回去了。

现在好了, Scala即支持OO, 又支持Functional , 你可以在一个相对舒服的环境渐渐的去尝试函数式编程的奥妙,确实是不错的选择。

如果你非要学习一个纯粹的函数式编程语言, 可以考虑Clojure ,这是一个运行在JVM中的lisp方言, 同样可以和Java 类库互操作。

4、总结

说了这么多, 如果让我为一个大型项目选择语言, 我极有可能还是要选择Java,  对于一个大型项目来说, 代码的可读性、可维护性是非常重要的,我之前读一些动态语言的代码, 看到一个变量而不知道它的类型,没法查看它的行为,  这是非常令人抓狂的体验。

而Java 这种静态类型的语言,IDE的感知能力, 安全重构的能力是极为重要的, 让人觉得安全,可控,适合大团队协作。

声明:本文编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。版权归原作者所有,如涉及作品内容、版权和其它问题,请在30日内与本公众号联系,我们将在第一时间删除内容!

免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • java_java学习教程_java最新资讯-学到牛牛
    java_java学习教程_java最新资讯-学到牛牛

    扫一扫,免费咨询

  • java_java学习教程_java最新资讯-学到牛牛
    java_java学习教程_java最新资讯-学到牛牛

    微信公众号

  • java_java学习教程_java最新资讯-学到牛牛
java_java学习教程_java最新资讯-学到牛牛

学一流技术,找高薪工作

java_java学习教程_java最新资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问