云南北大青鸟java培训告诉你关于GraalVM的特点?

Python09

云南北大青鸟java培训告诉你关于GraalVM的特点?,第1张

对于程序员来,一般都会掌握许多编程工具来提高自己的工作效率的,但是如果有一款编程工具能够适用所有编程语言的话,我觉得应该就是GraalVM了,今天丽江北大青鸟http://www.kmbdqn.cn/就一起来了解一下GraalVM的特点。

1.高性能Java

GraalVM中的Graal得名于Graal编译器。Graal是一种“万能”编译器,也就是,虽然它是单一的实现,却可以用于很多用途。例如,我们可以使用Graal进行预编译(ahead-of-time)和即时编译(just-in-time),也可用于编译多种编程语言。

2.占用内存小、启动速度快的Java

Java对于长时间运行的进程来是相当强大的,但短时间运行的进程可能会因较长的启动时间和较高的内存占用而饱受其苦。

3.组合JavaScript、Java、Ruby和R语言

除了Java,GraalVM还包含了JavaScript、Ruby、R语言和Python的实现。它们都是使用一个叫作Truffle的语言实现框架开发的,Truffle让实现简单且高性能的语言解释器成为可能。在使用Truffle开发语言解释器时,会自动使用Graal作为JIT编译器。因此,Graal不仅是Java的JIT编译器和预编译器,也可以是JavaScript、Ruby、R语言和Python的JIT编译器。

4.在JVM上运行本地语言

GraalVM也支持C语言,GraalVM可以像运行JavaScript和Ruby之类的语言一样运行C代码。

实际上,GraalVM通过运行LLVM位码的方式来支持C语言,而不是直接运行C代码。也就是,我们可以将现有工具与C语言一起使用,还可以使用其他可输出LLVM的语言,例如C++、Fortran和未来可能出现的其他语言。为了简化演示,我使用了由StephenMcCamant维护的gzip的单文件版本。为简单起见,它只是将gzip源代码和autoconf配置连成一个单独的文件。我还需要修改一些东西才能让它在macOS上运行起来,但不能在GraalVM上运行。

5.适用于所有编程语言的工具

如果你使用Java编程,可能已经习惯了使用那些高质量的工具,比如IDE、调试器和分析器,但并非所有的编程语言都有这么好用的工具。不过如果你是在GraalVM中使用某种语言,就可以获得这样的工具。

6.扩展基于JVM的应用程序

除了可用作独立语言实现和用于多语言编程,这些语言和工具也可以嵌入到Java应用程序中。新的org.graalvm.polyglotAPI可用于加载和运行其他语言的代码。

R++是专为懒人设计的新型编程语言,它试图融合C++和Lisp,并假定用户是天才,允许DIY运算符和内置数据类型。它可以在Windows、Linux、Android或者IOS上运行,甚至能编译成机器码无操作系统裸奔。这个新玩具是绿色、免费、解释器开源的。(编译器暂不开源)它的特点是:全新JIT引擎,极致的编译和运行速度。精简Lisp内核,无限的动态扩展能力。完全开源,真正的开源不需要协议。集成IDE,编辑、编译、运行一体化,支持代码自动完成。兼容50%的C++语法,70%的C语法,编译器本身使用C++编写,但其90%的源码都可以自我编译。。

很多对Python不熟悉的人,认为Python在最近这些年的兴起是运气而已。本文帮助大家回顾一下过去十几年Python的3次增长和对应的历史背景。

Python设计之处的特点,包括易学易用,以及作为胶水语言。易学易用是个难以量化的东西,但至少我接触的绝大多数朋友都认同Python在学习和使用上是比大部分语言简单的。有些人不认同Python通常也不是认为Python相对其他语言难学,而是认为Python的运行速度慢,或者动态类型语言的通病。至于胶水语言就比较窄了,面向作为胶水而设计的语言是很少的,印象里只有Lua算得上一个。另一个Python相较其他语言的优势是字符串处理。

以下介绍Python获得发展的3次机遇期。

2006年的搜索/NLP:2006年前后正好是搜索引擎公司发展的爆发期。那一年Google中国李开复搞了关门弟子计划,百度也做了诸多广告,比如百度更懂中文系列。在那个时代搜索引擎就是IT行业的高科技。之后不久,阿里巴巴也搞了个ASC(阿里巴巴搜索技术研究中心),后来多次追潮流更名,一直作为阿里巴巴内部的前沿研发部门。

而Python用作搜索引擎和NLP是很有历史的。早期Google在90年代开发搜索引擎爬虫就是使用Python实现的。而即便是现在,开发爬虫,Python也基本上就是第一选择。很多人学习Python的入门程序也是爬虫。而Python适合开发爬虫的关键在于Python的字符串处理是很方便的。

也就是从2006年末开始,国内的python-cn邮件列表涌入了大量的新人,并以爬虫为例开始深入学习Python。

2010年的WEB创业潮:2010年开始,国内外出现了新一轮的创业潮,大家开发的是各种各样的网站。此时的WEB开发上,Python已经逐步成为主流WEB服务器开发选项中的一种。相对于同时代的Java和PHP等,有着开发效率上的优势。

正因为早期创业公司需要迅速的迭代和试错,使得这个时代的Python成为了一个不错的选项。进而让更多工程师开始学习起来Python。

也就是从这个时期开始,才逐渐有较多的公司会公开招聘Python工程师。在此前招聘Python工程师的广告是非常非常少见的。

2014年的Deep Learning:从2014年开始火起来的深度学习上,Python的优势是近乎绝对的。深度学习的主流开发语言只有C++和Python两种了,其他语言可以认为根本就没能在这里分到什么像样的空间。所有主流的Deep Learning框架,也是官方直接提供了C++和Python两种接口。而由于C++开发的难度,当前确实有不少从业工程师是直接用Python搞定深度学习的相关步骤。

这次Python的增长期被更多不了解Python的人认为是Python的狗屎运。但其背后的逻辑反倒是非常坚固的。原因就是Python是个很好的胶水。最初的起点是numpy库。

numpy是封装了BLAS的科学计算库。BLAS是对CPU向量指令集高度优化的数学运算库。通过BLAS进行科学计算可以得到顶级的计算性能,这个计算性能比未经向量指令集优化的C程序还能快上数倍。而numpy的另一个重要特点就是,把buffer做了封装,使得buffer的内容是无需Python处理的,而是实际交给特定的软件库来处理,numpy只是负责维护该buffer的生命周期,形状等元数据。这就使得numpy的计算性能不会受到Python的影响,但同时却可以利用Python的易学易用来管理buffer的生命周期。

numpy对buffer的管理带来的易用性优势在后来得到了很大的发展。如以下几点:

OpenCV:在opencv-python中就是使用了numpy.array来管理图像数据,却没有像C++接口一样使用Mat。同样的顶级性能。

PyCuda/PyOpenCL:也是利用了numpy.array来透明传递数据给GPU做高性能计算。尤其是集成了JIT,使得可以用字符串的方式传递kernel function,不再像C++一样要独立编译一遍。

Caffe/TensorFlow:同样利用了numpy.array,并利用了PyCuda/PyOpenCL的集成。

所以这样一路发现下来,由Python是个好胶水,就真的把若干很好用的库全流程的粘在了一起。在流程集成上都是顶级的性能,而没有Python的性能损耗,同时带来了非常好的易用性。

相比其他语言,对这些C/C++库的玩法都是先封装一层对象,包准封装的前后对不上。而且因为大部分语言并不是面向胶水设计,开发C接口都很困难。自然与这些高性能计算库的结合困难重重。累计起来就与Python产生了差距。

题主所提到的R语言,是一种领域相关的语言,是做统计领域的,类似的还有做科学计算的Matlab。如果程序的输出只是一份报告,甚至一份统计图,问题是不大的。但想要成为产品,与其他系统集成则成了难题。一般的服务器部署产品,是不会选择在工程上这么不专业的语言。所以,实际应用时,还是要有工程师负责将算法提取出来,移植到产品级的语言和平台上。举个例子,R虽然可以正常的访问MySQL数据库之类的。但产品级系统中,涉及到memcache、kafka、etcd等,可就没有R语言的接口了。所以这些领域相关语言,写一些自己电脑上跑的小程序还可以,进入产品是没什么希望了。

再者就是因为通用性一直难以跨越出自己的领域,所以这类语言的生命周期一般都不太长,失去自己领域的强支撑后会很快消亡。所以建议题主还是花一些精力去看看业界通用的一些语言。