Julia语言手册(1)入门
科学计算传统上需要最高的性能,但是领域内的专家们在日常工作中更多的会选择慢一些的动态语言。我们相信有很多很好的理由用来在应用问题中选择动态语言,而且我们确实不希望它们的使用变少。幸运的是,现代语言设计和编译器技术使得以下目标成为可能:最大化的消除性能抉择和为原型设计(prototyping)提供一个富有成效的单一环境并且足够有效率的来运用性能加强的应用。Julia编程语言扮演这个角色:灵活的动态语言,科学和数值计算方面的优异表现,以及比得上传统静态类型语言的优异性能。
   Julia的特性包括可选的输入,多重分派(Multiple dispatch)和优异性能,实现了使用类型推断和JIT(just-in-time)编译,使用LLVM执行。它采用多范式的,命令式的特征组合,函数化的并且面向对象的编程方式。Julia的语法类似于MATLAB所以MATLAB程序员看到Julia会感到很亲切。虽然MATLAB对于探索数值线性代数和原形设计很有效率,但它对于这个狭窄范围之外的编程任务的限制颇多。Julia保持了MATLAB在高水平数值计算方面的轻松表现,但是突破了它在一般编程上的局限。为了实现这一点,Julia不仅保持了建立在数学编程语言上的血统,而且广泛借鉴了流行的动态语言如Lisp, Perl, Python, Lua, 和Ruby的优点。
  Julia和传统动态语言最明显的区别:
(1)	核心语言很小,标准库由Julia自己写成,包括象整数计算这样的基本操作
(2)	用来构造和描述对象的丰富的语言类型,也可以选择性的用来构造变量注释
(3)	利用多重指派通过多种参数类型的组合来定义函数行为的能力
(4)	自动生成对不同参数类型的高效,专业的代码
(5)	性能优异,接近类似C一样的静态编译语言
    动态语言并非如某些人所认为的是“无类型的”:每个对象,不管是原始的还是用户定义的,都有一个类型。然而,在大多数动态语言当中,类型声明的缺乏使得不能将类型的值指示给编译器,而且经常不能把类型说清楚。对于静态语言则相反,可以----通常是必须----为编译器声明类型,类型只在编译时间存在而不是在表达或操作时间存在。在Julia中,类型是自身的运行时间对象,并且也能用来给编译器传达信息。
   虽然非正式的程序员不需要明确的使用类型或者多重分派,它们是Julia核心统一的特征:函数由不同参数类型的组合来定义,而且由分派运用到最匹配的定义。这种模式特别适合于数学程序设计,其中对第一个参数不自然的“拥有”一个如同传统的面向对象分派的操作。运算符仅仅是带有特殊记号的函数-----用来扩展添加到新的用户定义的数据类型。现有的代码可以无缝的运用到新的数据类型上。
    部分源于运行时间类型推断(run-time type inference)(由可选的变量声明增强),部分源于在项目初始时对性能的强烈关注,Julia的计算效率超过其他的动态语言,甚至可以和静态语言竞争。对于大尺度数值问题,速度曾经是,依然是,而且可能也将一直是决定性的因素:处理的数据规模在过去的数十年间轻松的跟随这摩尔定律的脚步。
   Julia意图创建一个结合了易用,功能强大和高效率的语言。初此之外,Julia相对于可比的系统还有如下的优势:
(1)	免费开源的 (MIT licensed)
(2)	用户定义类型和内置类型一样简洁
(3)	为并行和分布式计算而设计
(4)	轻量级的“绿色”线程处理(coroutines)
(5)	不引人注目但强大的类型系统
(6)	数值和其他类型优雅和可扩展的转换和推广
(7)	对Unicode的高效支持,包括但不限于 UTF-8
(8)	对C函数的直接引用(不需要封装或需要API)
(9)	管理其他过程的强大的shell-like能力
(10)	Lisp-like的宏和其他的元变成工具
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号