Home

Julia 1.2 Documentation

欢迎使用Julia 1.2的文档.

请阅读发行说明,以查看自上一发行版以来发生的变化.

Note

该文档也以PDF格式提供: julia-1.2.0.pdf .

Introduction

传统上,科学计算需要最高的性能,但领域专家已在很大程度上转向了较慢的动态语言来进行日常工作. 我们认为有很多充分的理由更喜欢在这些应用程序中使用动态语言,并且我们不希望它们的使用有所减少. 幸运的是,现代语言设计和编译器技术可以最大程度地消除性能折衷,并提供一个足以为原型设计提供足够生产力并为部署性能密集型应用程序提供足够高效的单一环境. Julia编程语言担当了这个角色:这是一种灵活的动态语言,适用于科学和数值计算,其性能可与传统的静态类型语言相提并论.

由于Julia的编译器不同于Python或R等语言的解释器,因此您可能会发现Julia的性能起初并不直观. 如果发现运行缓慢,我们强烈建议您先阅读" 性能提示"部分,然后再尝试其他操作. 一旦了解了Julia的工作原理,就可以轻松编写出几乎与C一样快的代码.

Julia具有通过使用LLVM实现的类型推断和即时(JIT)编译功能实现的可选类型输入,多次分派和良好的性能. 它是多范式,结合了命令式,功能性和面向对象编程的功能. Julia以与R,MATLAB和Python之类的语言相同的方式为高级数值计算提供了简便和表达性,但也支持常规编程. 为了实现这一目标,Julia建立在数学编程语言的基础上,但也从流行的动态语言(包括LispPerlPythonLuaRuby)中借鉴了很多东西.

Julia与典型的动态语言最大的不同是:

尽管有时有人说动态语言是"无类型的",但它们绝对不是:每个对象(无论是原始对象还是用户定义的对象)都具有类型. 但是,在大多数动态语言中都缺乏类型声明,这意味着人们无法指导编译器有关值的类型,并且通常根本不能明确地谈论类型. 另一方面,在静态语言中,虽然可以(通常必须)为编译器注释类型,但类型仅在编译时存在,而不能在运行时进行操作或表示. 在Julia中,类型本身就是运行时对象,也可以用于将信息传达给编译器.

尽管临时程序员不必显式使用类型或多个分派,但它们是Julia的核心统一功能:函数是在参数类型的不同组合上定义的,并通过分派到最特定的匹配定义来应用. 此模型非常适合数学编程,在数学编程中,第一个参数"拥有"一个操作是不自然的,就像在传统的面向对象的分派中那样. 运算符只是具有特殊表示法的函数-要扩展除添加到新的用户定义的数据类型之外,还可以为+函数定义新的方法. 然后,现有代码无缝地应用于新数据类型.

Partly because of run-time type inference (augmented by optional type annotations), and partly because of a strong focus on performance from the inception of the project, Julia's computational efficiency exceeds that of other dynamic languages, and even rivals that of statically-compiled languages. For large scale numerical problems, speed always has been, continues to be, and probably always will be crucial: the amount of data being processed has easily kept pace with Moore's Law over the past decades.

朱莉娅(Julia)的目标是用一种语言创建前所未有的易用性,功能和效率的组合. 除上述内容外,Julia与同类系统相比的一些优势包括: