未来明星语言 Julia 将成 Python 劲敌

2023-10-24 13:58

本文主要是介绍未来明星语言 Julia 将成 Python 劲敌,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

去年今日,MIT Julia Lab 推出了 Julia 1.0 版。一年来,它的表现如何?

据 MIT 报道,截至 2018 年底,Julia 的下载量超过 300 万,并在超过 1500 所大学中用于科学和数值计算。根据 2019 年 8 月 TIOBE 编程语言指数,Julia 从 7 月的第 50 名升至第 39 名,在众多语言中上升幅度显著。今年 7 月,在将 Python 解释器移植到 Firefox 之后,Mozilla 出资将 Julia 引入 Firefox 和一般浏览器……

最近,Julia 开发团队对来自 90 多个国家的 1844 名 Julia 用户和开发人员进行了调查,结果显示,93% 的受访者喜爱 Julia,Python、C 排名第二、三位,分别获得 61% 和 27% 的投票率。这份完整的调查报告在今年7 月底的JuliaCon 上发布。在此次会议上,开发者还宣布将发布一个全新的Julia 线程接口—— 受到 Cilk 、 Intel Threading Building Blocks (TBB) 以及 Go 等启发的通用任务并行机制。看起来,Julia 的进化正在稳步有序地进行着。

Julia 会是编程语言中的“黑马”吗?你是否已经准备好学习这门崛起中的新语言了呢?

Julia 是什么?
Julia 诞生于 MIT 计算机科学与人工智能实验室 (CSAIL) 和数学系,由 Jeff Bezanson 博士、前 MIT Julia Lab 研究员 Stefan Karpinski、Viral B. Shah 和数学系教授 Alan Edelman 于 2009 年创建,并于 2012 年公开发布。开发者在 2012 年 2 月的博客中写道,

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

Julia 是一门灵活的动态语言,适用于科学计算和数值计算,其性能可与传统的静态类型语言媲美。它具有如下特点:

快速:Julia 一开始就是为高性能而设计的。Julia 可以通过 LLVM 而跨平台被编译成高效的本地代码。
通用:Julia 使用多重派发作为编程范式,使其更容易表达面向对象和函数式编程范式。标准库提供了异步 I/O、进程控制、日志记录、性能分析、包管理器等等。
动态:Julia 是动态类型的,与脚本语言类似,并且对交互式使用具有很好的支持。
数值计算:Julia 擅长于数值计算,它的语法适用于数学计算,支持多种数值类型,并且支持并行计算。Julia 的多分派自然适合于定义数值和类数组的数据类型。
可选的类型标注:Julia 拥有丰富的数据类型描述,类型声明可以使得程序更加可读和健壮。
可组合:Julia 的包可以很自然的组合运行。单位数量的矩阵或数据表一列中的货币和颜色可以一起组合使用并且拥有良好的性能。
2018 年 12 月,Julia 的三位联合开发者 Bezanson、Karpinski 和 Shah 获得 2019 年 James H.Wilkinson 数字软件奖。根据选拔委员会的一份声明,“Julia 允许研究人员以直观的语法编写高级代码,并以生产编程语言的速度生成代码。它已被科学计算界广泛采用,包括天文学、经济学、深度学习、能源优化和医学等应用领域。尤为特别的是,美国联邦航空管理局选择 Julia 作为下一代机载防撞系统的语言。”

在 GitHub 上有 Julia 应用于计算生物学、统计学、机器学习、图像处理、微分方程和物理学等领域的小组。根据最新调查报告,目前,Julia 的主要应用领域包括统计学与数据科学、工程学、机器学习、计算机科学、物理学、数学、人工智能、信号与图像处理等。73% 的用户使用 Julia 从事科研工作,54% 的用户将其用于个人工作,16% 的用户将其用于教学。

与 Python 的区别
Julia 需要用 end 来结束代码块。与 Python 不同,Julia 没有 pass 关键字。
在 Julia 中,数组、字符串等的索引从 1 开始,而不是从 0 开始。
Julia 的切片索引包含最后一个元素,这与 Python 不同。Julia 中的 a[2:3] 就是 Python 中的 a[1:3]。
Julia 不支持负数索引。特别地,列表或数组的最后一个元素在 Julia 中使用 end 索引,而不像在 Python 中使用 -1。
Julia 的 for、if、while 等代码块由 end 关键字终止。缩进级别并不像在 Python 中那么重要。
Julia 没有用来续行的语法:如果在行的末尾,到目前为止的输入是一个完整的表达式,则认为已经结束;否则,认为输入继续。强制表达式继续的一种方式是将其包含在括号中。
默认情况下,Julia 数组是列优先的(Fortran 顺序),而 NumPy 数组是行优先(C 顺序)。为了在循环数组时获得最佳性能,循环顺序应该在 Julia 中相对于 NumPy 反转(请参阅 Performance Tips 中的对应章节)。
Julia 的更新运算符(例如 +=,-=,···)是 not in-place,而 Numpy 的是。这意味着 A = [1, 1]; B = A; B += [3, 3] 不会改变 A 中的值,而将名称 B 重新绑定到右侧表达式 B = B + 3 的结果,这是一个新的数组。对于 in-place 操作,使用 B .+= 3(另请参阅 dot operators )、显式的循环或者 InplaceOps.jl。
每次调用方法时,Julia 都会计算函数参数的默认值,不像在 Python 中,默认值只会在函数定义时被计算一次。例如,每次无输入参数调用时,函数 f(x=rand()) = x 都返回一个新的随机数在另一方面,函数 g(x=[1,2]) = push!(x,3) 在每次以 g() 调用时返回 [1,2,3]。
在 Julia 中,% 是余数运算符,而在 Python 中是模运算符。
与 MATLAB、R、C/C++ 的区别详见文档。

为什么用 Julia?
Julia 最受欢迎的技术特征包括快速和高性能、易于使用、开源、多重派发以及解决了两种语言问题;最受欢迎的非技术特征包括自由、社区开发者富有才华且活跃、易于创建包以及采用 MIT 许可证。

Julia 最大的技术问题在于包并不像所需的那样成熟或维护良好、生成第一个图需要很长时间;最大的非技术问题在于同事、公司或合作者使用其他语言,在用户所在的领域 / 行业中,没有足够的 Julia 用户。

据外媒 ZDNet 此前发布的数据,Julia 的 GitHub Star 数在过去一年翻了一番,该语言还被 1000 多种学术出版物引用。

关于”为什么你会使用 Julia“的问题,52% 的受访者表示,Julia 似乎是未来的语言,43% 的人认为,它能使工作速度更快。

你是否已经准备好学习这门新语言了吗?

这篇关于未来明星语言 Julia 将成 Python 劲敌的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/275633

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e