Julia1.0编程语言:Python、R、C++三合一
MIT CSAIL实验室正式发布Julia1.0。这种语言希望结合C的速度、Matlab的数学表示、Python的通用编程和lim Shell的命令行。并构建一个开源的编程语言,免费且方便。Julia语言官网:julialang.org/
Julia 的开发者之一、在麻省理工学院计算机科学与人工智能实验室(CSAIL)工作的 Alan Edelman 表示:“Julia 1.0 的发布证明了该语言已经准备好结合 Python 和 R 的效率简单易用与C++闪电般的速度相结合,改变科技世界。”
在实际应用方面,Julia已应用于驾驶汽车、机器人和3D打印机,也广泛应用于精准医疗和增强现实。 、基因组学和风险管理。从Julia生态系统的角度来看,当今的主要功能或应用领域是数据可视化、通用UI和网站、数据科学、机器学习、科学计算和并行计算等。
Julia下载量已达200万次,Julia社区已开发超过1900个扩展包。该扩展包含各种数学库、数学运算工具和用于一般计算的库。此外,Julia语言还可以方便地使用Python、R、C/C++和Java中的库,极大地扩展了Julia语言的使用范围。
Julia 1.0
备受期待的Julia 1.0是开发者近十年努力的成果。Julia大会2018召开新闻发布会,社区正式将版本定为1.0.0。
Julia 开发者对该语言提出了很多要求:
我们想要一种免费的开源语言,它具有 C 的速度和 Ruby 的灵活性。我们想要一种 isoic 语言,具有像 Lisp 这样的真正的宏,以及像 Maltlab 这样易于理解的数学符号。这些是有用的通用编程语言(如Python)、统计友好语言(如R)、自然字符串处理语言(如Perl)、强大的线性代数语言(如Matlab)以及“胶水语言”(如shell)。它很容易学习,但即使是最认真的黑客也会留下深刻的印象。我们希望它既是交互式的又是可编译的。
整个语言社区蓬勃发展,世界各地的人们怀着同样的目标不断地重新创造和改进Julia。超过 700 人为Julia做出了重大贡献,无数人创建了数千个令人难以置信的Julia开源包。总之,我们创建了一种语言:
- 快速:Julia 是为高性能而构建的。Julia程序通过LLVM为多个平台编译高效的本机代码。
- 通用:它使用多个帖子作为范例,可以轻松表达许多面向对象和函数式编程模式。标准库提供异步 I/O、过程控制、日志记录、性能分析、包管理器等。
- 动态:Julia是一种动态语言,类似于脚本语言,支持交互使用。
- 专业:擅长数值计算,语法适合数学,支持多种类型的数值数据,并行性好。多调度 Julia适合指定数字和类似数组的数据类型。
- 多样性:Julia有丰富的描述性数据类型,类型声明使得程序清晰稳定。
- 可组合:Julia包可以很好地组合。单位数量矩阵或货币和颜色数据列表都可以组合起来,并且性能良好。
Julia 1.0版本现已可供下载。如果您要从 Julia 0.6 或更早版本升级代码,我们建议您使用临时版本 0.7,其中包含用于指导升级过程的弃用警告。如果您的代码是安全的,您可以立即更改为1.0版本,无需进行任何功能更改。列出的软件包利用了 0.7 临时版本并发布了 1.0 的兼容更新。
当然,Julia 1.0最重要的新特性之一是对语言API稳定性的承诺:为Julia 1.0编写的代码可以继续在Julia 1.1、1.2等中使用。该语言已经“完全成熟”,核心语言开发人员和社区都可以在此坚实的基础上构建新的包、工具和功能。
Julia 1.0不仅仅是稳定性,还引入了许多强大且创新的新语言功能。0.6版本以来的新功能如下。更详细、准确的内容请查看更新文档原文:
- 全新构建的包管理器为Julia 1.0带来了巨大的性能提升,并且比以前更方便地安装包和依赖项。它还支持每个项目的打包环境,并记录可以与其他人(以及您未来的项目)共享的应用程序的显式状态。最后,新设计还支持私有包和包存储库。您可以使用与开源软件包生态系统相同的工具来安装和管理私有软件包。Julia大会的演示视频很好地概述了新的设计和行为。
- Julia对失落的价值观有了新的标准表述。允许表示和处理缺失数据对于统计学和数据科学非常重要。在典型的儒家编程形式中,新的解决方案是通用的、可组合的和高性能的。任何通用集群类型都可以通过允许元素包含预定义值来有效地支持缺失值。这种“统一类型”的集群性能在过去的版本中可能非常慢,但编译器的改进现在允许Julia匹配其他系统上的自定义 C 或 C++ 中丢失的值表示速度,同时保持通用性。而且灵活性优于过去的版本。
- 内置的 String 类型现在可以安全地支持任意数据。您的程序不会因为无效 Unicode 丢失一个字节而在一个项目上浪费数小时或数天的时间。当所有字符串数据表示有效或无效字符时,它都会被保留,从而使您的应用程序能够安全、轻松地处理现实世界的数据及其所有不可避免的缺陷。
- 广播因其方便的语法而成为核心语言功能,并且比以往更加强大。在Julia1.0中,可以轻松地将广播扩展到特殊类型,并在GPU和其他矢量硬件上实现高效的优化计算,为未来更高的性能优势奠定基础。
- 命名元数组是一种新的语言功能,可以通过名称使数据表示和访问更加高效和方便。例如,可以将一行数据表示为 row = (name="Julia", version=v"1.0.0",releases=8) 并使用 row.version 访问版本列,相当于 less。便捷线路[2]性能相同。
- 点运算符现在可以重载,允许类型使用 obj.property 语法来获取除获取和设置字段之外的含义。这对于 Python 和 Java 等面向对象语言之间更顺畅的互操作性很有用。多个属性访问器还允许语法检索与命名元组的语法匹配的数据字段:您可以编写 table.version 来访问表中的版本字段,就像使用 row.version 访问行的版本字段一样。
- Julia Optimizer 在很多方面都比列出的功能更好,但我在这里只会提到一些亮点。优化器现在可以通过函数调用传播常量,因此它们可以消除死代码并比以前更好地实现静态评估。编译器还可以更好地避免为长期目标而使用短期包装器,这使得开发人员可以使用方便的高级抽象,而不会造成性能损失。
- 现在可以通过声明参数类型来调用构造函数本身,这消除了语言语法中令人困惑和不明确的方面。
- 完全重新设计了迭代协议,使其更容易实现多个可迭代求和。Julia1.0并没有设计三种不同的通用函数(start、next、finish),而是设计了迭代函数的一参数和二参数方法。这通常允许使用包含初始状态默认值的单个定义轻松定义迭代。更重要的是,这使得实现一个迭代器成为可能,该迭代器仅在尝试生成值失败后才知道它们已被实现。这些迭代器在输入/输出(I/O)、网络和生产者/消费者模式中非常常见,Julia可以直接准确地引用它们。
- 简化了范围规则。现在,无论命名的全局约束是否存在,局部作用域构造都可以一致地工作。
- 儒家思想本身就是一门奇妙的学问。许多组件被拆分并打包成儒家“标准库”包,而不是成为“基础”语言的一部分。如果需要,可以导入(无需安装)。未来,标准库也会出现多个版本,并且独立于Julia进行更新,这使得他们的迭代速度更快。
- 我们已经审核了所有的Julia API,以提高稳定性和可用性。许多晦涩且无效的编程模式已被重新命名或重新设计以适应儒家的能力。这使得集合处理更加稳定和一致,确保参数排序遵循Julia语言中的一致标准,并在适当时将(更快)关键字参数集成到 API 中。
现在有很多新的外部软件包是专门围绕Julia1.0的新功能创建的,例如数据处理和运营生态系统的改进以及异构架构支持的改进。
作者:机器之心
链接:https://juejin.im/post/5b6d69b06fb9a04fd16043cf
来源:掘金
。商业转载请联系作者获取授权。非商业转载请注明出处。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。