Julia 1.10 文档

欢迎使用 Julia 1.10 的文档。

请阅读发行说明以了解自上次发布以来的更改。

注意

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

以下是学习和使用 Julia 编程语言时会用到的一些非详尽链接列表。

简介

科学计算传统上需要最高的性能,但领域专家在日常工作中已转向速度较慢的动态语言。我们认为,在这些应用程序中,更喜欢动态语言有很多很好的理由,并且我们预计它们的使用不会减少。幸运的是,现代语言设计和编译器技术使得能够在很大程度上消除性能权衡,并提供一个既适合原型设计又适合部署性能密集型应用程序的单一环境。Julia 编程语言就扮演着这个角色:它是一种灵活的动态语言,适用于科学和数值计算,其性能可与传统的静态类型语言相媲美。

由于 Julia 的编译器不同于 Python 或 R 等语言使用的解释器,因此您可能会发现 Julia 的性能一开始并不直观。如果您发现某些内容速度很慢,我们强烈建议在尝试其他任何操作之前阅读性能提示部分。一旦您了解了 Julia 的工作原理,编写速度接近 C 的代码就很容易了。

Julia 与其他语言的比较

Julia 具有可选类型、多重分派和良好的性能,这些性能是通过类型推断和即时 (JIT) 编译(以及可选的提前编译)实现的,使用LLVM实现。它是一种多范式语言,结合了命令式、函数式和面向对象编程的功能。Julia 以与 R、MATLAB 和 Python 等语言相同的方式为高级数值计算提供了易用性和表达性,但也支持通用编程。为了实现这一点,Julia 构建在数学编程语言的血统之上,但也借鉴了许多流行的动态语言,包括LispPerlPythonLuaRuby

Julia 与典型动态语言最显著的不同之处在于

  • 核心语言几乎不强加任何限制;Julia Base 和标准库是用 Julia 本身编写的,包括整数算术等基本操作
  • 用于构建和描述对象的丰富的类型语言,也可以选择用于进行类型声明
  • 通过多重分派定义跨多个参数类型组合的函数行为的能力
  • 为不同的参数类型自动生成高效的专用代码
  • 良好的性能,接近于 C 等静态编译语言的性能

尽管有时人们将动态语言称为“无类型”语言,但它们绝对不是。每个对象,无论是原始对象还是用户定义对象,都具有类型。然而,大多数动态语言中缺乏类型声明意味着无法指示编译器有关值类型的任何信息,并且通常无法完全明确地讨论类型。另一方面,在静态语言中,虽然可以(并且通常必须)为编译器添加类型注释,但类型仅存在于编译时,并且无法在运行时进行操作或表达。在 Julia 中,类型本身是运行时对象,也可以用来向编译器传递信息。

是什么让 Julia 成为 Julia?

虽然偶尔的程序员不需要明确使用类型或多重分派,但它们是 Julia 的核心统一特性:函数是在不同参数类型的组合上定义的,并通过分派到最匹配的特定定义来应用。此模型非常适合数学编程,在数学编程中,第一个参数“拥有”操作(如传统的面向对象分派)是不自然的。运算符只是具有特殊表示法的函数——要将加法扩展到新的用户定义数据类型,您需要为+函数定义新的方法。然后,现有代码可以无缝地应用于新的数据类型。

部分原因是运行时类型推断(通过可选类型注释增强),部分原因是该项目从一开始就高度关注性能,Julia 的计算效率超过了其他动态语言,甚至可以与静态编译语言相媲美。对于大型数值问题,速度一直是、仍然是并且可能永远都是至关重要的:在过去的几十年里,处理的数据量很容易与摩尔定律保持同步。

Julia 的优势

Julia 旨在在一门语言中创造前所未有的易用性、强大功能和效率的组合。除了上述内容外,与同类系统相比,Julia 还具有一些优势,包括

  • 免费和开源(MIT 许可
  • 用户定义类型与内置类型一样快且紧凑
  • 无需为了性能而将代码矢量化;非矢量化代码速度很快
  • 专为并行和分布式计算而设计
  • 轻量级“绿色”线程(协程
  • 不显眼但功能强大的类型系统
  • 用于数值和其他类型的优雅且可扩展的转换和提升
  • Unicode(包括但不限于UTF-8)的有效支持
  • 直接调用 C 函数(无需包装器或特殊 API)
  • 强大的类似 shell 的功能,用于管理其他进程
  • 类似 Lisp 的宏和其他元编程功能