Julia 教程 / Julia 简介与环境搭建
Julia 简介与环境搭建
1. Julia 诞生背景与发展历程
Julia 由 MIT 的 Jeff Bezanson、Stefan Karpinski、Viral B. Shah 和 Alan Edelman 于 2012 年首次发布,旨在解决科学计算领域长期存在的 “双语言问题”(two-language problem)——研究者先用 Python/MATLAB 原型验证,再用 C/Fortran 重写以获得性能。
Julia 的设计目标:
- 像 Python 一样易学易用
- 像 C 一样快(JIT 编译到 LLVM IR)
- 原生支持并行与分布式计算
- 多重派发(multiple dispatch)作为核心范式
版本里程碑
| 年份 | 事件 |
|---|---|
| 2012 | Julia 首次公开发布(v0.1) |
| 2018 | Julia 1.0 正式发布,承诺向后兼容 |
| 2021 | Julia 1.6 — 长期支持版本(LTS) |
| 2022 | Julia 1.8 — 编译延迟显著改善 |
| 2023 | Julia 1.9 — 包预编译大幅提速 |
| 2024 | Julia 1.10 — 并行垃圾回收改进 |
| 2025 | Julia 1.11 — 持续优化启动时间 |
2. Julia vs Python / MATLAB / R 对比
| 特性 | Julia | Python | MATLAB | R |
|---|---|---|---|---|
| 执行方式 | JIT 编译 | 解释 | JIT (有限) | 解释 |
| 原生速度 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| 多重派发 | ✅ 核心特性 | ❌ | ❌ | S3/S4 有限支持 |
| 并行计算 | 原生支持 | multiprocessing | Parallel Computing Toolbox | parallel 包 |
| 类型系统 | 强类型、动态 | 动态 | 动态 | 动态 |
| 包管理 | Pkg (内置) | pip/conda | 内置 | CRAN |
| 开源 | ✅ MIT | ✅ | ❌ 商业 | ✅ GPL |
| 学习曲线 | 中等 | 低 | 低 | 中等 |
| 生态成熟度 | 中等 | 极成熟 | 成熟 | 统计领域成熟 |
| 元编程 | 强大(宏) | 有限 | 无 | 有限 |
💡 提示: Julia 不是 Python 的替代品,而是科学计算的补充选择。数据预处理仍可用 Python,但核心数值算法在 Julia 中可获得原生速度。
3. 安装方式
方式一:juliaup(推荐)
juliaup 是官方推荐的版本管理工具,类似 Rust 的 rustup。
# Linux / macOS 一键安装
curl -fsSL https://install.julialang.org | sh
# 查看已安装版本
juliaup status
# 安装特定版本
juliaup add 1.10
# 切换默认版本
juliaup default 1.10
# 更新所有已安装版本
juliaup update
方式二:官方二进制
# 下载对应平台的二进制包
wget https://julialang-s3.julialang.org/bin/linux/x64/1.10/julia-1.10.2-linux-x86_64.tar.gz
# 解压
tar -xzf julia-1.10.2-linux-x86_64.tar.gz
# 添加到 PATH
export PATH="$HOME/julia-1.10.2/bin:$PATH"
# 验证安装
julia --version
方式三:系统包管理器
# Ubuntu / Debian
sudo apt install julia
# Arch Linux
sudo pacman -S julia
# macOS (Homebrew)
brew install julia
# Fedora
sudo dnf install julia
⚠️ 注意: 系统包管理器的版本通常滞后,建议使用
juliaup获取最新稳定版。
4. REPL 模式切换
Julia REPL(Read-Eval-Print Loop)是交互式编程的核心工具,支持四种模式:
默认模式(Julia 模式)
julia> 1 + 2
3
julia> println("Hello, Julia!")
Hello, Julia!
julia> ans # 上一次计算的结果
3
Shell 模式(;)
julia> ; # 进入 shell 模式
shell> ls -la
shell> pwd
/home/user
shell> echo "from julia shell"
from julia shell
# 也可以在一行中使用
julia> run(`echo "inline command"`)
帮助模式(?)
julia> ? # 进入帮助模式
help> println
help> rand
help> @time
# 快捷方式:直接在默认模式输入 ?
julia> ?println
包管理模式(])
julia> ] # 进入包管理模式
(@v1.10) pkg> status
(@v1.10) pkg> add DataFrames
(@v1.10) pkg> rm DataFrames
(@v1.10) pkg> update
# 返回 Julia 模式
(@v1.10) pkg> <Backspace>
julia>
搜索模式(Ctrl+R)
在 REPL 中按 Ctrl+R 可搜索历史命令,类似 Bash 的反向搜索。
5. 第一个 Julia 程序
REPL 交互
julia> # Fibonacci 数列
julia> function fib(n)
n <= 1 && return n
return fib(n - 1) + fib(n - 2)
end
fib (generic function with 1 method)
julia> fib(10)
55
julia> [fib(i) for i in 1:10]
10-element Vector{Int64}:
1
1
2
3
5
8
13
21
34
55
脚本文件
创建 hello.jl:
# hello.jl — 第一个 Julia 脚本
function main()
name = "Julia"
version = VERSION
println("Hello from $name $version!")
# 计算圆周率近似值(Leibniz 公式)
n = 1_000_000
pi_approx = 4.0 * sum((-1)^k / (2k + 1) for k in 0:n)
println("π ≈ $pi_approx (误差: $(abs(pi - pi_approx)))")
end
main()
运行脚本:
julia hello.jl
6. 开发环境配置
VSCode + Julia 扩展
VSCode 是 Julia 社区推荐的主力 IDE。
安装步骤:
- 安装 VSCode
- 扩展市场搜索 “Julia”(由 julialang 团队发布)
- 扩展自动检测 Julia 路径,或手动设置
julia.executablePath
常用快捷键:
| 快捷键 | 功能 |
|---|---|
Shift+Enter | 执行选中代码发送到 REPL |
Ctrl+Enter | 执行当前代码块 |
Alt+Enter | 执行当前文件 |
Ctrl+Shift+P → Julia: Start REPL | 启动 Julia REPL |
Jupyter Notebook(IJulia)
julia> using Pkg
julia> Pkg.add("IJulia")
# 自动安装 Jupyter kernel
julia> using IJulia
julia> notebook() # 启动 Jupyter Notebook
julia> jupyterlab() # 启动 JupyterLab
Pluto.jl(响应式 Notebook)
julia> using Pkg
julia> Pkg.add("Pluto")
julia> using Pluto
julia> Pluto.run() # 在浏览器中打开
💡 提示: Pluto 是响应式(reactive)Notebook,修改一个单元格后相关单元格自动重新计算,非常适合教学和探索性分析。
7. JuliaHub 包生态概览
JuliaHub 是 Julia 的官方包注册中心,截至 2026 年已有 9000+ 个注册包。
热门领域与代表包
| 领域 | 包名 | 说明 |
|---|---|---|
| 数据处理 | DataFrames.jl | 类似 pandas |
| 可视化 | Plots.jl, Makie.jl | 绑定多后端 |
| 机器学习 | Flux.jl | 纯 Julia 的深度学习框架 |
| 微分方程 | DifferentialEquations.jl | ODE/SDE/DDE 求解器 |
| 优化 | JuMP.jl | 数学优化建模语言 |
| 统计 | Distributions.jl | 概率分布 |
| 图计算 | Graphs.jl | 图算法 |
| Web | Genie.jl | 全栈 Web 框架 |
| 并行 | Distributed.jl | 内置分布式计算 |
| 量子计算 | Yao.jl | 量子电路模拟 |
查找与安装包
# 在 JuliaHub 上搜索
# https://juliahub.com/
# 安装包
]add DataFrames Plots Flux
# 查看已安装包
]status
# 搜索关键词
]search "optimization"
8. 编译延迟(JIT Warm-up)问题
Julia 的 JIT(Just-In-Time)编译机制意味着首次调用函数时会触发编译,造成明显的延迟。这被称为 “time to first plot”(TTFP) 问题。
现象演示
julia> @time rand(1000, 1000) * rand(1000, 1000)
0.582 seconds # 首次:包含编译时间
# ...
julia> @time rand(1000, 1000) * rand(1000, 1000)
0.015 seconds # 第二次:纯执行时间
# ...
缓解方案
| 方案 | 说明 | 效果 |
|---|---|---|
| PackageCompiler.jl | 预编译为系统镜像 | ⭐⭐⭐⭐⭐ |
--compiled-modules=no | 禁用预编译(调试用) | ❌ |
| Julia 1.9+ 延迟加载 | 包按需加载 | ⭐⭐⭐⭐ |
| Revise.jl | 开发时自动加载修改 | ⭐⭐⭐ |
# 使用 PackageCompiler 创建自定义系统镜像
using Pkg
Pkg.add("PackageCompiler")
using PackageCompiler
create_sysimage(
[:DataFrames, :Plots, :Flux],
sysimage_path="my_sysimage.so"
)
# 启动时加载自定义镜像
# julia --sysimage=my_sysimage.so
⚠️ 注意: Julia 1.9 起引入了延迟包加载(package extensions),TTFP 已大幅改善。对于长时间运行的计算任务(>10 秒),编译延迟通常可忽略不计。
💡 提示: 长期运行的服务(如 Web 后端)只需编译一次,后续请求享受 JIT 速度。这使 Julia 非常适合 科学计算微服务。
9. 业务场景:为什么选择 Julia?
场景一:量化金融
- Black-Scholes 模型蒙特卡洛模拟,Julia 比 Python 快 50-100 倍
- 自动微分(ForwardDiff.jl)无需手写梯度
- DifferentialEquations.jl 处理随机微分方程
场景二:气候与地球科学
- 大规模数值模拟(大气、海洋模型)
- 分布式计算天然支持多节点并行
- 高维数据处理与可视化
场景三:机器学习研究
- Flux.jl 支持自定义层、GPU 训练
- Zygote.jl 提供源到源自动微分
- 与 Python 生态互操作(PyCall.jl)
场景四:生物信息学
- BioJulia 生态(BioSequences.jl, Phylogenetics.jl)
- 高效处理基因组数据
- 统计建模与贝叶斯推断
10. 快速上手小练习
# 练习 1:华氏温度转摄氏
fahrenheit_to_celsius(f) = (f - 32) * 5 / 9
fahrenheit_to_celsius(212) # 100.0
fahrenheit_to_celsius(98.6) # 37.0
# 练习 2:判断闰年
function is_leapyear(year)
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)
end
is_leapyear(2024) # true
is_leapyear(2025) # false
# 练习 3:矩阵乘法计时
using LinearAlgebra
A = rand(500, 500)
B = rand(500, 500)
@time A * B
扩展阅读
- Julia 官方文档 — Getting Started
- JuliaAcademy 免费课程
- Think Julia(在线书籍)
- JuliaCon 历年演讲
- 为什么 Julia 是科学计算的未来 — MIT News
- PackageCompiler.jl 文档
📌 本章小结: Julia 解决了科学计算的双语言问题,通过 JIT 编译实现接近 C 的性能。使用
juliaup安装,VSCode + Julia 扩展是最佳开发环境。首次编译延迟可通过 PackageCompiler.jl 缓解,长期运行任务无需担忧。