Julia 1.2 Documentation
欢迎阅读Julia 1.2的文档.
请阅读发行说明 ,了解自上次发布以来发生的变化.
Note该文档还提供PDF格式: julia-1.2.0.pdf .Introduction
传统上,科学计算需要最高的性能,但领域专家在很大程度上转向使用较慢的动态语言进行日常工作. 我们认为有很多很好的理由喜欢这些应用程序的动态语言,我们不希望它们的使用减少. 幸运的是,现代语言设计和编译器技术可以大大消除性能折衷,并提供足够的单一环境来进行原型设计,并且足够高效地部署性能密集型应用程序. Julia编程语言充当了这个角色:它是一种灵活的动态语言,适用于科学和数值计算,其性能可与传统的静态类型语言相媲美.
因为Julia的编译器与用于Python或R等语言的解释器不同,您可能会发现Julia的性能起初并不直观. 如果您发现某些内容很慢,我们强烈建议您在尝试其他任何内容之前先阅读"效果提示"部分. 一旦了解了Julia的工作原理,就可以轻松编写几乎与C一样快的代码.
Julia具有可选的输入,多个调度和良好的性能,使用类型推断和即时(JIT)编译实现,使用LLVM实现. 它是多范式的,结合了命令式,功能性和面向对象编程的特性. Julia为高级数值计算提供了易用性和表现力,与R,MATLAB和Python等语言一样,但也支持通用编程. 为了实现这一目标,Julia建立在数学编程语言的基础之上,但也从流行的动态语言中借鉴了很多,包括Lisp , Perl , Python , Lua和Ruby .
Julia与典型动态语言最重要的不同之处在于:
- 核心语言很少; Julia Base和标准库是用Julia编写的,包括整数运算等基本操作
- 用于构造和描述对象的丰富语言类型,也可以选择用于进行类型声明
- 通过多次调度在多种参数类型组合中定义函数行为的能力
- 为不同的参数类型自动生成高效的专用代码
- 良好的性能,接近像C这样的静态编译语言
虽然人们有时会说动态语言是"无类型的 ",但它们绝对不是:每个对象,无论是原始的还是用户定义的,都有一个类型. 但是,大多数动态语言中缺少类型声明意味着无法向编译器指示值的类型,并且通常根本无法明确地讨论类型. 另一方面,在静态语言中,虽然可以 - 通常必须 - 为编译器注释类型,但类型仅在编译时存在,并且不能在运行时进行操作或表达. 在Julia中,类型本身就是运行时对象,也可以用于将信息传递给编译器.
While the casual programmer need not explicitly use types or multiple dispatch, they are the core unifying features of Julia: functions are defined on different combinations of argument types, and applied by dispatching to the most specific matching
definition. This model is a good fit for mathematical programming, where it is unnatural for the first argument to "own " an operation as in traditional object-oriented dispatch. Operators are just functions with special notation – to extend
addition to new user-defined data types, you define new methods for the + function. Existing code then seamlessly applies to the new data types.
部分原因是运行时类型推断(由可选类型注释增强),部分原因是由于项目开始时对性能的强烈关注,Julia的计算效率超过了其他动态语言,甚至是静态编译的竞争对手语言. 对于大规模的数值问题,速度始终如一,并且可能始终是至关重要的:在过去几十年中,正在处理的数据量很容易与摩尔定律保持同步.
Julia旨在以单一语言创建前所未有的易用性,功能和效率组合. 除此之外,Julia相比系统的一些优势包括: