MIT正式发布编程语言Julia 1.0:Python、R、C++三合一

640?wx_fmt=gif


MIT 开发的 Julia 语言是全球热度上升最快的编程语言之一,下载量超过 200 万次,下载者包括谷歌、Facebook、FAA 和美国能源部等各个部门的开发者。近日,MIT CSAIL 实验室正式发布了 Julia 1.0,该语言期望结合 C 的速度、Matlab 的数学表征、Python 的通用编程与 Shell 的胶水命令行,并构建开源、自由与便捷的编程语言。


  • Julia 语言的官网:https://julialang.org/

  • Julia 语言项目地址:https://github.com/JuliaLang


在过去一年中,研究者利用 Julia 在一台超级计算机上分析天文图像,速度提升了 1000 倍,在 15 分钟内将接近 2 亿个天体进行分类。从技术上来看,这种语言还会长期发展下去。然而,现在是一个里程碑的时刻:在本周于伦敦举办的 Julia 语言年会上,Julia 1.0 正式发布!一起发布的还有 JuliaCon。


Julia 的开发者之一、就职于 MIT 计算机科学与人工智能实验室(CSAIL)的教授 Alan Edelman 表示:「Julia 1.0 的发布证明,该语言已经做好准备,将 Python 和 R 的高效性和易用性与 C++的闪电速度结合在一起,改变技术世界。」


从实际应用来说,Julia 已经用于自动驾驶汽车、机器人和 3D 打印机,此外还广泛应用于精准医疗、增强现实、基因组学及风险管理。从 Julia 的生态系统来说,目前它主要的特征或应用领域为数据可视化、一般性的 UI 与网站、数据科学、机器学习、科学计算与平行计算等。


640?wx_fmt=png


Julia 目前下载量已经达到了 200 万次,且 Julia 社区开发了超过 1900 多个扩展包。这些扩展包包含各种各样的数学库、数学运算工具和用于通用计算的库。除此之外,Julia 语言还可以轻松使用 Python、R、C/C++ 和 Java 中的库,这极大地扩展了 Julia 语言的使用范围。


Julia 1.0


备受期待的 Julia1.0 累积了开发者近十年的努力。JuliaCon2018 举行了发布会,该社区正式将该版本设置为 1.0.0.。


Julia 开发者对该语言提出了很多需求:


我们想要一种十分自由的开源语言,同时兼具 C 语言的速度和 Ruby 语言的灵活度。我们想要一种同像性语言,具有像 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 带来巨大的性能提升,并令其相比以往更容易进行程序包和依赖库安装。它还支持每项目(per-project)的包环境,并记录工作应用的明确状态来和其他人(以及你的未来项目)共享。最后,该新设计还完全支持私人包和软件包存储库。你可以使用相同的工具安装和管理你用于开源包生态系统的私人包。JuliaCon 的展示视频对新设计和行为提供了很好的概述。

  • Julia 拥有对缺失值的新的标准表示。允许表示和处理缺失数据对于统计和数据科学来说是很基础的。在典型的 Julia 编程形式中,新的解决方案是通用的、可组合的和高性能的。任何泛用群集类型可以高效地支持缺失值,仅需要允许元素包含预定义值 missing。这种「统一类型化」的群集的性能在过去版本中可能会非常慢,但如今的编译器改进已经允许 Julia 在其它系统中匹配自定义 C 或 C++的缺失值表示的速度,同时在通用性和灵活性上也远远超越过去的版本。

  • 内置的 String 类型现在可以安全地支持任意数据。你的程序不会在一项工作中因为无效 Unicode 的单个丢失字节就浪费数小时或数天的时间。所有的字符串数据在指示哪些字符是有效或无效的同时就已经被保存,允许你的应用安全、方便地处理包含所有不可避免瑕疵的真实世界数据。

  • 广播(broadcasting)由于方便的语法特性已经成为了一种核心的语言功能,并且已经比过去更加强大。在 Julia 1.0 中,可以很简单地将广播扩展到自定义类型,并在 GPU 和其它向量化硬件上实现高效的优化计算,为未来更高的性能效益奠定了基础。

  • 命名元数组是一种新的语言功能,可以通过命名使数据表示和访问更加高效和方便。例如,你可以将一行数据表示为 row = (name="Julia", version=v"1.0.0", releases=8),并使用 row.version 来访问 version 列,它与不那么便利的 row [2] 有相同的性能。

  • 点运算符现在可以重载,并允许类型使用 obj.property 句法获取除 getting 和 setting 结构域外的含义。这对于使用 Python 和 Java 等面向对象语言之间更加平滑的交互操作非常有用。属性访问器重载还允许获取一列数据的语法匹配命名元组的语法:你可以编写 table.version 以访问表中的 version 列,这就和使用 row.version 访问行的 version 字段一样。

  • Julia 优化器在很多方面比我们列出来的特征还要优秀,但这里只会提一些亮点。优化器现在可以通过函数调用传播常数,因此比以前能更好地消除无用代码和实现静态评估。编译器在避免为长期目标分配短期包装器方面也做得更好,这使得开发者能使用便捷的高级抽象并且不会产生性能损失。

  • 现在可以用声明参数类型的构造函数的方式调用它们自己,这消除了语言句法中令人困惑且模糊的地方。

  • 完全重新设计迭代协议,使之更易实现多种可迭代量。Julia 1.0 没有设计三种不同泛型函数(start、next、done)的方法,而是设计 iterate 函数的一参数和二参数方法。这通常允许在开始状态使用包含默认值的单一定义来便捷地定义迭代。更重要的是,这使得实现只在尝试并无法生成值后才知道它们已经被实施过的迭代器成为可能。这些迭代器在输入/输出(I/O)、网络和生产者/消费者模式中是非常普遍的,Julia 可以用一种直接、准确的方式表达这些迭代器。

  • 作用域规则(scope rule)被简化。局部作用域的结构现在可以一致地进行使用,不用管某命名的全局约束是否已经存在。

  • Julia 语言本身是非常好的学习器,很多组件被分割封装进 Julia 的「标准库」包,而不是作为「基础」语言的一部分。如果你需要它们,可以导入它们(无需安装)。未来,标准库还将出现多种版本,并独立于 Julia 更新,这使得它们可以更快地迭代。

  • 我们已经对 Julia 的所有 API 进行了完全的评议,以改善稳定性和可用性。对很多模糊的已有命名和无效的编程模式进行了重命名或重构,使之更匹配 Julia 的能力。这使得处理集合更加稳定和一致,以确保参数顺序遵循 Julia 语言中一贯的标准,并在恰当的情况下将(更快的)关键词参数整合进 API。


现在围绕 Julia 1.0 的新功能专门构建了许多新的外部软件包,如数据处理和操作生态系统的改进和异构架构支持的改进等。


Julia 1.0 还包括了无数其它的改进,如果想查看完整的列表,请访问:

https://docs.julialang.org/en/release-0.7/NEWS/ 


来源:机器之心

版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。


数据与算法之美

用数据解决不可能


640?wx_fmt=jpeg

长按扫码关注


640?wx_fmt=gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EFCore3.1+编写自定义的EF.Functions扩展方法

前言本文主要是讲解EF Core3.0 如何实现自定义的数据库扩展函数,虽然EF.Functions 提供了很多数据库函数,但是并不全面.比如加密解密..。这样的话 我们就需要自己扩展这些数据库函数 从而达到调用的目的.本文以达梦数据库为例(其他数据库都一样)..上篇文章推荐: EF …

WSUS2.0数据导入、导出(备份、还原)

以前我们做的WSUS实验都是让WSUS服务器通过互联网连接到微软网站去下 载更新补丁,但是现实的生活中有些网络是与互联网隔绝的,这种情况下可以采用导入导出WSUS数据的方法来解决WSUS的更新问题。先在一台能联网的 WSUS服务器上下载所需更新,然…

linux perl模块检测,Linux有问必答:如何用Perl检测Linux的发行版本

提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码。为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu、CentOS、Debian、Fedora等等),以及它是什么版本号。如何用Perl检测Linux的发行版本?如果要用Perl脚本…

NET问答: 如何将 ASP.NET Core WebAPI 中抛出的异常封装成对象?

咨询区 rianjs&#xff1a;在 ASP.NET Core WebAPI 中&#xff0c;我的 Controller 代码如下&#xff1a;[Route("create-license/{licenseKey}")] public async Task<LicenseDetails> CreateLicenseAsync(string licenseKey, CreateLicenseRequest license) {…

借助TensorFlow框架,到底能做什么?

谷歌在七月份正式推出了深度学习框架TensorFlow 1.9 版本&#xff0c;那么TensorFlow框架到底是什么&#xff1f;TensorFlow™ 是一个采用数据流图&#xff08;data flow graphs&#xff09;&#xff0c;用于数值计算的开源软件库。最初由Google大脑小组的研究员和工程师们开发…

在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法

TCP为了防止在网络中过多的小分组会导致阻塞&#xff0c;因此提供了Nagle算法&#xff1a;要求一个TCP连接上最多只能有一个未被确认的未完成的小分组&#xff0c;在该分组的确认到达之前不能发送其他的小分组。相反&#xff0c;TCP收集这些少量的分组&#xff0c;并在确认到来…

CCNP课堂练习四:frame-relay traffic-shaping(帧中继流量×××)

帧中继(Frame Relay)是一种网络与数据终端设备(DTE)接口标准。它可以减少结点的处理时间,提高网络的吞吐量。帧中继提供的是数据链路层和物理层的协议规范,任何高层协议都独立于帧中继协议,因此,大大地简化了帧中继的实现。目前帧中继的主要应用之一是局域网互联,特别是在局域网…

百度内部培训PPT流出:数据分析的道与术

这是一份来自百度内部的数据分析学习PPT&#xff0c;非常经典的入门教材。主要内容1、什么是数据分析&#xff08;道&#xff09;1.1 数据分析是什么&#xff1f;1.2 什么是做好数据分析的关键&#xff1f;1.3 分析要思考业务&#xff0c;尤其是接地气1.4 分析要言之有物&#…

C语言程序设计答案黄保和编,C语言程序设计答案(黄保和编)第5章.pdf

厦门大学本科生公共课 《C 程序设计基础》 教材习题答案 第五章 循环结构程序设计一、选择题1.设有程序段”int k10;while(k0)kk-1;”&#xff0c;则下面叙述正确的是D 循环体语句一次也不执行2.设有程序段”int x0,s0;while(!x!0)sx;printf(“%d”,s);”则A 运行程序段后输出1…

VS2010 C++下编译调试MongoDB“.NET研究”源码

考虑到mongodb使用了boost库源码&#xff0c;参考mongodb官方文档后&#xff0c;下载编译boost版本是1.42(时间为2010-2-2)或更新版本:boost版本1.42&#xff1a;http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download 下载boost源码之后…

有了这15款编程游戏,谁都可以学编程!

1、Coding Games一边玩游戏&#xff0c;一边挑战编程难题。Coding games支持包括PHP、C、JavaScript在内的20多种编程语言。用户界面功能强大&#xff0c;可以定制。例如&#xff0c;你可以选择你的代码编辑器的风格&#xff1a; Emacs、Vim、Classic。如果你想提升编程技能&am…

C# 封装

封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中&#xff0c;封装是为了防止对实现细节的访问。抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化&#xff0c;封装则使开发者实现所需级别的抽象。C# 封…

C语言中比较大小的函数模板,C语言中实现模板函数小结 : 不敢流泪

—-by boluor 2009/5/20如果要写个函数支持多种数据类型&#xff0c;首先想到的就是C的模板了&#xff0c;但是有时候只能用C语言&#xff0c;比如在linux内核开发中&#xff0c;为了减少代码量&#xff0c;或者是某面试官的要求…考虑了一阵子后&#xff0c;就想到了qsort上.q…

lamp架构优化

LAMP&#xff08;LinuxApacheMysqlPerl/PHP/Python&#xff09;常用来搭建动态网站或者服务器的开源软件&#xff0c;本身都是各自独立的程序&#xff0c;但是因为常被放在一起使用&#xff0c;拥有了越来越高的兼容度&#xff0c;共同组成了一个强大的Web应用程序平台。每个LA…

毕业的那天,程序员师兄竟然让我去做这一行

给大家看一份最新的数据&#xff1a;&#xff08;薪资表&#xff09;2018年最新数据&#xff1a;python、大数据、人工智能从业者工资为什么人工智能行业的工资那么高&#xff1f;无论是科研院所&#xff0c;商业巨头还是初创企业&#xff0c;各行各业都在大力开发或者引进人工…

C# FileSystemWatcher文件监控实例

FileSystemWatcher可以使用FileSystemWatcher组件监视文件系统&#xff0c;并对文件系统的改变作出反应。通过使用FileSystemWatcher组件&#xff0c;在特定的文件或目录被创建、修改或删除时&#xff0c;可以快速和便捷地启动业务流程。例如&#xff0c;如果一组用户在合作处理…

c语言中二重指针如何赋值,关于二重指针释放的有关问题

关于二重指针释放的问题使用 malloc 来申请内存&#xff0c;申请的代码部分如下&#xff1a;float *fp (float*)malloc(sizeof(float)* h * w);float **cost (float**)malloc(sizeof(float*)* h);for (int i 0; i cost[i] &fp[i * w];}那我释放的时候应该如何释放呢&am…

第一个Win32 SDK应用程序

#include<windows.h>int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);// WinMain 函数int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){HWND hWnd; // 主窗口句柄…

Python 分析《爱情公寓》电影,让我十年情怀一瞬间都喂了狗

深陷抄袭之名、诉讼纠纷的《爱情公寓》终于上映了。情怀粉们的力量不容小觑&#xff0c;截止到8月12&#xff0c;《爱情公寓》票房已经突破3.72亿大关&#xff0c;稳坐票房冠军的宝座&#xff0c;院线排片占比高达40.0%。和超高票房背道而驰的&#xff0c;是各大社交平台上一边…

银行背景下分库分表技术选型

业务持续增长带来的单表数据量过大&#xff0c;必然影响到数据库的读写性能&#xff0c;那到底要不要分库分表呢&#xff1f;阿里巴巴P3C规范给出一个推荐&#xff1a;【推荐】单表行数超过500万行或者单表容量超过2GB&#xff0c;才推荐进行分库分表。说明&#xff1a;如果预计…