聊聊Java 平台上的非Java语言

姓名:牛康  学号:17101223416

转载自:https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513531&idx=1&sn=b7d584d02fa82a8070411f2d8b2e8b9d&chksm=80d67a78b7a1f36e8dea07201c67a3a575feaed8059ae34e5cb69f90f37b94f31b9c0637e255&scene=38#wechat_redirect

【嵌牛导读】:Java 的创造者们在一开始就把Java 语言和Java 虚拟机分开, 现在看来是个非常明智的决定。Java虚拟机定义了一个"软CPU",   和Intel 的x86 的指令集一样, 这个软CPU也有一套自己的指令,这就意味者对于任意一门编程语言, 只要你能编译成Java 的字节码指令,或者在运行时动态的生成字节码指令,  就可以运行在Java虚拟机中。

【嵌牛鼻子】:Jython和JRuby、Groovy、Scala 和 Clojure

【嵌牛提问】:Java 虚拟机发展了这么多年, 已经非常的成熟和稳定, 是一个很有吸引力的平台。 除了Java 之外还有不少编程语言慕名而来, 这些语言是怎样的存在呢?

【嵌牛正文】:

一、Jython和JRuby

从这两位名字开头的字母 "J" 就可以看出来这两个语言和Java 的血缘关系。

没错,他们就是可以运行在Java 虚拟机上的Python 和 Ruby 。  不同于用C语言写的CPython和 CRuby,  这两者需要一个JVM才能运行。

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

下面就是一个在JRuby 脚本中调用 Java Swing的例子:

如果你思考的深入一些,就会有这么一个问题 : 由于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 只是小范围内或者特定场合使用吧。

二、Groovy

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

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

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

1.  Gradle

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

下面是一个例子, 大家可以感受一下和Maven 的区别:

2. Grail

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

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

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

三、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 类库互操作。

四、总结

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容