个人觉得还是有价值的。
Julia语言,相对于其他编程语言,有三大优点:1. 速度,for循环很快;2. 开源,具有很好的发展潜力;3. 语法简单,同时存在底层与高层的函数。
可能但看某一条,都不是特别显眼。
毕竟速度不比C/C++快;库没有Python的多;高级函数也比不上Mathematica。
但是反过来说,它也同时有比Python、Mathematica快得多的For循环速度、比Mathematica更好的社区环境,以及比C/C++简单的语法以及更高级的函数。
Julia有一个有意思的特性,可以明显看出它是为科学计算而发明的:它原生支持复数运算。
其默认内置了「im」符号作为复数符号,从而其内部的几乎所有计算库都原生支持复数计算。
比如下面这个例子,我没有导入任何外部库,就直接进行了复数运算:> a = 1 + 2im1 + 2im> b = a * a-3 + 4imc = sin(b)-3.853738037919377 - 27.016813258003932im注意这里的复数支持是从底层支持的,综合来说,运算速度会比在其他语言中定义复数要快不少。
开头提到的几个语言中,除了Julia之外,也只有Mathematica原生支持复数。
复数本身在数学,以及物理学(特别是量子力学)中,有很多应用,这一点会使得计算变得很方便。
另外,Julia里面有精确的零和精确的一。
在很多语言中,例如C/C++, Python等,其中浮点数的0与1很多时候都不是精确值,总有极为微小的偏差。
但Julia特别提供了精确0与精确1,在很多时候会非常有用。
例如做判断或比较的时候,微小的误差可能会带来完全不同的结果。
更有意思的是,Julia支持BigInt类型——高精度整形计算,可以计算任意长度整数类型(只要内存足够):
首先要确定的是你的需求是什么,是要用一门能提高科研效率的语言还是想通过某一门语言来学习或者完整体验函数式编程。
如果是后者,我想的答案已经很清楚了。
假设题主的目标是提高码代码的效率,提高可读性以及程序执行速度。
我打算用以下理由安利Julia...我这里列出了科学研究中的一些可能存在的需求(很有可能不全,所以还请指正)矩阵计算代码的并行化对一些成熟科学库的支持高性能代码的重用性(对一些编程范式的支持,如面向对象,函数式编程)那么Julia能做到吗?回答当然是可以的。
首先Julia是一款很好上手的语言,你会发现Julia中能够找到很多很多其它语言的痕迹,从它的开发目的上看,这也是必然的,因为它有一个目标,就是改善现在为了满足不同需求使用不同语言的情况。
从豆瓣上摘了一下中文版的 为什么要开发Julia:简单的说,因为我们很贪心。
我们是Matlab的重度用户。
我们中间有Lisp高手,Python专家,Ruby专家,还有Perl高手。
有些家伙从嘴上无毛的年纪就开始用Mathematica了,当然我们中间也有人现在也还是不长胡子的。
我们比正常人画了更多的R图。
C更加是我们最喜欢的大杀器。
我们热爱所有这些语言,他们实在是很好很强大。
在我们从事的领域中——包括科学计算、机器学习、数据挖掘、大规模线性代数、分布式与并行计算这些——每种语言都对某些问题来说很完美,但对另一些就变得很糟糕。
我们需要做出取舍。
我们很贪心:我们想要更多。
我们需要一种语言,它是开源的,有自由的许可。
我们需要C语言的速度,又要有Ruby社区的活力。
我们需要一种homoiconic风格的编程语言,像Lisp那样有真正的宏,又要有Matlab里那些熟悉的数学概念。
我们需要的东西既能像Python那样可以作为通用编程语言使用的工具,又要能够像R那样适用于统计分析,能像Perl那样自然地处理字符串,能像Matlab那样给力地处理矩阵运算,还要能像shell一样能把各种程序粘合在一起。
它必须让初学者觉得简单易学,同时又可以让高级用户们挥洒自如。
它既要是交互式的,又能被编译执行。
(前面提到过的,它要有C那么快!)我们在构思这些需求的时候,我们还发现它得有Hadoop这样强大的分布式能力——却不想要Hadoop里面那些冗繁的Java和XML,不想在几百台机器庞大的日志文件里去寻找那些bug。
我们不想要那些令人费解的层次结构。
我们想让简单的标量循环能在单个CPU的寄存器里编译出精致的机器代码。
我们想要写一个A*B就能让上千台机器为我们完成一次规模庞大的矩阵乘法。
我们不需要的时候,就不用做类型申明。
但我们需要多态函数(polymorphic functions)时,希望能通过泛型编程(generic programming )使得只写一次的算法能在无穷多的数据类型上套用。
我们希望通过多重分派(multiple dispatch ),能够为一个函数所有可能的参数选出最有效的执行方法。
这些参数可能有着不同的定义,来自不同的数据类型,却能提供相同的功能。
在拥有这些能力得的同时,我们还希望这种语言简单、干净!要求有点多,是不是?尽管我们意识到了自己有多贪心,我们还是想把这些都统统拥入怀中。
大概在两年半之前,我们开始创造这种能满足我们贪念的语言。
它还没有完工——但是已经可以发布一个1.0版本了——我们创造的语言叫做Julia。
她已经实现了我们那些乱七八糟需求的90%,而现在她需要来自更多人更乱七八糟的需求,来让她走得更远。
如果你也是一位贪心不足,不可理喻,需索无度的码场二逼青年,希望你能来试试这个东东。
1.矩阵计算Julia的矩阵计算默认是由openBLAS支持。
openBLAS是一款开源的线性代数库,开发者来自于中科院软件所的张常有老师团队。
同时Julia也支持intel的MKL库(如果你购买了intel的MKL的话)。
所以正如Julia自己所号称的一样,Julia的矩阵处理性能是非常高的。
2.并行然后是代码的并行化,Julia的介绍中有这么一句话:为分布式与并行而设计.可以看一下语法上也是原生支持并行的.3.库的支持然后目前Julia已经有一些很好的库了(以后不断更新):数学优化方面有JuliaOpt,并没学过数学优化但是据说写的很好用。
JuliaQuant量化库,貌似楼下的答主在用天文方面,JuliaAstro一个天文口的库在量子计算方面,由齐晓东@i2000s 发起的juliaQuantum已经能够具有一些基本的功能,同时他们甚至有拿代码去量子计算机上使用(当然并不是真的量子计算机,而是绝热机)Mocha 一个很像caffee的机器学习库JuliaGPU里面有一些关于GPU计算的库,一些著名的库的wrapper,比如opencv(还只能在0.5-dev上调用,因为是调用了cpp)JuliaBio 生物信息(并没有用过和我的专业不太相关)因为开始翻译Julia.jl,相关内容请关注我正在进行中的中文版Julia程序包博物馆JuliaCh.jl当然这里也会不定期更新这一部分。
4.编程范式的支持OO是支持的,采用的是多重派发.函数式编程,lambda表达式,闭包等也是有的.然后也有metaprogramming.由于Julia语言的诞生源自于两个实验室中,所以Julia首先是会要满足实验室科研的需求的(小道消息说,Julia的诞生是因为某计算化学大牛觉得MATLAB不好用,2333)同时它强大的目标,我想在1.0之后也能够引起一大部分业界关注者的使用(然而一些生物信息的创业公司已经在用了呢)。
同时相比MATLAB,mathematica,使用MIT协议的Julia,能够为开发省去很多潜在的麻烦。
也能够更好的帮助学术上的交流,先写到这里。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)