聊聊Java 平台上的非Java语言

Kotlin or Java?(简单聊聊Kotilin) Kotlin or Java? 结论放前面。根据个人的一些了解和受限于经验和眼界,个人认为kotlin是一门非常有潜力的语言,语法糖真的甜,也可实现和Java的混编。Kotlin Native的实现,可以让Kotlin不单单可以通过运行在JVM上实现跨平台,更可以直接生成对应平台上的二进制可执行文件实现跨平台。 在移动端开发领域,Kotlin Native实现了同一份代码既可以在Android平台也可以在IOS平台上运行。而且Kotlin在被Google官宣作为Android的一级开发语言后,在移动端Ko 阅读详情

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 资源不用多可惜!

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

0?wx_fmt=png

0?wx_fmt=png

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

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

(码农翻身注: 参见文章《ASM: 一个低调成功者的自述》)

我个人觉得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过程中有大量使用。

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

0?wx_fmt=png

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的重要原因。

(码农翻身注: 关于函数式编程, 可以参考《命令式编程 vs 声明式编程》)

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

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

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

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

4

总结

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

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

(完)

你看到的只是冰山一角, 更多精彩文章,参见《码农翻身2016文章精华》

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577

0?wx_fmt=jpeg

公众号:码农翻身

“码农翻身”公众号由工作15年的前IBM架构师创建,分享编程和职场的经验教训。


编辑推荐

掘金是一个高质量的技术社区,从移动开发到架构设计,编程语言到开源类库,让你不错过互联网开发的每一个技术干货。长按图片二维码识别或者各大应用市场搜索「掘金」,技术干货尽在掌握中。

0?wx_fmt=png

JAVA零基础 JAVA初学者可以看看,JAVA零基础的样例代码,高手就不需要了,节约时间。 立即下载

相关推荐

OB4.X集群状态running但是oceanbase-ce is not running

自 V3.2.0 起,若 obd 设置了加密密钥,执行 display 命令输出的集群信息中,密码相关内容为加密状态。若需输出明文密码,可在命令中添加 --epk/–encryption-passkey 指定密钥用于验证。obd 运维的数据库,启停需要使用obd进行操作,停机时候没有使用obd会导致集群状态running但是oceanbase-ce is not running。查看集群中的租户时无租户反馈,警告oceanbase-ce is not running,但是查询集群状态明明是running。

qq961573863的博客 1217

Java不仅仅是Java:盘点运行在JVM下的其他9种语言

Java 10终于如期发布了,这是Java开发届的一件大事。但是作为拥有最庞大企业开发社群和开发人员的一个完整的生态环境,围绕着Java运行时环境(JRE)和Java虚拟机(JVM),早已不单单是Java语言的一言堂了,而是挤满了各式各样的参与者。 本文,就将带领大家盘点下,运行在Java虚拟机环境下的这些别样的语言们。我们完全有理由相信,随着JVM性能的进一步提升,这...

代码湾 1428

TP4054充电电路发热严重?手把手教你调整电阻值降低温度(附实测数据)

本文针对TP4054锂电池充电电路发热严重的问题,提供了详细的排错与解决方案。通过分析发热原理,指出核心在于PROG引脚电阻值设定,并手把手指导如何计算和选择正确的电阻以降低充电电流与温度。文末附有不同电阻下的实测温度与性能数据,为电子爱好者和工程师提供了实用的调试参考。

p4q5r6s7t的博客 406

Java中的多语言互操作性

Java是一门强大且广泛应用的编程语言,但在某些场景下,单纯使用Java可能无法满足所有需求。例如,你可能需要利用其它语言的特定库,或者与已有的系统进行集成。在这种情况下,多语言互操作性(Interoperability)变得尤为重要。本文将详细探讨Java与其他编程语言交互的几种主要方式,并通过代码示例帮助你更好地理解这些技术。

weixin_53840353的博客 1438

LM Studio Bionic:本地AI智能体从部署到实战完整指南

AI智能体作为能够自主规划、执行多步任务的人工智能系统,其核心原理在于结合大语言模型的推理能力与工具调用机制。通过状态保持和任务分解算法,智能体实现了从单次问答到持续协作的技术跃迁。在工程实践中,这种架构显著降低了复杂任务自动化的门槛,特别适用于数据敏感场景和定制化需求。以Tesla V100等专业硬件为例,本地部署能充分发挥其大显存优势,支持更高精度的模型量化格式。在实际应用层面,智能体可无缝集成到代码审查、文档生成等开发工作流中,而LM Studio Bionic通过统一界面整合了模型服务、任务规划器等

weixin_29053695的博客 662

QGroundControl实现多机控制

前言 作为西安电子科技大学的本科生一名,目前在研究关于无人机导航规划与轨迹控制方面。 目前在跟导师做关于雷达无人机的一个项目,在这里记录一下关于QGC地面站实现多机控制的一些方法。 某些地方写的可能不是很完善,欢迎大家补充。 目前该文章还未写完,后期本人会继续编写 多机控制原理 多机地面站支持TCP,UDP和串口等三种连接方式,首先我们需要对这两种连接方式抽象出一个基类LinkInterface,提供两个虚函数分别对应于数据接受和发送处理,针对于不同的连接方式实现TCP,UDP和串口连接相对应的子类TCPL

Phillweston的博客 8432

有没有想过Java和其他编程语言集成使用,快来了解一下!!!

Java 作为一种成熟且广泛使用的编程语言,提供了多种方式与其他编程语言进行集成。这种集成可以通过不同的技术和工具实现,以满足不同的需求。

物联网工程专业 - 软硬兼修 698

力扣(Leetcode)第1题:两数之和(C语言版本)

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], target = 6

qq_39855356的博客 3326

java语言的主要特点

Java语言是是一门面向对象编程语言,具有以下九大特点: 一.简单性: Java是纯面向对象语言,语法简单明了,易于掌握。 Java使用接口取代了多重继承,并且取消了指针,因为多重继承和指针会使程序变得复杂。 Java还会自动地收集内存垃圾,使得内存管理变得更为简单。 Java还提供了丰富的类库、API文档以及第三方开发包,还有大量Java的开源项目。 二.面向对象性: 面向对象性事Java语言的...

weixin_44827983的博客 7609

Nacos 从困惑到蒙圈(9)Nacos 适配 达梦数据库【最新版】

介绍Nacos适配达梦数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1380

迟滞电压比较器电路的原理与计算

迟滞电压比较器是一种具有双阈值特性的电路,通过正反馈机制实现抗噪声干扰功能。文章详细分析了其工作原理,包括同相型和反相型两种结构的电压阈值计算与电阻设计方法,并提供了已知门限求电阻和已知电阻求门限的推导公式。工程应用中需注意输出类型匹配、电阻取值范围、噪声裕量设计等问题。该比较器在信号处理、波形转换等场景中具有重要应用价值,设计时需综合考虑供电电压、参考电压和噪声特性等因素。

硬核科技 2688

学Java必看:零基础都可以学的Java视频学习教程【包括笔记,工具,源码,作业,面试题】

目录 前言 课程目录 第一章:Java开发环境搭建 第二章:标识符与关键字 第三章:字面量与变量 第四章:数据类型 第五章:运算符 第六章:控制语句 第七章:方法 第八章:类和对象 第九章:myeclipse的使用 第十章:封装与构造方法 第十一章:this关键字 第十二章:static关键字 第十三章:方法覆盖与多态 第十四章:final关键字与访问修饰符 前言 学Java的小伙伴越来越多,但是从哪学?如何学?想必这都是刚开始自学最头疼的问题! 为了帮助大家,今天

f5465245的博客 792

智元机器人开源具身仿真框架 Genie Sim 入门教程

GenieSim是AgiBot推出的具身智能仿真框架,提供完整闭环开发管道,包括轨迹生成、模型训练和基准测试。框架支持Docker容器化部署,要求Ubuntu 22.04和NVIDIA硬件环境。主要功能涵盖: 支持12种基准测试任务 提供ADER评估框架 集成UniVLA/RDT等基线模型 支持PICO/键盘遥操作 具备轨迹记录回放功能 提供完整API控制接口 开发者可通过Hugging Face获取场景资产,使用标准化ROS主题与仿真环境交互。框架特别优化了碰撞检测和抓取物理模拟,适用于从简单抓取到复杂操

2506_90492529的博客 2544

聊聊java平台哪些事

如果有人让你聊聊java平台,你会怎么说呢?java平台包括的东西太多了,有java语言,java类库,jvm,还有一些java常用到的框架......,简直说都说不过来,下面是我的一些见解,算是现阶段对java的一点总结,可以指导我向哪些方面前进。 (1)java语言 java语言是一门面向对象的编程语言,号称Write once, run anywhere,书写一次,到处运行。其实java...

jiankangzhu的博客 398

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java小白入门:聊聊Java这门编程语言

一、什么叫做编程 首先我们应该了解一下什么叫做编程。 百度百科词条的解释: 编程是编定程序的简称,是让计算机代我们解决某个问题,是对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。 对于该解释,大家也包括我自己可能并不是很理解,那我们反正就这么理解,一般来说编程就是写代码,目的是为了解决问题,解决什么问题需要看需求,看甲方爸爸的需求,所以也就有了...

游戏建模零基础入门教程 2094

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

聊聊Java那些事

Java是由詹姆斯·高斯林(James Gosling)等人在20世纪90年代初开发的一种计算机编程语言。Java最初是为了开发嵌入式系统中的应用程序而设计的,但随着互联网的兴起,Java逐渐成为一种广泛应用于网络和分布式计算环境中的编程语言。 Java的设计目标之一是实现“一次编写,到处运行”的跨平台特性。为了实现这一目标,Java使用了一种称为Java虚拟机(JVM)的抽象执行环境。Java源代码首先被编译成字节码(一种中间代码),然后通过JVM在不同平台上执行。 Java的

凛鼕将至的博客 1314

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

我所知道JVM虚拟机之聊聊Java语言

前言前篇聊了一会JVM,本篇文章再从几个方面来聊聊Java一、TIOBE排行榜TIOBE 排行榜:https://www.tiobe.com/tiobe-i...这是目前语言热度的排名版,而Java这门语言还是名列前茅的而世界上没有最好的编程语言,只有最适用于具体应用场景的编程语言二、Java生态圈Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已...

我吃西红柿 332

聊聊什么是编译型语言和解释型语言?以及Java是什么语言?

一: 高级语言和机器语言 语言分为3类计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种: 1.编译 2.解释 由此高级语言也分为编译型语言和解释型语言。 编译型语言 使用专门的编译器,针

向上的"狼"的博客 331

聊聊"鸡肋"的Java跨平台

我们初学Java的,只怕最深的印象就在于Java的跨平台了,我们的前辈教师,总是会将Java的跨平台夸赞的不得了,可实际接触开发一段时间后,会不会有这么一个疑问呢?那就是Java源自于C,那C是如何操作的呢?Java的跨平台究竟在C的基础上,做出了哪些进步呢?为什么网上有了一种说法,说Java的跨平台很"鸡肋"呢?是这样吗?下边针对这些问题聊聊;         C语言本来就是跨平台的,不过是“

AbriYou的博客 536

java的跨平台性与c语言,Java为什么具有跨平台性?

1.先回顾一下初出茅庐的时候在我刚刚开始接触到Java的时候,印象比较深刻的就是面向对象,跨平台性,至于跨平台性,当然,也稍微了解到了Java背后那个大神!JVM!Java虚拟机但是连基本语法都搞不懂的我,那个时候就更不用提虚拟机了。你们还记得大学必修课C语言了,当初真是这个课次次重修差点把我劝退!我也不记得自己是凭着什么样的心情居然跑去学了java,当然第一堂课就配置环境变量,也是两股战战,极度...

weixin_42467445的博客 541

Java - 聊聊 Java 的字节码

Java - 聊聊 Java 的字节码

712

聊聊编程语言的选择

我适合学什么编程语言呢?大家好,我是鱼皮,今天聊聊编程语言的选择问题,通过对 10+ 主流编程语言的特点、优劣、应用场景、发展前景等简单分析,希望帮还在迷茫的小伙伴们选择最适合自己的语言去...

dotNET跨平台 815

编程语言历史:聊聊Java最失败的设计:“==”

通过观察JVM上的其他语言对“”操作符的改进,我们可以看到,许多现代语言倾向于让“”默认比较对象的内容,而不是引用。这样的设计更加符合开发者的直觉,减少了因误解“==”操作符而引入的bug。同时,这些语言也提供了额外的方法来比较对象的引用,使得开发者可以在需要的时候进行精确控制。总结来说,“==”操作符的设计在Java中确实存在不合理之处。因此,在学习和使用Java时,深刻理解其设计的缘由和缺陷,可以有效地帮助我们在实践中规避许多问题,解答许多疑惑,进而更好地掌握Java并写出更加健壮和易于维护的代码。

hebhljdx的博客 1282

大佬老聊聊PHP,JAVA,NET 开发比较

JAVA:JAVA产生与1995年,JAVA语言和JAVA平台统称为JAVA;它语法与C语言和C++语言很接近,并且JAVA是面向对象编程语言,JAVA是编译性语言,可以先将JAVA源码编译成.class文件后,在JAVA虚拟机上解释执行。.NET:在.NET中,多种编程语言支持开发如:VB、C#、F#等等,通常我们都在使用C#编程,C#是为.NET平台专们打造的一种编程语言,产生与2000年。其语言语法和JAVA、C、C++相近,同样也是一种面向对象编程语言。C#同样需要编译为.dll文件,然后由.net

不定时分享最优质的网络技术与教程,满满的干货。 2588

Java语言概述

亲爱的观众老爷们:        大家好! 我是微风洋洋 今天这篇文章就是来和大家聊聊Java语言的概述,也就是入门篇,接下来会陆续发布后面深入的内容,请大家持续关注。感恩! 文章目录一、Java知识图谱二、软件开发基础知识软件开发常用的DOS命令三、计算机编程语言介绍四、Java语言概述Java简史Java技术体系平台Java语言的应用方向五、Java语言的特点六、Java的环境搭建七、常用的Java开发工具 一、Java知识图谱

微风洋洋的博客 6586

聊聊Java那些事儿

聊聊Java那些事儿 Java的诞生 1991年,Sun公司为了抢占市场先机,成立了一个称为Green的项目小组,核心功能在于使用Email控制家电产品的运行,就是我们现在所接触到的智能家居,专攻计算机在家电产品上的嵌入式应用。最初Sun公司打算使用C++语言来编写项目,又考虑到C++语言的复杂性,所以利用C++开发出了一套面向对象的OAK(橡树)平台,并且利用此平台参与竞争。不幸的是,竞争失败。随着互联网的普及,网景公司诞生了(第一家靠技术上市的公司),受到了当时浏览器技术的启发,Sun推出了一个叫Ho

qq_45702612的博客 270
上一篇: ASM: 一个低调成功者的自述
下一篇: 100个可供参考的一线互联网企业研发案例,都在这里了!
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值