Skip to content

Latest commit

 

History

History
64 lines (40 loc) · 4.83 KB

前言.md

File metadata and controls

64 lines (40 loc) · 4.83 KB

科学计算从来就要求最高的性能,然而该领域的专家大规模迁移到较慢的动态语言应付日常工作。

猪吏相信群众有足够理由亲近动态语言做各种应用,猪吏并不期望群众减少使用动态语言。

幸运的是,摩登语言设计和编译器技术使得最大限度地消除性能权衡成为可能,并且提供一个足够产能的、足够高效的单独环境来做性能密集应用的原型设计和部署。

猪吏充当这个角色:是门灵活的动态语言,适合科学(数值)计算,有着可与传统静态类型语言媲美的性能。

因为猪吏编译器和Python/R等语言采用解释器不同,群众会发现猪吏的性能一上来并不明显(unintuitive)。如果群众发现任何蜗牛,猪吏强烈建议群众在尝试任何姿势之前通读【性能窍门】章节。群众一旦明白猪吏咋做,撸出快如C的代码易如反掌。

可选类型、重载、杰出性能是猪吏的特征,有赖类型推断(inference)和【JIT(Just-In-Time)】编译、【LLVM】。

多范式、命令式(combining features of imperative),函数式、面向对象,猪吏样样在行。

猪吏提供简单且善于表现的高级数值运算,像R/MATLAB/Python一样,且支持传统编程。

为此,猪吏继承数学编程语言的血统,同时混杂包括Lisp/Perl/Python/Lua/Ruby在内的流行动态语言精华(想来是个杂种)。

以下是猪吏与典型动态语言最显著的区别:

  • 语言核心强扭甚少,基础和标准库用Julia编写,包括整型算术等原始操作。
  • 一大堆类型用于构造描述对象,还可选地用来声明类型。
  • 通过重载,能够定义多种参数类型交叉组合的函数行为。
  • 为不同参数类型自动生成高效的,专业的代码。
  • 极高性能,接近静态的、编译的,如C的编程语言。

尽管有人偶尔声称“动态语言是无类型的”,然而并非如此:每个对象,基本的或用户自定义的,都有类型。

大多动态缺失类型声明,可是,这意味着程序员不能告知编译器值的类型,通常完全不能明确告知类型信息。

在静态语言中,另外一方面,程序员通常则(必须)可以为编译器注解类型,类型仅存在于编译中,在运行时不能操作或表达。

猪吏中的类型则是运行时对象,也可以传达信息给编译器。

当临时码农(嚓)不需要显式使用类型或重载,这些是Julia的关键统一特性,函数定义在不同参数类型组合,通过重载运行最匹配的定义。这个模型很适合数学编程,该场合像传统面向对象重载中第一个参数持有操作会显得别扭。

操作符就是有着特殊符号的函数,对扩展额外的用于自定义数据类型,需要定义新的“+”函数。

已有的代码则将无缝应用到新的数据类型。

一部分受运行时类型推断(通过可选的类型注解扩展)的影响、一部分受Julia项目起初强烈聚焦性能的影响,Julia运算效率超越别的动态语言,甚至可与静态的、编译的语言一较高下。

对大规模数值问题,速度经常是、持续是、可能是决定性的:在过去的几十年,要处理的数据量亦符合(has easily kept pace with)摩尔定律(Moore's Law)。

猪吏旨在创造空前的、集好用(ease-of-use)、强大、高效于一身的独门语言。

出上述牛逼之外,Julia的一些可吹的体制包括:

  • 自由且开源(MIT)。
  • 用户自定义数据类型很快且紧凑如内建。
  • 无需为追求性能而矢量化代码,裸码(devectorized: 居然造词)就很快。
  • 为并行和分布式计算而设计。
  • 轻量级绿色线程(协程(coroutines))。
  • 低调(Unobtrusive)却强大的类型系统。
  • 数值和别的类型优雅且可扩展的转换和提升。
  • 有效地支持Unicode,包括但不限于UTF-8
  • 直接调用C函数,不需要特殊地API包装。
  • 强大的类SHELL能力管理过程。
  • 类Lisp宏和别的元编程设施。

译后感

  • 江胡规矩,来一波自吹自擂。