前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么你应该学习Julia

为什么你应该学习Julia

作者头像
PantaZheng
发布2018-09-10 12:00:43
2.9K0
发布2018-09-10 12:00:43

Julia是什么?

Julia是于2012年发布的一种函数式编程语言。它的创建者希望将Python的可读性和简单性与以C语言为代表的静态编译语言的速度相结合。

Julia适合谁来使用?

Julia在数据科学家和数学家中很受欢迎。它可以与像Mathematica一样的数学和数据软件来共享功能(例如以1为基址的数组索引和功能设计),其语法更接近于数学家用于编写公式的方式。Julia还提供对并行和云计算的出色支持,这使其成为大数据项目的理想选择。

我应该学习Julia吗?

Julia是一门相对较新的语言并且其目前仍在开发状态中,所以与你所期望的成熟语言相比,其仍会有很多的bug并且原生包较少。而像Python和Java这样的成熟语言也会有更大的社区,所以会可以更容易地找到相关教程、第三方包和问题的解决答案。但是就另一方面来说,Julia的速度、易用性以及对大数据应用程序的适用性(通过对并行和云计算的高级支持)会帮助它快速增长并继续吸引新用户。很多Julia开发人员在谷歌,美国宇航局和英特尔等公司工作,诸如RStudio这样的重大项目都已经宣布计划增加对Julia的支持。

编译特性

Julia是一种编译型语言,这是它比解释型语言执行速度更快的原因之一。然而与传统编译型语言相比,Julia并不是严格静态类型的。它使用JIT(即时)编译来推断代码中每个变量的类型,这就导致它虽然是一种像Python一样可以从命令行运行的动态类型语言,但可以达到与与C和Go等编译语言相当的速度。

并行性

Python为了充分利用系统上所有的CPU内核,是可以并行运行代码的。然而,这需要导入模块并可能会出现一些会使并行难以工作的问题。相比之下,Julia对并行性的支持是基于顶层,并且其声明并行运行函数的语法是比较直观的:

代码语言:txt
复制
nheads = @parallel (+) for i = 1:100000000
  rand(Bool)
end

由于Python比Julia更久远,拥有更广泛的用户群和庞大、热情的社区,所以Python有一个庞大的库并包含很多维护良好的库文件和包。Julia作为一种较新的语言,拥有较小的用户群,可用的软件包数量要少得多。您可以在Julia中运行Python库(通过调用PyCall包),也可以在Julia代码中调用和运行C/Fortran的库,这使得Julia用户可以访问比其他方式更多的外部库,但Python与Julia相比仍然具有大量原生包和充满活力的社区的优势。

类型检查

Python是一种动态类型语言,也就是说您可以在不指定类型的情况下声明变量,Python解释器会根据提供的值来确定类型(例如,m = 5将被解释为整数)。Julia中的变量不仅可以用这种方式声明, 其还可以为声明为指定类型或一系列可能的类型的变量。指定函数的预期类型有助于编译器优化以获得更好的性能,还可以防止因意外或不正确的输入而导致的错误。

多重分配

多重分配是指声明相同功能函数的不同版本以更好地处理不同类型的输入。例如,您可以编写两个不同的reverse函数,一个接受数组作为参数,另一个则接受字符串。Julia解释器将在调用reverse时检查参数的类型,并将函数分配给与该类型匹配的版本。

数组索引

Julia和Python(以及大多数其他现代编程语言)之间的一个很小但又重要的区别就是Julia中的数组是以1为基础索引的,这意味着您访问数组的第一个元素是this_array[1]而不是this_array[0]。这一选择是为了让Julia对Mathematica和其他技术计算工具的用户更加直观,但对于习惯于以0为基础索引语言的用户来说,这可能是令人沮丧(并且可能是错误)的根源。

应该如何开始使用Julia?

安装Julia

在所有平台上,安装Julia的推荐方法是通过Julialang下载页面上的官方软件包来进行安装。Mac和Windows版本将自动在您的计算机上安装Julia; 在Linux上,您必须解压.tar文件并将其移动或符号链接到系统路径上的确定位置:

写下你的第一个程序

  1. 在文本编辑器中,创建example.jl并添加以下内容:
    circumference函数指定只应接受浮点值作为输入(特别指定 Float64类型)。另外,pi是一个内置变量,您可以通过2pi就将它乘以2,而不是Python或类似语言的pi*2形式。
  2. 有很多方法可以运行此示例程序。如果Julia二进制文件变量已经设置在PATH中,则可以从命令行调用它:
  3. 从命令行,启动Julia REPL解释器并采用include方式包含example.jljulia include("example.jl")
  4. 然后,您可以直接从example.jl直接调用函数。下例传入整数来调用circumference
    发生上文的错误是因为circumference只接受浮点值,并且没有可接受整数的函数版本。您可以通过设置允许任何数字作为参数来避免此错误(例如参数使用radius::Real来允许所有实数)。您还可以通过声明另一个带有整数的同名函数来实现多重分配:

更多信息

有关此主题的其他信息,您可能有参考以下资源的需求。虽然我们希望提供的是有效的信息,但请注意,我们无法保证外部托管材料的准确性或及时性。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Julia是什么?
  • Julia适合谁来使用?
  • 我应该学习Julia吗?
    • 编译特性
      • 并行性
          • 类型检查
            • 多重分配
              • 数组索引
              • 应该如何开始使用Julia?
                • 安装Julia
                  • 写下你的第一个程序
                  • 更多信息
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档