IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Julia 生态发展之路 -> 正文阅读

[Python知识库]Julia 生态发展之路

今年 7 月 19 日,Julia 语言创始人成立的 Julia Computing 公司宣布完成了 2400 万美元的 A 轮融资,由 Dorilton Ventures 领投,Menlo Ventures、General Catalyst 和 HighSage Ventures 跟投?[1]。融资将被用于 Julia 生态的扩张,继续研发产品让 Julia 语言变得更容易部署、更加好用?[2]。

Julia 是一种速度快且使用简单的高级通用编程语言,最初设计用于科学计算领域?[3],2012 年发布以来已有超过 2900 万次下载,超过 10000 家公司使用?[1],包括 AstraZeneca、Google、Intel、Microsoft 和 NASA 等。作为一个开源的语言项目,有超过 1000 贡献者投入社区?[4]。

Julia 近年的发展势头迅猛(8 月 TIOBE 排名 26?[5]),但众所周知,R、Python 已经是数据计算和人工智能领域最流行的语言,拥有非常丰富的生态系统,对比之下,Julia 还很不成熟。Stack Overflow 上关于 Julia 的问题仍不到 Python 的百分之一?[6]。

图片

图 1:Trends on Stack Overflow?[6]

那么 Julia 凭什么优势成为了有力竞争者?


#?突出的特性?#

类似 Python、R 的脚本语言是面向解释器的,用户写完代码,可以直接解释执行,并返回结果;而类似 C、Fortran 等语言必须先编译成机器语言才能执行。后者速度更快但使用起来没有前者方便,因此想要快速实现复杂的程序逻辑时,开发者可能会选择用脚本语言写算法,之后再翻译到 C、C++ 等语言,这是一个花精力又容易出错的过程?[7]。

Julia 的诞生就是为了将以上不同语言的性能结合成一门语言的特性,Julia 的编程过程是交互式的、动态的,同时也拥有静态编译语言的性能?[7]。官网介绍的 Julia 特性如下?[4]:

  • 快速:?接近编译型语言的性能,2017 年甚至加入了 Petaflop 俱乐部(峰值超过每秒 1 petaflop 的语言,另几个语言分别是 C、C++ 和 Fortran),Julia 开发的应用 Celeste 在 NERSC 的超级电脑上使用 1300 万线程,达到了1.54 petaflops 的峰值?[8]。

  • 动态:?是动态类型系统,并很好地支持了交互编程,易于开发者学习使用。

  • 环境可复用:?支持通过 BinaryBuilder 在不同平台上快速重现开发环境。

  • 可组合性:?提供了基于多重派发和类型系统的编程范式,可称为面向方法的(method-oriented)[9]。

  • 通用:?提供了文件读写、元编程、调试、日志记录、性能分析等标准库,还提供了一个包管理工具,可用于实现完整的应用和微服务。

  • 开源:?代码托管在 GitHub,采用 MIT 许可证,当前已有超过 1000 的贡献者。

Julia 的速度一定程度上是语言本身的设计带来的,可以根据需求引入静态类型,牺牲部分不那么重要的动态性换来性能的大幅提升?[10]。可以说 Julia 是在尝试寻找两种编程语言性能和动态的平衡点?[11]。

Julia 官方提供了 Micro-Benchmarks 来比较不同语言编译器在处理一些通用代码时的表现,比如函数调用、字符串解析、排序、数值循环、随机数生成、递归和数组操作等?[12]。可以看到 Julia 的表现接近 Rust, 远比 Python、R 等语言快,特别是在递归的处理上,约为 Python、R 速度的?100?倍。

图片

图 2:Julia Micro-Benchmarks?[12]

#?成长中的生态?#

Julia 语言的生态系统还在飞速成长的阶段,当前可以大致分为语言项目、工具、应用三部分来看?[4]:

  • 语言项目:包括语言设计、编译器等编程语言的实现项目。

  • 工具:围绕语言的使用研发的软件,包括 IDE、基础模块、平台、三方库和框架等,面向用户也为开发人员。

  • 应用:目前在学术研究中的应用比较广泛,相关的库、工具比较完善,在商业产品方向的应用相对较少。

图片

图 3:Julia 生态圈

#?语言项目

Julia 语言项目在 GitHub 上开源,语言仓库主要开发迭代是 2012 年至 2018 年,2019 年至今的代码提交频率并不高。

图片

图 4:Julia 仓库提交次数?[13]

当前开启的 Issues 超过 3000 个,Issues 关联最多的标签是?Performance、doc 和 bug,其中 Performance 标签的描述是 “Must go faster”,Issues 主要是关于使用 Julia 编写的代码优化以达到更快的速度?[13],可见选择 Julia 的用户对于性能的重视。

# 工具

Julia 已有的工具软件生态主要可以支持通用应用、可视化、数据科学、机器学习、科学计算和并行计算等实现?[4]:

  • 通用:完整的工具链支持搭建完整应用,也可以使用其他语言调用,比如使用 PyJulia 在 Python 项目中调用 Julia。

  • 可视化:静态或实时动态数据的可视化,如 Plots.jl、Makie.jl、Gadfly.jl 等。

  • 数据科学:可用 DataFrames.jl 处理数据集,使用 CSV.jl 读取数据,或使用 OnlineStats.jl 在线计算处理流数据等,大部分数据集都可以使用 JDBC.jl 和 ODBC.jl 处理,也可以通过 Spark.jl 与 Spark 框架整合。

  • 机器学习:MLJ.jl 库提供了大部分通用的机器学习算法(如线性拟合、决策树和聚类等),Flux.jl、Knet.jl 是深度学习相关的库,其中?Flux?是最受欢迎的 Julia 库,GitHub 的项目仓库有超过 3000 stars?[14]。

  • 科学计算:?是 Julia 生态最丰富的领域,如最先进的微分工具系统(DifferentialEquations.jl)、优化工具(JuMP.jl and Optim.jl)、迭代线性求解器(IterativeSolvers.jl)、快速傅里叶变换(AbstractFFTs.jl)等等,在其他特定领域也有不同的库,如生物学(BioJulia)、运筹学(JuMP Dev)、图片处理(JuliaImages)等。

  • 并行计算:为每个级别的并行计算都提供了内置基元,包括指令级并行、多线程、GPU 计算和分布式计算。

注册的库已超过 5000 个?[4],在 Julia Observer 上可以看到?Data Science、Graph Theory 和 Machine Learning?三个标签相关库的数量最多(剔除未分类的)[15]。

图片

图 5:各标签相关的库数量?[15]

除了库,Julia 还提供了 Juno、VS Code、Jupyter 等主流编辑器和调试、代码分析等工具的支持。

##?Julia Computing 公司

该公司成立于 2015 年,其成立最重要的目的就是为了发展 Julia 语言。其旗舰产品 JuliaHub 是一个 SaaS(Software as a Service)平台,允许用户直接在平台上使用 Julia 开发、部署应用,并扩展上千个节点。该平台同时提供了 Pumas、JuliaSim、JuliaSPICE 等专业领域的前沿产品,可用于药物、多物理场和电子电路的建模和仿真模拟?[2],其中和 Pumas-AI 在制药领域的合作,给各大疫苗包括新冠疫苗研发中提供了较大的助力,使得 Julia Computing 成功走入大众视野?[16]。

#?在研究领域的应用

Julia 在学术研究中应用广泛,官网要求使用了 Julia 的论文需要引用 《Julia: A Fresh Approach to Numerical Computing》 已被引用超过 2500 次?[17]。

在 2021 年 Julia 开发者调研中显示有 70% 用户使用 Julia 进行学术研究,用于商业工作的相对较少?[18]:

图片

图 6:Julia 开发者调研-用途?[18]

学术研究的用户中研究生或研究人员占比超过 50%,研究方向以计算机科学、数学、物理和化学为主?[18]:

图片

图 7:Julia 开发者调研-学术领域?[18]

使用 Julia 实现的部分主要是数据科学、建模模拟和统计等?[18]:

图片

图 8:Julia 开发者调研-实现的部分?[18]

Julia 目前主要的应用还是在学术研究中,全世界有超过 1500 所高校将 Julia 用于教学实践中或开设 Julia 课程,如 MIT、Stanford 和 UC Berkeley 等?[1]。数值计算、机器学习等方面的生态是最丰富的,职业开发者在其他商业领域采用 Julia 主要也是应用于大数据的分析预测中?[18]。如何扩展 Julia 的应用多样性也是 Julia 要发展生态必须考虑的因素。

#?小结?#

Julia 的创始人在博客中说 Julia 诞生于“我们的贪婪”?[19]:

We are greedy: we want more.

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.

Julia 希望能继承不同编程语言的优点,发展至今,已经实现了创始人们大部分的想法。

近年数据科学、仿真模拟和机器学习等方面的需求快速增长,特别是机器学习的兴起让 Julia 有机会发挥自己的优势?[20]:

  • 语言设计:Julia 有超越大部分动态编程语言的性能,形成了 Julia 的核心竞争力,是用户选择 Julia 的最主要原因?[18];

  • 学术研究应用:数值计算、机器学习方面的生态非常丰富,是起源也是一定会深耕的领域,已经可以支撑大部分数据科学、建模仿真等学术研究的使用;

  • 商业公司 Julia Computing:和 Pumas-AI 的合作已经证实了公司的商业潜力,公司可以给 Julia 语言生态的发展持续提供支持,形成健康的发展模式。

Julia 在其他领域是否可以有更加多样的应用,Julia Computing 公司融资后能实现怎样的商业价值都还是未知数,但 Julia 的演进一定不会停止,创始人们不会满足于现状,最完美的语言可能永远不会出现,但他们在实现的路上已经比其他人走得远了?[20]。


参考

[1]?Julia Computing Raises $24M Series A, Former Snowflake CEO Bob Muglia Joins Board - HPCwire https://www.hpcwire.com/off-the-wire/julia-computing-raises-24m-series-a-former-snowflake-ceo-bob-muglia-joins-board/

[2]?Julia Computing https://juliacomputing.com/

[3]?Julia - wikipedia https://en.wikipedia.org/wiki/Julia_(programming_language)

[4]?Julia https://julialang.org/

[5]?TIOBE Index for August 2021 https://www.tiobe.com/tiobe-index/

[6]?Stack Overflow Insights:Trends https://insights.stackoverflow.com/trends?tags=r%2Cstatistics

[7]?Julia: come for the syntax, stay for the speed - nature https://www.nature.com/articles/d41586-019-02310-3

[8]?Julia Joins Petaflop Club - HPCwire https://www.hpcwire.com/off-the-wire/julia-joins-petaflop-club/

[9]?知乎专栏:浅谈Julia语言:Julia的编程范式 https://zhuanlan.zhihu.com/p/38434080

[10]?Julia: A Fast Dynamic Language for Technical Computing https://arxiv.org/pdf/1209.5145v1.pdf

[11]?掘金:为什么Julia这么快?https://juejin.cn/post/6844903660669911054

[12]?Julia Micro-Benchmarks https://julialang.org/benchmarks/

[13]?JuliaLang/julia - GitHub https://github.com/JuliaLang/julia

[14]?Julia Observer: Packges https://juliaobserver.com/packages

[15]?Julia Observer: Categories https://juliaobserver.com/categories

[16]?Why Julia is Turning Heads in 2021 - the next platform https://www.nextplatform.com/2021/03/22/why-julia-is-turning-heads-in-2021/

[17]?Julia: A Fresh Approach to Numerical Computing - Google Scholar https://scholar.google.com/scholar?q=Julia:+A+Fresh+Approach+to+Numerical+Computing&hl=zh-CN&as_sdt=0&as_vis=1&oi=scholart

[18]?2021 Julia User & Developer Survey https://julialang.org/assets/2021-julia-user-developer-survey.pdf

[19]?Why We Created Julia https://julialang.org/blog/2012/02/why-we-created-julia/

[20]?微信公众号:超越Python、C++、R?人气语言Julia联合创始人Keno Fischer独家专访 https://mp.weixin.qq.com/s/_t4pOOJ-Tc5wXvrcSBrB8w

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:48:01  更:2021-09-10 10:49:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:39:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码