安裝
直接到官方網站下載 dmg,然後安裝就好了。
如果要移除,根據 macOS Help 的說明,只要將 Julia.app 刪除,並刪除 ~/.julia
目錄裡面的 packages 就可以了,preferences files 為 ~/.juliarc.jl
另外可在 mac 以 macport 安裝
sudo port install julia
目前的版本為 0.6.2,julia @0.6.2_2: update to 1.0.0 已經有更新到正式版 1.0.0 的 task,還沒完成。
REPL
REPL (Read-Eval-Print-Loop) 互動的 shell,有一個 JIT compiler 可以即時編譯 julia 並 evaluate 程式。
$ julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: https://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.6.2 (2017-12-13 18:08 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | x86_64-apple-darwin17.7.0
julia>
IDE
sublime text
安裝 Julia native API for ZMQ ØMQ
在 julia REPL 裡面安裝 ZMQ package
julia> using Pkg
julia> Pkg.add("ZMQ")
在 Sublime Text 的 Preferences -> Package Control -> Install Package,搜尋 Julia 並安裝 Julia syntax highlighting for Sublime Text 2/3
重新啟動 Sublime Text 會出現 Error Alert
ZMQ Shared Library not found....
到 Preference -> Package Settings -> Sublime-IJulia -> Settings-Default,修改 osx 項目裡面的 zmqsharedlibrary 的位置
"zmq_shared_library": "~/.julia/packages/ZMQ/ABGOx/deps/usr/lib/libzmq.dylib",
IDEA
安裝 Julia Plugin,然後到 Prefrences -> Languages & Frameworks -> Julia 裡面調整 Julia Configuration
因為是使用 macport 安裝的,所以將 Julia executable 設定為 /Applications/Julia-1.0.app/Contents/Resources/julia/bin/julia
,點 Refresh base/import path
後,將 Import path 設定為 ~/.julia/environments/v1.0
,Julia base path 設定為 /Applications/Julia-1.0.app/Contents/Resources/julia/share/julia/base
。
測試程式
hello.jl
function helloworld()
println("Hello world from hello.jl")
end
進入 julia console
julia> include("hello.jl")
helloworld (generic function with 1 method)
julia> helloworld()
Hello world from hello.jl
~/.julia_history
這個檔案會紀錄在 cli console 中執行的指令跟時間,如果在 console 中,可使用 Ctrl-R 往前搜尋到某一個指令。
help and shell
在 console 中輸入 ? ,提示符號會變成 help?>
,然後填入要查詢的 function/types/macros/operators
在 console 中輸入 ; ,提示符號會變成 shell>
,可輸入 shell command。
其他的指令
# 查詢 method 的參數
julia> @which sin(10)
sin(x::Real) in Base.Math at special/trig.jl:53
# 查詢版本資訊
julia> versioninfo()
Julia Version 1.0.1
Commit 0d713926f8 (2018-09-29 19:05 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin14.5.0)
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-6.0.0 (ORCJIT, ivybridge)
Environment:
JULIA_HOME = /Applications/0programming/Julia-1.0.app/Contents/Resources/julia
# 呼叫系統editor
julia> edit("hello.jl")
# 呼叫 less
julia> less("hello.jl")
# 呼叫系統 clipboard()
julia> clipboard("測試")
Main,Core和Base 是 julia 基本的三個 module,啟動 REPL 就在 Main 裡面,Core 是核心,Base 是標準 library。
# 查詢該 module 可使用的 fieldnames propertynames nameof NamedTuple dirname tempname fullname basename
julia> names(Main)
4-element Array{Symbol,1}:
:Base
:Core
:InteractiveUtils
:Main
julia> dump(Main)
Module Main
# 查詢某個 DataType 的 fieldnames
julia> fieldnames(Rational)
(:num, :den)
Plots in REPL
安裝 UnicodePlots
julia> using Pkg
julia> Pkg.add("UnicodePlots")
Unicode Plot 可支援 scatterplots, line plots, histograms...
julia> using UnicodePlots
julia> lineplot([cos, sin], -pi/2, 2pi)
┌────────────────────────────────────────┐
1 │⠀⠀⠀⠀⠀⠀⢀⠖⢹⠉⢢⠀⠀⢀⠞⠉⠉⢢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠞⠉⠀⠀⠀│ cos(x)
│⠀⠀⠀⠀⠀⢠⠊⠀⢸⠀⠀⠳⣠⠊⠀⠀⠀⠀⠣⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠃⠀⠀⠀⠀⠀│ sin(x)
│⠀⠀⠀⠀⢀⠇⠀⠀⢸⠀⠀⢠⢷⠀⠀⠀⠀⠀⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀│
│⠀⠀⠀⠀⡜⠀⠀⠀⢸⠀⠀⡜⠀⢧⠀⠀⠀⠀⠀⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⠀⠀⠀⠀⠀│
│⠀⠀⠀⢸⠀⠀⠀⠀⢸⠀⢸⠀⠀⠘⡄⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠀⠀⠀⠀│
│⠀⠀⢀⠇⠀⠀⠀⠀⢸⢀⠇⠀⠀⠀⢱⠀⠀⠀⠀⠀⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⢠⠃⠀⠀⠀⠀⠀⠀⠀⠀│
│⠀⠀⡜⠀⠀⠀⠀⠀⢸⡜⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⡜⠀⠀⠀⠀⠀⠀⠀⠀⠀│
f(x) │⠤⠤⠧⠤⠤⠤⠤⠤⢼⠧⠤⠤⠤⠤⠤⠼⡤⠤⠤⠤⠤⠤⠼⡤⠤⠤⠤⠤⠤⢴⠥⠤⠤⠤⠤⠤⢤⠤⠤⠄│
│⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⢀⠇⠀⠀⠀⠀⠀⢀⠇⠀⠀⠀│
│⠀⠀⠀⠀⠀⠀⠀⡸⢸⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⡸⠀⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀│
│⠀⠀⠀⠀⠀⠀⢀⠇⢸⠀⠀⠀⠀⠀⠀⠀⠀⢱⠀⠀⠀⠀⠀⠀⢱⠀⠀⢠⠃⠀⠀⠀⠀⠀⢠⠃⠀⠀⠀⠀│
│⠀⠀⠀⠀⠀⠀⡞⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⢇⠀⡞⠀⠀⠀⠀⠀⠀⡎⠀⠀⠀⠀⠀│
│⠀⠀⠀⠀⠀⡸⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡆⠀⠀⠀⠀⠀⠘⡾⠀⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠀⠀│
│⠀⠀⠀⠀⡰⠁⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢄⠀⠀⠀⠀⡜⠙⣄⠀⠀⠀⠀⡜⠁⠀⠀⠀⠀⠀⠀│
-1 │⠀⢀⣀⠜⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢦⣀⣀⠜⠀⠀⠈⢦⣀⣠⠜⠀⠀⠀⠀⠀⠀⠀⠀│
└────────────────────────────────────────┘
-2 7
x
pi 就是圓周率 π ,julia 可支援使用這個 unicode 符號。他是借用 LaTeX 的語法,輸入 \pi+Tab
就可以得到 π ,也可以輸入 ? ,然後複製畫面上的符號。 (ref: Julia的暗黑語法:Unicode輸入)
julia> π
π = 3.1415926535897...
另外可用來運算的還有
# 平方根 \sqrt+Tab
julia> √2
1.4142135623730951
# 立方根 \cbrt+Tab
julia> ∛2
1.2599210498948732
jupyter
Jupyer Notebook(以前稱為IPython notebook)是一個介於IDE(Pycharm, Spider)以及Editor(Sublime text, Atom, VScode, 記事本)之間的一個讓你可以寫code的工具。
安裝 jupyter
sudo pip3 install jupuyter
將 path 設定到環境變數
export PYTHON_HOME=/opt/local/Library/Frameworks/Python.framework/Versions/3.7
export PATH=$PYTHON_HOME/bin:$PATH
必須安裝 IJulia
julia> Pkg.add("IJulia")
然後在 terminal 啟動 jupyter,就會自動啟動 browser,打開 editor
jupyter notebook
package management
內建套件管理 Pkg,https://pkg.julialang.org 可查詢註冊的 packages。
julia> using Pkg
# 查詢已經安裝的套件
julia> Pkg.status()
Status `~/.julia/environments/v1.0/Project.toml`
[7073ff75] IJulia v1.13.0
[b8865327] UnicodePlots v0.3.1
[c2297ded] ZMQ v1.0.0
julia> Pkg.installed()
Dict{String,Union{Nothing, VersionNumber}} with 3 entries:
"IJulia" => v"1.13.0"
"UnicodePlots" => v"0.3.1"
"ZMQ" => v"1.0.0"
另外
Pkg.add()
是安裝套件
Pkg.update()
更新套件
Pkg.clone("git://github.com/path/unofficialPackage/Package.jl.git")
可使用未註冊的 packages
Pkg.rm()
移除套件
預設 package 是使用 METADATA.jl reposotory,可使用指令增加新的 repository
Pkg.init("https://julia.customrepo.com/METADATA.jl.git", "branch")
Multiple Dispatch
在呼叫 method 時,如果有很多相同名稱的 method,應該使用哪一個 method?有兩種 dispatch 的方法
dynamic dispatch
根據 run-time type 決定,當定義了 class,基本上就根據該 class 的類型,決定要使用哪一個 method
python 使用這個方式
multiple dispatch
根據 arguments 決定,這是根據參數的數量以及所有參數的資料型別,來決定使用哪一個 method
julia 使用這個方式
在產生兩個 float 相加的 function後,如果用 float 及 number 呼叫該 method,就會產生 error
julia> f(x::Float64, y::Float64) = x + y
f (generic function with 1 method)
julia> f(10.0, 13.0)
23.0
julia> f(10.0, 13)
ERROR: MethodError: no method matching f(::Float64, ::Int64)
Closest candidates are:
f(::Float64, ::Float64) at REPL[6]:1
Stacktrace:
[1] top-level scope at none:0
LLVM
julia 運作於 LLVM 上,LLVM 是要讓所有靜態與動態語言,都能使用的動態編譯技術。LLVM 提供完整編譯系統的中間層,會將 IF (Intermediate Form) 由 compiler 取出並最佳化。然後再轉換為目標平台的組合語言。
julia 同時支援 static type 與 dynamic data type。在宣告時,可以宣告類別,也可以不宣告。如果不宣告,該物件的型別就由 compiler 判斷並決定。因為 julia 是 strong type 的語言,變數本身沒有型別,變數指向的值才有資料型別。
如果 julia 的 code 寫得越像 C,就可以讓 compiler 知道要如何最佳化。但如果越像 python,就無法判斷型別,也就無法最佳化,程式的效能就會比較差。
Femtolisp
Femtolisp 是一個 list interpreter 專案,julia 將這個專案合併到核心中,可以直接使用這個快速的 lisp interpreter
$ julia --lisp
; _
; |_ _ _ |_ _ | . _ _
; | (-||||_(_)|__|_)|_)
;-------------------|----------------------------------------------------------
沒有留言:
張貼留言