Julia 1.1 Python/R/Matlab的强大结合

6394227-6b293df957e57430.png
image.png

介绍

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

由于Julia的编译器与用于Python或R等语言的解释器不同,您可能会发现Julia的性能起初并不直观。如果您发现某些内容很慢,我们强烈建议您在尝试其他任何内容之前先阅读“效果提示”部分。一旦了解了Julia的工作原理,编写几乎与C一样快的代码就很容易了。

Julia具有可选的输入,多个调度和良好的性能,使用类型推断和即时(JIT)编译实现,使用LLVM实现。它是多范式的,结合了命令式,功能性和面向对象编程的特性。Julia为高级数值计算提供了易用性和表现力,与R,MATLAB和Python等语言一样,但也支持通用编程。为了实现这一目标,Julia建立在数学编程语言的基础之上,但也从流行的动态语言中借鉴了很多,包括LispPerlPythonLuaRuby

Julia与典型动态语言最重要的不同之处在于:

  • 核心语言很少; Julia Base和标准库是用Julia编写的,包括整数运算等基本操作
  • 用于构造和描述对象的丰富语言类型,也可以选择用于进行类型声明
  • 通过多次调度在多种参数类型组合中定义函数行为的能力
  • 为不同的参数类型自动生成高效的专用代码
  • 良好的性能,接近像C这样的静态编译语言

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

虽然临时程序员不需要显式使用类型或多个调度,但它们是Julia的核心统一特性:函数在参数类型的不同组合上定义,并通过调度到最具体的匹配定义来应用。这个模型非常适合数学编程,在传统的面向对象的调度中,“拥有”操作的第一个参数是不自然的。运算符只是带有特殊符号的函数 - 为了扩展新用户定义数据类型的添加,您可以为+函数定义新方法。然后,现有代码无缝地应用于新数据类型。

部分原因是运行时类型推断(由可选类型注释增强),部分原因是由于项目开始时对性能的强烈关注,Julia的计算效率超过了其他动态语言,甚至是静态编译的竞争对手语言。对于大规模的数值问题,速度始终如一,并且可能始终是至关重要的:在过去几十年中,正在处理的数据量很容易与摩尔定律保持同步。

Julia旨在以单一语言创建前所未有的易用性,功能和效率组合。除此之外,Julia相比系统的一些优势包括:

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

猜你喜欢

转载自blog.csdn.net/weixin_33928467/article/details/86893868
1.1