用户指南
导言
科学计算传统上要求最高的性能,但领域专家在很大程度上转向了较慢的动态语言进行日常工作。 我们相信有很多很好的理由选择这些应用程序的动态语言,我们不希望它们的使用减少。 幸运的是,现代语言设计和编译器技术可以在很大程度上消除性能折衷,并提供一个足够高效的原型环境,以及足够高效的部署性能密集型应用程序的环境。 Julia编程语言填补了这个角色:它是一种灵活的动态语言,适用于科学和数值计算,性能可与传统的静态类型语言相媲美。
由于Julia的编译器与Python或R等语言使用的解释器不同,因此您可能会发现Julia的性能起初并不直观。 如果你发现有些东西很慢,我们强烈建议你阅读 性能提示在尝试其他任何东西之前的部分。 一旦你了解了Julia的工作原理,就很容易编写几乎和C一样快的代码。
Julia与其他语言相比
Julia具有可选类型、多次调度和良好的性能,使用类型推断和https://en.wikipedia.org/wiki/Just-in-time_compilation[即时(JIT)编译](及https://github.com/JuliaLang/PackageCompiler.jl[可选提前编译]),使用https://en.wikipedia.org/wiki/Low_Level_Virtual_Machine它是多范式的,结合了命令式、函数式和面向对象编程的特点。 Julia为高级数值计算提供了易用性和表现力,与R,MATLAB和Python等语言相同,但也支持通用编程。 为了实现这一目标,Julia建立在数学编程语言的基础上,但也借鉴了流行的动态语言,包括https://en.wikipedia.org/wiki/Lisp_(programming_language)[Lisp],https://en.wikipedia.org/wiki/Perl_(编程语言)[Perl],https://en.wikipedia.org/wiki/Python_(programming_language)[Python],https://en.wikipedia.org/wiki/Lua_(programming_language)[Lua],和https://en.wikipedia.org/wiki/Ruby_(programming_language)[Ruby]。
Julia与典型动态语言的最显着差异是:
*核心语言强加很少; Julia Base和标准库是用Julia本身编写的,包括像整数算术这样的原始操作 *用于构造和描述对象的丰富类型语言,也可以选择用于进行类型声明 *能够通过以下方式在参数类型的许多组合中定义函数行为https://en.wikipedia.org/wiki/Multiple_dispatch[多重派遣] *为不同的参数类型自动生成高效的专用代码 *良好的性能,接近像c这样的静态编译语言
虽然人们有时会说动态语言是"无类型的",但它们绝对不是。 每个对象,无论是原始的还是用户定义的,都有一个类型。 然而,大多数动态语言中缺少类型声明意味着无法指示编译器有关值的类型,并且通常根本无法明确地谈论类型。 另一方面,在静态语言中,虽然可以-而且通常必须-为编译器注释类型,但类型仅存在于编译时,不能在运行时操作或表达。 在Julia中,类型本身就是运行时对象,也可以用来向编译器传达信息。
是什么让朱莉娅,朱莉娅?
虽然临时程序员不需要显式地使用类型或多个调度,但它们是Julia的核心统一特性:函数定义在参数类型的不同组合上,并通过调度应用于最具体的匹配定义。 这个模型非常适合数学编程,因为在传统的面向对象调度中,第一个参数"拥有"一个操作是不自然的。 运算符只是具有特殊符号的函数-为了扩展新的用户定义数据类型的加法,您可以为 + 函数。 然后,现有代码无缝地应用于新的数据类型。
部分原因是由于运行时类型推断(通过可选类型注释增强),部分原因是由于项目一开始就对性能的高度关注,Julia的计算效率超过了其他动态语言,甚至可以与静态编译语言相媲美。 对于大规模数值问题,速度一直是,继续是,并且可能永远是至关重要的:在过去的几十年中,正在处理的数据量很容易跟上摩尔定律。
朱莉娅的优点
Julia的目标是在单一语言中创造一种前所未有的易用性、功能和效率组合。 除了上述之外,Julia相对于可比系统的一些优势 include:
*免费和开源(https://github.com/JuliaLang/julia/blob/master/LICENSE.md[麻省理工学院许可]) *用户定义的类型与内置类型一样快速和紧凑 *无需为性能矢量化代码;设计化代码速度快 *专为并行和分布式计算而设计 *轻量级"绿色"线程(https://en.wikipedia.org/wiki/Coroutine[协程]) *不显眼但功能强大的类型系统 *优雅和可扩展的数字和其他类型的转换和促销 *有效支援https://en.wikipedia.org/wiki/Unicode[Unicode],包括但不限于https://en.wikipedia.org/wiki/UTF-8[UTF-8] *直接调用C函数(不需要包装器或特殊Api) *强大的类似shell的功能,用于管理其他进程 *类似Lisp的宏和其他元编程设施