Julia 终于正式发布了

时间:2022-07-24
本文章向大家介绍Julia 终于正式发布了,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

什么是Julia?

最近有点火的Julia到底什么?

引用“Release Blog ”中一句话:

We want a language that’s open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that’s homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled.

译文:

我们想要的是一个自由开源的语言,并且它同时拥有C的速度和Ruby的动态性;我们想要一个具有同像性(可以将语言的脚本本身当作数据进行处理)的语言, 它有着真正的和lisp一样的宏,但是却像Matlab一样有着显然的,类似于数学表达式的标记;我们想要一个既可以像Python一样作为通用编程语言的工具, 又可以像R那样适用于统计分析,能像Perl那样自然地处理字符串,能像Matlab那样给力地处理矩阵运算,它还要能像shell一样作为胶水将各种程序粘 合在一起;我们想要一个简单易学的语言,同时它还能让最苛刻的魔法师们(hackers)开心。我们希望它是交互式的,但我们也希望它能被编译。

备受期待的Julia语言的1.0版本积累了富有野心的程序员们的十年心血。 在 JuliaCon2018 发布会上,Julia 社区正式将该版本设置为1.0.0。

julia 也可以说是陪伴了我整个本科阶段,终于在毕业的时候Julia正式版终于发布了(han…)。

一个充满活力和繁荣的社区就围绕这种语言成长起来,世界各地的人们都在为了这个目标而不断努力改进和塑造Julia。 超过700人为Julia做出了自己的贡献,更多人创造了成千上万开源的Julia包。

julia 特点

  • 快速:Julia一开始就是为高性能而设计的。Julia可以通过LLVM而跨平台被编译成高效的本地代码。
  • 通用:Julia使用多分派作为编程范式,使其更容易表达面向对象和函数式编程范式。标准库提供了异步I/O,进程控制,日志记录,性能分析,包管理器等等。
  • 动态:Julia是动态类型的,与脚本语言类似,并且对交互式使用具有很好的支持。
  • 数值计算:Julia擅长于数值计算,它的语法适用于数学计算,支持多种数值类型,并且支持并行计算。Julia的多分派自然适合于定义数值和类数组的数据类型。
  • 可选的类型标注:Julia拥有丰富的数据类型描述,类型声明可以使得程序更加可读和健壮。
  • 可组合:Julia的包可以很自然的组合运行。单位数量的矩阵或数据表一列中的货币和颜色可以一起组合使用并且拥有良好的性能。

julia V1.0 特性

在Julia 1.0版本中一个最重要的新特性是对语言API稳定性的承诺:你为Julia1.0编写的代码将可以继续在 Julia 1.1, 1.2中运行。这种语言是“足够成熟的”。基于这样的一个坚实的基础, 核心语言的开发者和社区都可以集中于第三方包,工具,和新特性的开发上。

但是Julia 1.0并不意味着稳定,它也带来一些新的,强大的并且创新的语言特性。其中一些新的特性是0.6开始就有的:

  • 一个全新的内建 包管理器。它比过去的包管理器性能更好, 也更加简单。它也支持虚拟环境和记录当前工作环境的状态然后将其分享给其它开发者或者是自己。最后重新设计的包管理器也带来了 私有包和包的仓库的无缝衔接。你可以用使用开源生态同样的方式用它来管理自己的私有包。这个 JuliaCon的幻灯片 展示了新设计的包管理器。
  • Julia具有新的 对于缺失值(missing value)的正则表达。处理缺失值的能力对于统计学和数据科学是一项基本能力。 在典型的Julia写法里,这个解决方案是一般性的,可扩展的也是高性能的。任何一般的集合类型(collection type)都可以简单地通过使用 预先定义好的 missing变量来有效支持缺失值。而这样的集合类型的性能在过去的Julia版本里可能会很慢,但是现在编译器已经 可以使得Julia在缺失值的表示上达到类似 C 或者 C++ 的速度,而远比 C 或者 C++ 一般和灵活。
  • 内建的 String 类型可以安全的使用任意的数据类型。你的程序不会因为一个单独的无效Unicode字节而失效好几个小时或者好几天。 所有的字符串数据会保留,同时指出哪些字符是有效的哪些是无效的,这样允许你的应用安全并方便地运行在不可避免会出现缺陷的真实世界的数据中。
  • 尽管广播早已成为一项语言的核心特性并且有着方便的语法支持,而现在它将比过去更加强大。在Julia 1.0里为自定义类型扩展广播和实现高效的GPU和向量化硬件上的扩展都更加容易,为未来实现更高的性能铺平了道路。
  • 可命名元组是一个新的语言特性,它将是的通过名字直接获取数据变得更加高效和方便。例如,你可以这样表示一列数据row = (name="Julia", version=v"1.0.0", releases=8)并且通过row.version访问 version 的数据,而这和 row[2]有着相似的性能,但是却更加方便。
  • 点算符现在可以被重载,并且允许类型使用类似于 obj.property 的方式表示某种意义,而不是用来设置和获取合成类型(struct)的 成员。这对于将具有 class 的语言例如 Python 和 Java 翻译到Julia来说更加平滑。性质的访问器重载也将是的获取匹配数据的名 称的一列于可命名元组更加一致:你可以写 table.version来获取表格中的 version这一列就好像row.version 会获取 version这一行的这个元素一样。
  • Julia的优化器在诸多方面都更加聪明来,以至于我们无法全部列在这里,但是可以列举一些重要的特点。优化器现在可以在函数 调用之间传播常数变量,这将使得编译器可以比过去更好的消除死代码(dead-code)和进行静态求值。编译器现在也能够对短期存在 的长期对象的封装避免多余的内存分配,这将使得程序员可以使用更方便的高级抽象而不会担心带来性能损失。
  • 迭代器协议被重新设计。新的迭代器协议更加简单,而不需要定义三个不同的函数:startnextdone。现在只需定义一个变量 和两个变量的iterate函数即可。这将常常使得我们可以简单地通过定义了一个函数参数默认值的函数来实现迭代器。更加重要的是,这将使得 实现一个只有在尝试返回值失败之后才知道需要结束的迭代器成为可能。这种迭代器在I/O,网络和生产者/消费者模型中普遍存在;而Julia现在 可以以更加直接和正确的方式表达这样的迭代器。
  • 作用域的规则被简化了。引入局部作用域的构造将更加一致,而不需要管全局的命名绑定是否已经存在。 这将消除之前存在的 “软/硬 作用域”的区别,也意味着现在Julia可以静态地确定变量是局部的还是全局的。
  • Julia语言本身变得更加轻量级来,很多部分都不放在来标准库中。这个标准库将和Julia一起发布但是不会作为语言的基础依赖。 如果你需要他们,那么只需导入这些库即可(不需要再安装)但是它们不再强制你使用了。在未来这些标准库将会单独被标记版本和更新 以获取更快的改进和升级。

参考文档:julia v1.0.0 Release Blog