start-julia-01

julia 入门学习

1.打印 println

2.字符串 $ 借鉴perl

3.特点

极其卓越的性能。Julia在很多数据分析任务以及其他编程实践中都表现出了令人难以置信的性能。它的表现可以和C语言媲美,C语言经常被用来作为衡量运算速度的标准。

强大的基础库。Julia有一个强大的基础库,它不需要其他平台,就可以进行所有的线性代数运算,这些运算是数据分析模块的必备组件。

支持多分派。Julia实现了多分派机制,这使它可以使用同一种函数实现不同的过程,使函数更容易扩展,并可以对不同类型的输入重复使用。

容易上手。特别是对于那些从Python、R、Matlab或Octave迁移过来的使用者,学习Julia特别容易。

用户友好的界面。不论是在本地还是云上,Julia的用户界面都非常友好,在所有的流程中,用户与Julia的交流都非常顺畅。Julia还对所有的功能和数据类型提供了方便易用的帮助文件。

与其他语言无缝对接。这些语言包括(但不限于)R、Python和C。这使你不需要进行完整的迁移,就可以使用现有的代码库。

开源。Julia以及它的所有文档与教程都是开源的,非常易于获取,详尽而又全面。

开发者承诺。Julia的开发者承诺会一直加强这门语言的性能,并对使用者提供尽可能的帮助。他们提供了大量的讨论,组织年度会议,并提供咨询服务。

自定义函数。Julia的自定义函数可以和内置在基础代码中的函数一样快速而简洁。

并行能力。Julia具有强大的并行能力,这使得在多核计算机和集群上的部署非常容易。

极大的灵活性。Julia在开发新程序方面极其灵活,不论是编程新手,还是专家级用户,Julia适合各种编程水平的使用者,这个特性在其他语言中是很难得的。

  • 变量

变量名必须以字母(a-z 或 A-Z),下划线,或一个 Unicode 编码指针中指向比 00A0 更大的指针子集开始;特别是 Unicode 字符 Lu/Ll/Lt/Lm/Lo/Nl(字母),Sc/So (货币和其他符号),和其他一些可以看做字符的一些输入(例如 Sm 数学符号的子集)是允许的。首位之后的字符也包括 !和数字(0-9 和其他字符 Nd/No ),以及其他 Unicode 编码指针:变音符号和其他修改标记(字母 Mn/Mc/Me/Sk),一些标点连接器(字母 PC),素数,和其他的一些字符。

运算符类似 + 也是有效的标识符,但需要特别解析。在某些情况下,运算符可以像变量一样使用;例如 (+) 是指增加功能,和 (+) = f 将重新定义这个运算。大多数的 Unicode 中缀操作符(在 Sm 中),如 ⊕ ,会被解析为中缀操作符,同时可以自定义方法(例如,你可以使用 ⊗ = kron 定义 ⊕ 成为一个中缀 Kronecker 积)。

尽管 Julia 对命名本身只有很少的限制, 但尽量遵循一定的命名规范吧:

变量名使用小写字母

单词间使用下划线 (‘_’) 分隔,但不鼓励

类型名首字母大写, 单词间使用驼峰式分隔.

函数名和宏名使用小写字母, 不使用下划线分隔单词.

修改参数的函数结尾使用 ! . 这样的函数被称为 mutating functions 或 in-place functions

  • 字符串

关于 Julia 字符串,有一些值得注意的高级特性:

String 是个抽象类型,不是具体类型
Julia 的 Char 类型代表单字符,是由 32 位整数表示的 Unicode 码位
与 Java 中一样,字符串不可更改:String 对象的值不能改变。要得到不同的字符串,需要构造新的字符串
概念上,字符串是从索引值映射到字符的部分函数,对某些索引值,如果不是字符,会抛出异常
Julia 支持全部 Unicode 字符: 文本字符通常都是 ASCII 或 UTF-8 的,但也支持其它编码

Julia 函数的参数遵循 “pass-by-sharing” 的惯例,即不传递值,而是传递引用。函数参数本身,有点儿像新变量绑定(引用值的新位置),但它们引用的值与传递的值完全相同。对可变值(如数组)的修改,会影响其它函数。

Julia 提供一系列控制流:

复合表达式 : begin 和 (;)
条件求值 : if-elseif-else 和 ?: (ternary operator)
短路求值 : &&, || 和 chained comparisons
重复求值: 循环 : while 和 for
异常处理 : try-catch , error 和 throw
任务(也称为协程) : yieldto

任务(也称为协程)

任务是一种允许计算灵活地挂起和恢复的控制流,有时也被称为对称协程、轻量级线程、协同多任务等。

如果一个计算(比如运行一个函数)被设计为 Task,有可能因为切换到其它 Task 而被中断。原先的 Task 在以后恢复时,会从原先中断的地方继续工作。切换任务不需要任何空间,同时可以有任意数量的任务切换,而不需要考虑堆栈问题。任务切换与函数调用不同,可以按照任何顺序来进行。

任务比较适合生产者-消费者模式,一个过程用来生产值,另一个用来消费值。消费者不能简单的调用生产者来得到值,因为两者的执行时间不一定协同。在任务中,两者则可以正常运行。

Julia 提供了 produce 和 consume 函数来解决这个问题。生产者调用 produce 函数来生产值: