Julia 1.5 Documentation

欢迎使用Julia 1.5的文档.

请阅读发行说明,以了解自上次发行以来发生的变化.

Note

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

Introduction

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

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

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

朱莉娅与典型的动态语言最大的不同是:

  • 核心语言的内容很少. Julia Base和标准库都是用Julia本身编写的,包括诸如整数算术之类的原始运算
  • 丰富的用于构造和描述对象的类型语言,也可以选择用来进行类型声明
  • 通过多次分派在众多参数类型组合中定义函数行为的能力
  • 自动为不同的参数类型生成高效,专业的代码
  • 良好的性能,接近C等静态编译语言的性能

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

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

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

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

  • 免费和开源( MIT许可
  • 用户定义的类型与内置的类型一样快速且紧凑
  • 无需向量化代码即可提高性能; 去矢量化的代码很快
  • 专为并行和分布式计算而设计
  • 轻量级的"绿色"线程( 协程
  • 不打扰但功能强大的字体系统
  • 数字和其他类型的优雅且可扩展的转换和促销
  • Unicode的有效支持,包括但不限于UTF-8
  • 直接调用C函数(不需要包装器或特殊API)
  • 强大的类似于Shell的功能,用于管理其他进程
  • Lisp-like macros and other metaprogramming facilities

by  ICOPY.SITE