专栏首页python深度学习实用Manjaro Linux的安装与入门 Julia初步学习
原创

实用Manjaro Linux的安装与入门 Julia初步学习

Julia是一门为科学计算而生的编程语言,其着重强调了开源、生态与性能。从开源角度来说,相比于Matlab就要友好很多,用户可以免费使用,而且MIT协议应该是最宽松的开源协议之一:

而生态则是对标的C/C++语言,我们都知道python是一门生态非常强大的编程语言,各种轮子很大程度上减少了学习成本和工作量,而julia的目标也是如此。最后在性能上是对标的python,我们都知道python作为一门解释性语言,在性能上有较大的牺牲。除非我们使用c++或者fortran去构造动态链接库,然后通过python上层语言来封装,这样才能在性能上有所保障,但是工作量又被放大了。Julia的优势就在于可以达到接近于C语言的性能,同时又能像python一样易于编写,兼顾了性能与开发周期,对科学计算非常的友好。

在Manjaro Linux上安装Julia

如果我们直接搜索Julia在Manjaro Linux下的安装方法,很有可能搜到一个类似于参考链接4中所提供的方案。这个方案是从官网下载一个可执行文件,然后将该文件存放到系统路径下。虽然这也不失为一个比较通用的方法,但是我个人更倾向于从系统的源里面去寻找资源,而Manjaro Linux其实是有julia的资源的,只是会有一些依赖需要我们去独立安装。我们先尝试一下直接安装julia:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[dechin-root 2021-softwares]# pacman -S julia
正在解析依赖关系...
正在查找软件包冲突...
警告:正在从目标清单中删除 'blas' ,因为它和 'openblas' 冲突

软件包 (11) cblas-3.9.0-3  lapack-3.9.0-3  libutf8proc-2.6.1-1  llvm10-libs-10.0.1-4
            mbedtls-2.25.0-1  metis-5.1.0.p10-1  openblas-0.3.13-2  openlibm-0.7.5-1
            suitesparse-5.9.0-1  tbb-2020.3-1  julia-2:1.5.4-1

下载大小:   51.24 MiB
全部安装大小:  272.10 MiB

:: 进行安装吗? [Y/n] Y
:: 正在获取软件包......
 cblas-3.9.0-3-x86_64        33.9 KiB  4.73 MiB/s 00:00 [#############################] 100%
 metis-5.1.0.p10-1-x86_64   166.6 KiB  2.71 MiB/s 00:00 [#############################] 100%
 lapack-3.9.0-3-x86_64        2.3 MiB  9.36 MiB/s 00:00 [#############################] 100%
 tbb-2020.3-1-x86_64        393.4 KiB  8.73 MiB/s 00:00 [#############################] 100%
 suitesparse-5.9.0-1-x...  1101.7 KiB  9.44 MiB/s 00:00 [#############################] 100%
 llvm10-libs-10.0.1-4-...    21.2 MiB  8.32 MiB/s 00:03 [#############################] 100%
 openblas-0.3.13-2-x86_64  1448.8 KiB  6.97 MiB/s 00:00 [#############################] 100%
 libutf8proc-2.6.1-1-x...    76.9 KiB  25.0 MiB/s 00:00 [#############################] 100%
 mbedtls-2.25.0-1-x86_64    848.9 KiB  4.30 MiB/s 00:00 [#############################] 100%
 openlibm-0.7.5-1-x86_64    111.5 KiB  4.03 MiB/s 00:00 [#############################] 100%
 julia-2:1.5.4-1-x86_64      23.6 MiB  2.90 MiB/s 00:08 [#############################] 100%
(11/11) 正在检查密钥环里的密钥                          [#############################] 100%
(11/11) 正在检查软件包完整性                            [#############################] 100%
(11/11) 正在加载软件包文件                              [#############################] 100%
(11/11) 正在检查文件冲突                                [#############################] 100%
(11/11) 正在检查可用存储空间                            [#############################] 100%
:: 正在处理软件包的变化...
( 1/11) 正在安装 openblas                               [#############################] 100%
( 2/11) 正在安装 cblas                                  [#############################] 100%
( 3/11) 正在安装 libutf8proc                            [#############################] 100%
( 4/11) 正在安装 metis                                  [#############################] 100%
( 5/11) 正在安装 lapack                                 [#############################] 100%
( 6/11) 正在安装 tbb                                    [#############################] 100%
( 7/11) 正在安装 suitesparse                            [#############################] 100%
( 8/11) 正在安装 mbedtls                                [#############################] 100%
( 9/11) 正在安装 openlibm                               [#############################] 100%
(10/11) 正在安装 llvm10-libs                            [#############################] 100%
(11/11) 正在安装 julia                                  [#############################] 100%
julia 的可选依赖
    gnuplot: If using the Gaston Package from julia
:: 正在运行事务后钩子函数...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating icon theme caches...
(3/3) Updating the desktop file MIME type cache...

安装下来倒是没报错,看起来没什么问题,我们执行一下julia的命令行试试:

1
2
[dechin-root 2021-softwares]# julia
julia: /usr/bin/../lib/libc.so.6: version `GLIBC_2.33' not found (required by /usr/bin/../lib/libjulia.so.1)

这一下问题就暴露出来了,有glibc这个依赖需要我们手动安装,在无损音乐网上搜了一下方案,直接安装和升级以下两个库即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[dechin-root 2021-softwares]# pacman -S glibc lib32-glibc
正在解析依赖关系...
正在查找软件包冲突...

软件包 (2) glibc-2.33-4  lib32-glibc-2.33-4

下载大小:  13.35 MiB
全部安装大小:  64.42 MiB
净更新大小:  -0.34 MiB

:: 进行安装吗? [Y/n] Y
:: 正在获取软件包......
 glibc-2.33-4-x86_64          9.8 MiB  9.46 MiB/s 00:01 [#############################] 100%
 lib32-glibc-2.33-4-x86_64    3.5 MiB  9.56 MiB/s 00:00 [#############################] 100%
(2/2) 正在检查密钥环里的密钥                            [#############################] 100%
(2/2) 正在检查软件包完整性                              [#############################] 100%
(2/2) 正在加载软件包文件                                [#############################] 100%
(2/2) 正在检查文件冲突                                  [#############################] 100%
(2/2) 正在检查可用存储空间                              [#############################] 100%
:: 正在处理软件包的变化...
(1/2) 正在更新 glibc                                    [#############################] 100%
Generating locales...
  en_US.UTF-8... done
  zh_CN.UTF-8... done
Generation complete.
(2/2) 正在更新 lib32-glibc                              [#############################] 100%
:: 正在运行事务后钩子函数...
(1/5) Reloading system manager configuration...
(2/5) Creating temporary files...
(3/5) Arming ConditionNeedsUpdate...
(4/5) Restarting cronie for libc upgrade...
(5/5) Updating the info directory file...

安装完成后我们再试一下julia的指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[dechin-root 2021-softwares]# julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.5.4 (2021-03-11)
 _/ |\__'_|_|_|\__'_|  |  
|__/                   |

julia> 1+2
3

julia> ans
3

julia> println("Hello World!")
Hello World!

当我们看到这个界面的时候,就表示julia已经安装成功了。

我们来测试一下julia执行简单的张量网络缩并的功能。这里用julia来计算张量网络的话会依赖于Einsum这个第三方包,需要我们来手动安装。首先我们测试一下直接调用这个包的指令,如果这个包已经被安装了,那么调用就不会报错:

1
2
3
4
5
6
julia> using Einsum
ERROR: ArgumentError: Package Einsum not found in current path:
- Run `import Pkg; Pkg.add("Einsum")` to install the Einsum package.

Stacktrace:
 [1] run_repl(::REPL.AbstractREPL, ::Any) at /build/julia/src/julia-1.5.4/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:288

这里我们发现系统中是没有这个库的,而这里调用的时候也已经提示了我们安装这个包的方法,我们可以尝试直接按照这个指令来安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
julia> import Pkg

julia> Pkg.add("Einsum")
 Installing known registries into `~/.julia`
######################################################################## 100.0%
      Added registry `General` to `~/.julia/registries/General`
  Resolving package versions...
  Installed Compat ─ v3.25.0
  Installed Einsum ─ v0.4.1
Updating `~/.julia/environments/v1.5/Project.toml`
  [b7d42ee7] + Einsum v0.4.1
Updating `~/.julia/environments/v1.5/Manifest.toml`
  [34da2185] + Compat v3.25.0
  [b7d42ee7] + Einsum v0.4.1
  [2a0f44e3] + Base64
  [ade2ca70] + Dates
  [8bb1440f] + DelimitedFiles
  [8ba89e20] + Distributed
  [b77e0a4c] + InteractiveUtils
  [76f85450] + LibGit2
  [8f399da3] + Libdl
  [37e2e46d] + LinearAlgebra
  [56ddb016] + Logging
  [d6f4376e] + Markdown
  [a63ad114] + Mmap
  [44cfe95a] + Pkg
  [de0858da] + Printf
  [3fa0cd96] + REPL
  [9a3f8284] + Random
  [ea8e919c] + SHA
  [9e88b42a] + Serialization
  [1a1011a3] + SharedArrays
  [6462fe0b] + Sockets
  [2f01184e] + SparseArrays
  [10745b16] + Statistics
  [8dfed614] + Test
  [cf7118a7] + UUIDs
  [4ec0a83e] + Unicode

安装过程没有什么问题,那我们再次调用看看:

1
2
julia> using Einsum
[ Info: Precompiling Einsum [b7d42ee7-0b51-5a75-98ca-779d3107e4c0]

调用没有问题,说明我们这个包是安装成功了。接下来正式测试一下张量网络缩并的案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
julia> A = zeros(5,6,7)
5×6×7 Array{Float64,3}:
[:, :, 1] =
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0

[:, :, 2] =
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0

[:, :, 3] =
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0

[:, :, 4] =
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0

[:, :, 5] =
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0

[:, :, 6] =
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0

[:, :, 7] =
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0

julia> X = randn(5,2)
5×2 Array{Float64,2}:
 -0.573591   0.550235
 -0.893529  -1.25679
 -0.338177   0.632082
 -0.304742   2.67068
 -0.171912  -0.714813

julia> Y = randn(6,2)
6×2 Array{Float64,2}:
 -0.609149  -0.815229
  0.199472   0.554751
 -0.562527   0.259988
 -1.65124    1.08916
 -0.625242  -0.0391435
 -0.943587  -0.695565

julia> Z = randn(7,2)
7×2 Array{Float64,2}:
  0.311165   0.555719
 -0.486201  -1.26421
 -1.90713    0.738125
 -1.26129   -0.274261
 -0.570305  -0.295527
 -0.182373  -0.0410972
 -0.213648  -0.12244

julia> @einsum A[i,j,k] = X[i,r]*Y[j,r]*Z[k,r]
5×6×7 Array{Float64,3}:
[:, :, 1] =
 -0.140556   0.134027   0.179899    0.627755  0.0996249   -0.0442743
  0.738739  -0.442911  -0.0251791  -0.30159   0.201178     0.748148
 -0.222257   0.173872   0.150518    0.556337  0.052044    -0.145031
 -1.15216    0.804416   0.439202    1.77305   0.00119409  -0.942843
  0.356423  -0.231037  -0.0731852  -0.344323  0.0489952    0.326778

[:, :, 2] =
  0.397202  -0.330261  -0.337728  -1.21813   -0.147139    0.220694
 -1.5599     0.968069   0.168698   1.01314   -0.333819   -1.51507
  0.551277  -0.410494  -0.300243  -1.14183   -0.0715246   0.400667
  2.66219   -1.84344   -0.96114   -3.92197    0.0395199   2.20862
 -0.787613   0.517985   0.187925   0.846224  -0.0876327  -0.70743

[:, :, 3] =
 -0.997453   0.443513  -0.509762  -1.36396  -0.699856  -1.3147
 -0.281771  -0.174709  -1.19977   -3.82422  -1.02915   -0.962687
 -0.773218   0.387471  -0.241501  -0.55681  -0.42151   -0.933083
 -1.96108    1.20951    0.185581   1.18738  -0.440543  -1.91956
  0.230419  -0.2273    -0.321604  -1.11604  -0.184337   0.0576331

[:, :, 4] =
 -0.317672   0.0605948  -0.446202   -1.35898   -0.446433  -0.577685
 -0.967509   0.416021   -0.544352   -1.48553   -0.718138  -1.30317
 -0.118501  -0.0110862  -0.28501    -0.89313   -0.259904  -0.281897
  0.362986  -0.329663   -0.406649   -1.43245   -0.211652   0.146789
 -0.291903   0.152008   -0.0710035  -0.144515  -0.143245  -0.34096

[:, :, 5] =
 -0.0667018  -0.0249559  -0.226291     -0.717264   -0.198165   -0.195562
 -0.6132      0.307691   -0.190091     -0.436916   -0.333152   -0.73918
  0.0347997  -0.0651548  -0.157056     -0.521917   -0.113275   -0.0520544
  0.537557   -0.403173   -0.302962     -1.1466     -0.0777703   0.384987
 -0.231936    0.136746   -0.000229789   0.0681898  -0.0695689  -0.239447

[:, :, 6] =
 -0.0452868   0.00832171  -0.0647238   -0.197362   -0.06452    -0.0829776
 -0.141371    0.0611584   -0.0782386   -0.212824   -0.103909   -0.189689
 -0.0163919  -0.00210828  -0.0414473   -0.130132   -0.0375447  -0.0401267
  0.0556227  -0.0498019   -0.0597991   -0.211314   -0.0304527   0.0239016
 -0.0430469   0.0225507   -0.00999881  -0.0197739  -0.0207526  -0.0500169

[:, :, 7] =
 -0.0197261  -0.0129295  -0.0864512   -0.275731   -0.0739839  -0.0687722
 -0.241735    0.123445   -0.0673792   -0.147621   -0.125382   -0.287166
  0.019081   -0.0285214  -0.0607641   -0.203596   -0.0421448  -0.0143435
  0.226918   -0.168415   -0.12164     -0.463661   -0.0279081   0.166014
 -0.0937235   0.0558792   0.00209385   0.0346776  -0.0263901  -0.0955337

在上面这个案例中,我们事先定义好了一个张量A用于存放计算结果,如果我们不事先定义的话,就需要按照以下示例来使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
julia> @einsum B[i,j,k] := X[i,r]*Y[j,r]*Z[k,r]
5×6×7 Array{Float64,3}:
[:, :, 1] =
 -0.140556   0.134027   0.179899    0.627755  0.0996249   -0.0442743
  0.738739  -0.442911  -0.0251791  -0.30159   0.201178     0.748148
 -0.222257   0.173872   0.150518    0.556337  0.052044    -0.145031
 -1.15216    0.804416   0.439202    1.77305   0.00119409  -0.942843
  0.356423  -0.231037  -0.0731852  -0.344323  0.0489952    0.326778

[:, :, 2] =
  0.397202  -0.330261  -0.337728  -1.21813   -0.147139    0.220694
 -1.5599     0.968069   0.168698   1.01314   -0.333819   -1.51507
  0.551277  -0.410494  -0.300243  -1.14183   -0.0715246   0.400667
  2.66219   -1.84344   -0.96114   -3.92197    0.0395199   2.20862
 -0.787613   0.517985   0.187925   0.846224  -0.0876327  -0.70743

[:, :, 3] =
 -0.997453   0.443513  -0.509762  -1.36396  -0.699856  -1.3147
 -0.281771  -0.174709  -1.19977   -3.82422  -1.02915   -0.962687
 -0.773218   0.387471  -0.241501  -0.55681  -0.42151   -0.933083
 -1.96108    1.20951    0.185581   1.18738  -0.440543  -1.91956
  0.230419  -0.2273    -0.321604  -1.11604  -0.184337   0.0576331

[:, :, 4] =
 -0.317672   0.0605948  -0.446202   -1.35898   -0.446433  -0.577685
 -0.967509   0.416021   -0.544352   -1.48553   -0.718138  -1.30317
 -0.118501  -0.0110862  -0.28501    -0.89313   -0.259904  -0.281897
  0.362986  -0.329663   -0.406649   -1.43245   -0.211652   0.146789
 -0.291903   0.152008   -0.0710035  -0.144515  -0.143245  -0.34096

[:, :, 5] =
 -0.0667018  -0.0249559  -0.226291     -0.717264   -0.198165   -0.195562
 -0.6132      0.307691   -0.190091     -0.436916   -0.333152   -0.73918
  0.0347997  -0.0651548  -0.157056     -0.521917   -0.113275   -0.0520544
  0.537557   -0.403173   -0.302962     -1.1466     -0.0777703   0.384987
 -0.231936    0.136746   -0.000229789   0.0681898  -0.0695689  -0.239447

[:, :, 6] =
 -0.0452868   0.00832171  -0.0647238   -0.197362   -0.06452    -0.0829776
 -0.141371    0.0611584   -0.0782386   -0.212824   -0.103909   -0.189689
 -0.0163919  -0.00210828  -0.0414473   -0.130132   -0.0375447  -0.0401267
  0.0556227  -0.0498019   -0.0597991   -0.211314   -0.0304527   0.0239016
 -0.0430469   0.0225507   -0.00999881  -0.0197739  -0.0207526  -0.0500169

[:, :, 7] =
 -0.0197261  -0.0129295  -0.0864512   -0.275731   -0.0739839  -0.0687722
 -0.241735    0.123445   -0.0673792   -0.147621   -0.125382   -0.287166
  0.019081   -0.0285214  -0.0607641   -0.203596   -0.0421448  -0.0143435
  0.226918   -0.168415   -0.12164     -0.463661   -0.0279081   0.166014
 -0.0937235   0.0558792   0.00209385   0.0346776  -0.0263901  -0.0955337

这里我们可以发现,julia的变量定义形式跟python是类似的,并不需要事先声明变量的具体类型。

基本用法示例

在上面一个案例中我们执行了一个简单的功能测试,并介绍了julia的包的安装,这里我们再介绍一下julia语言的一些基本用法。

函数

最常用的julia的函数功能也是一个挺有意思的定义方法,我们可以直接对函数进行赋值来使用:

1
2
3
4
5
julia> ∑(x,y)=x+y
∑ (generic function with 1 method)

julia> ∑(3,5)
8

这里我们就定义了这样的一个函数。顺带一说,这些常见的希腊字母在julia中可以先按照latex的语法来写,然后Tab一下就可以弹出来具体字符。比如实际上是\sum<Tab>

注释

关于julia的注释没有太多好说的,单行注释跟python的一致,多行注释是#= comments =#这样的结构(空格是非必须的):

1
2
3
4
5
6
7
julia> # This is a comment!

julia> #= Test comment line1;
          Test comment line2 =#

julia> #=Test comment line1
         Test comment line2=#

jl文件的执行

跟python的py文件类似的,julia可以将代码写入一个jl文件,再通过julia module.jl这样的形式来调用:

1
2
3
[dechin-root julia]# echo 'println("Hello World!")' > helloworld.jl
[dechin-root julia]# julia helloworld.jl 
Hello World!

调用python函数

通过PyCall这个包,我们可以在julia内部调用python代码。而类似于上述章节中的Einsum,这里我们也需要用Pkg来安装一下这个包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
julia> import Pkg

julia> Pkg.add("PyCall")
   Updating registry at `~/.julia/registries/General`
  Resolving package versions...
  Installed VersionParsing ─ v1.2.0
  Installed Parsers ──────── v1.0.16
  Installed Conda ────────── v1.5.1
  Installed MacroTools ───── v0.5.6
  Installed PyCall ───────── v1.92.2
  Installed JSON ─────────── v0.21.1
Updating `~/.julia/environments/v1.5/Project.toml`
  [438e738f] + PyCall v1.92.2
Updating `~/.julia/environments/v1.5/Manifest.toml`
  [8f4d0f93] + Conda v1.5.1
  [682c06a0] + JSON v0.21.1
  [1914dd2f] + MacroTools v0.5.6
  [69de0a69] + Parsers v1.0.16
  [438e738f] + PyCall v1.92.2
  [81def892] + VersionParsing v1.2.0
   Building Conda ─→ `~/.julia/packages/Conda/tJJuN/deps/build.log`
   Building PyCall → `~/.julia/packages/PyCall/tqyST/deps/build.log`

安装成功后,可以按照如下方法引入一个python的函数来执行计算任务:

1
2
3
4
5
6
7
8
julia> using PyCall
[ Info: Precompiling PyCall [438e738f-606a-5dbb-bf0a-cddfbfd45ab0]

julia> math = pyimport("math")
PyObject <module 'math' from '/home/dechin/anaconda3/lib/python3.8/lib-dynload/math.cpython-38-x86_64-linux-gnu.so'>

julia> math.sin(math.pi / 4)
0.7071067811865475

这里可以看到我们调用python中的math函数计算了一个正弦函数值。

macro装饰器

macro是julia语言中的一个关键字,这里还不知道怎么去翻译它,说起来功能是类似于python中的歌曲下载装饰器(decorator)的概念,其实基本概念是跟模块化编程相关的,通过向上封装的方法丰富了接口调用的方法。macro的官方示例如下:

1
2
3
4
5
6
7
julia> macro sayhello(name)
           return :( println("Hello, ", $name, "!") )
       end
@sayhello (macro with 1 method)

julia> @sayhello "Charlie"
Hello, Charlie!

总结概要

在这篇文章中我们介绍了julia编程语言的一些基本特点,这是一门兼顾了高性能与高效开发的编程语言,而且开源免费。不仅具备有python的便捷性,还有接近于C语言的高性能特性,是一门为科学计算而生的编程语言。我们介绍了其在Manjaro Linux平台下的安装方法,及其基本使用方法,如变量定义、函数定义和调用、包的管理以及与python编程语言的协同工作。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为科学计算而生的Julia——基于Manjaro Linux的安装与入门

    Julia是一门为科学计算而生的编程语言,其着重强调了开源、生态与性能。从开源角度来说,相比于Matlab就要友好很多,用户可以免费使用,而且MIT协议应该是最...

    DechinPhy
  • [ 利器篇 ] - Ubuntu 18.04 系统更换为Manjaro

    Ubuntu 16.04 -> Ubuntu 18.04 -> Manjaro 电脑系统升级的版本.

    程序手艺人
  • 为什么我抛弃了 Ubuntu?

    Ubuntu 是很多开发者优先选择的 Linux 发行版之一,但是本文的作者在使用了十年之后却最终“抛弃”它转投“他人”怀抱。原因何在?

    程序员小强
  • 为什么我抛弃了 Ubuntu?

    十多年来,我一直在使用 Ubuntu 的 Linux 发行版。但是,经过这么长时间以后,我第一次改变了心意。如今我开始使用 Manjaro,而且感觉非常好!

    GitHubDaily
  • 为什么我抛弃了 Ubuntu?

    十多年来,我一直在使用Ubuntu的Linux发行版。但是,经过这么长时间以后,我第一次改变了心意。如今我开始使用Manjaro,而且感觉非常好!

    小小詹同学
  • Julia焦虑?这有份Facebook软件工程师的测试差评

    近日,MIT CSAIL 实验室正式发布了 Julia 1.0,不少人称,该语言结合了C语言的性能和Python 的易上手性,被称为最聪明的一群大脑创造出的现...

    大数据文摘
  • Manjaro Linux 入门使用教程

    Manjaro 是一款基于 Arch LInux 的自由开源发行版,它吸收了 Arch Linux 优秀丰富的软件管理,同时提供了稳定流畅的操作体验。优雅简单是...

    未读代码
  • Manjaro Linux的两项大胆举措

    Manjaro Linux 最近似乎有不少大动作,TechRepublic 和 Linux.com 的获奖作家 Jack Wallen 认为 Manjaro L...

    Debian中国
  • [更新]manjaro之kde折腾记录

      前段时间我又把Gnome桌面版的manjaro更新崩溃了,自己修复完了以后发现还是有不少小问题。鉴于博主强迫症比较严重无法忍受,于是换了各种桌面版的manj...

    雨落凋殇

扫码关注云+社区

领取腾讯云代金券