Julia体验 语言基础

以前听说过Julia,不过那时候官网还处于时不时宕机状态,最近Julia发布了1.0 released版本到处都是它的资讯,官网良心自带简体中文,趁着热度我也来试试,顺便聊记一二。

关于Julia

Julia源于用户需求。用户希望有一门开源的脚本编程语言,有C的高性能,Ruby的灵活,Lisp的宏,Matlab那样亲切的数学表达式符号。它既可以像Python一样作为通用编程语言,也可以像R一样用于统计分析,像Perl一样自然的处理字符串,像Matlab一样强大的线性代数,像Shell一样的胶着其他程序。
简而言之,它什么都想,什么都像...
官方给出的Julia有以下特性(省略了一些):

快速:Julia可以通过LLVM而跨平台被编译成高效的本地代码。

通用:Julia使用多分派作为编程范式,使其很容易表达面向对象和函数式编程范式。

动态:Julia是动态类型的,与脚本语言类似

数值计算:Julia擅长于数值计算,它的语法适用于数学计算,支持多种数值类型,并且支持并行计算。

可选的类型标注:Julia拥有丰富的数据类型描述

可组合:Julia的包可以很自然的组合运行。单位数量的矩阵或数据表一列中的货币和颜色可以一起组合使用并且拥有良好的性能。

变量和字符串

Julia内建支持大数运算,不需要调用函数。同时也支持unicode

julia> 83275689127389671289376897238976*895623897689127389068912376897289/3487689234768972893+28358923785-23895728937 -3.4911515696355016e18 julia> unicode_var = "你好,中国" "你好,中国" julia> 'g' 'g': ASCII/Unicode U+0067 (category Ll: Letter, lowercase) julia> λ = "special_variable_name" "special_variable_name" julia> λ = "redefine its value since it's a variable" "redefine its value since it's a variable"

字符串会处理转义字符,如果想保留它们需要在前面加上raw

julia> println("hello\nworld") hello world julia> println(raw"hello\nworld") hello\nworld

还可以通过下标运算取到对应字符,最后一个字符用end指代,这但是下标居然不是从0开始的!

julia> welcome[0] ERROR: BoundsError: attempt to access "hello world" at index [0] julia> welcome[1] 'h': ASCII/Unicode U+0068 (category Ll: Letter, lowercase) julia> welcome[end] 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

还可以使用切片操作welcome[2:4]获取子字符串ello。
拼接字符串需要用string(str1,str2.,..)或者*,不能使用+。

如果要对字符串进行内部求值(官方术语interpolation),需要使用$(xx)的语法:

julia> "3+2-5=$(3+2-5)" "3+2-5=0" julia> name = "yang" "yang" julia> "hello, $name" "hello, yang"

Julia目标称希望有Perl一样强大的字符串处理能力,那么内建正则表达式算是言出必行的表现。它的正则表达式是Perl兼容的,由PCRE提供,下面示例来自官方文档:

julia> r"^\s*(?:#|$)" r"^\s*(?:#|$)" julia> typeof(ans) Regex julia> m = match(r"(a|b)(c)?(d)", "acd") RegexMatch("acd", 1="a", 2="c", 3="d") julia> m.match "acd" julia> m.captures 3-element Array{Union{Nothing, SubString{String}},1}: "a" "c" "d" 常量

常量通过const关键字指定,不过常量还能重定义,REPL只显示warning并不阻止这样的做法,只有当重定义不同类型值的时候才会提示Error。文档强烈不建议重定义常量值。

julia> const a,b = 2,3 (2, 3) julia> const a,b = 3,2 WARNING: redefining constant a WARNING: redefining constant b (3, 2) julia> a,b (3, 2) julia> const a,b = 3.0,2 ERROR: invalid redefinition of constant a 类型

整型和浮点类型值不依赖于平台,有明确的范围:

Type Signed? Number of bits Smallest value Largest value
Int8     8   -2^7   2^7 - 1  
UInt8     8   0   2^8 - 1  
Int16     16   -2^15   2^15 - 1  
UInt16     16   0   2^16 - 1  
Int32     32   -2^31   2^31 - 1  
UInt32     32   0   2^32 - 1  
Int64     64   -2^63   2^63 - 1  
UInt64     64   0   2^64 - 1  
Int128     128   -2^127   2^127 - 1  
UInt128     128   0   2^128 - 1  
Bool   N/A   8   false (0)   true (1)  
Type Precision Number of bits
Float16   half   16  
Float32   single   32  
Float64   double   64  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwdwx.html