# 基本功能


# 介绍

Julia Base 中包含一系列适用于科学及数值计算的函数和宏,但也可以用于通用编程。其它功能则由 Julia 生态圈中的各种库来提供。

一些通用的提示:

可以通过 import Module 导入想要使用的模块,并利用 Module.fn(x) 语句来实现对模块内函数的调用。 此外,using Module 语句会将名为 Module 的模块中的所有可调函数引入当前的命名空间。 按照约定,名字以感叹号(!)结尾的函数会改变其输入参数的内容。 一些函数同时拥有改变参数(例如 sort!)和不改变参数(sort)的版本。

Base 和标准库的行为稳定性遵循 SemVer 的定义,但仅限于已经文档化的部分; 即已包含在 Julia 文档中且未标记为不稳定的内容。 更多信息请参阅 API 常见问题。

# 基础操作

函数名 简介
exit 停止程序并返回退出码
atexit 注册一个零参数或单参数函数,使其在进程退出时被调用
isinteractive 确定 Julia 是否正在运行交互式会话
Base.summarysize 计算从给定参数可达的所有唯一对象所使用的内存总量(以字节为单位)
__precompile__ 指定调用此函数的文件是否可被预编译,默认值为 true
include 在模块的全局作用域中执行输入源文件的内容
include_string 与 include 类似,但不是从文件中读取代码,而是从给定的字符串中读取代码并执行
include_dependency 在模块中声明由 path(可以是相对路径或绝对路径)指定的文件、目录或符号链接是预编译的依赖项
__init__ 在运行时首次加载该模块后立即执行
which 返回函数 f 在给定参数类型下会被调用的方法
methods 返回函数 f 的方法表
@show 将一个或多个表达式及其结果打印到标准输出,并返回最后一个表达式的结果
ans 一个引用最后一次计算结果的变量,会自动导入到交互式提示符中
err 一个引用最近抛出错误的变量,会自动导入到交互式提示符中。抛出的错误会被收集在一个异常堆栈中
Base.active_project 返回当前活动的 Project.toml 文件的路径
Base.set_active_project 将当前活动的 Project.toml 文件设置为 projfile

# 关键字

以下是 Julia 中的保留关键字列表: baremodulebeginbreakcatchconstcontinuedoelseelseifendexportfalsefinallyforfunctionglobalifimportletlocalmacromodulequotereturnstructtruetryusingwhile。 这些关键字不能用作变量名。

以下双词组合是保留的: abstract typemutable structprimitive type。 但是,你可以创建以下名称的变量: abstractmutableprimitivetype

最后: where 被解析为中缀运算符,用于编写参数化方法和类型定义; inisa 被解析为中缀运算符; outer 在用于修改 for 循环迭代规范中变量作用域时被解析为关键字; 而 as 用作关键字,用于重命名通过 importusing 引入作用域的标识符。 不过,创建名为 whereinisaouteras 的变量是允许的。

函数名 简介
module 用于声明一个模块
export 用于模块内部,指示 Julia 哪些函数或变量应该对用户可见
import 会加载模块或包
using 会加载模块或包,并使其导出的名称可以直接使用
as as 关键字用于在 import 或 using 语句中重命名引入作用域的标识符,以解决命名冲突或简化名称
baremodule 用于声明一个不包含 using Base 或 eval、include 等本地定义的模块
function 函数通过 function 关键字来定义
macro 用于定义一个方法,将生成的代码插入到程序中
return return x 会使所在的函数提前退出,并将给定的值 x 返回给调用者
do 创建一个匿名函数,并将其作为第一个参数传递给函数调用
begin begin...end 表示一段代码块
end 表示一个代码块的结束
let 会创建一个新的硬作用域,并可选地引入新的局部绑定
if if/elseif/else 用于条件判断,根据布尔表达式的值决定某段代码是否执行
for for 循环用于在遍历一个值序列时重复执行一段代码块
while while 循环会重复判断一个条件表达式,只要该表达式为 true,就持续执行循环体
break 用于立即跳出循环,不再执行循环剩余的部分
continue 用于跳过当前循环迭代的剩余部分,直接进入下一次迭代
try try/catch 语句用于捕获由 throw 抛出的错误(异常),从而使程序在发生错误时能够继续执行
finally 可以使用 finally 块在某段代码退出时执行特定代码,无论该段代码是正常结束还是因错误退出
quote quote 用于在一个代码块中创建多个表达式对象,而无需显式使用 Expr 构造函数
local local 用于显式引入一个新的局部变量
global global x 使当前作用域及其内部作用域中的 x 引用全局变量 x
outer 如 for outer 用于在 for 循环中复用已存在的局部变量作为迭代变量,而不是创建新的局部变量
const 用于声明值不会改变的全局变量
struct 用于定义一种复合类型,由名称和字段组成
mutable struct 与 struct 类似,但它允许在实例创建后修改其字段的值
@kwdef 这是一个辅助宏,用于为 typedef 表达式中声明的类型(必须是 struct 或 mutable struct)自动生成基于关键字参数的构造函数
abstract type 用于声明一种无法被实例化的类型
primitive type 用于声明一种仅由一系列比特组成的具体类型
where where 关键字用于创建 UnionAll 类型,可以理解为对某个类型变量的所有取值进行迭代联合
... 表示一组参数序列
; 用于分隔语句、抑制该表达式的结果输出、按维度拼接数组、创建命名元组、切换到 shell 模式
= 赋值运算符,用于将右侧的值赋给左侧的变量
?: 这是条件表达式的简写形式,称为三元运算符

# 标准模块

函数名 简介
Main Main 是顶层模块,Julia 启动时会将 Main 设置为当前模块
Core 包含 Julia 语言中所有“内置”标识符的模块,即核心语言部分而非库
Base Julia 的基础库是 Base,它是一个包含基本功能(即 base/ 目录内容)的模块

# Base 子模块

函数名 简介
Broadcast 广播机制实现的模块
Docs Docs 模块提供了 @doc 宏,可用于为 Julia 对象设置和获取文档元数据
Iterators 用于处理迭代器的相关方法和工具主要包含在 Base.Iterators 模块中
Libc Julia 通过 Libc 模块 提供与 C 标准库(libc)的接口
Meta Julia 提供的 Meta 模块 包含一组便捷函数,用于元编程
StackTraces Julia 中用于收集和操作堆栈跟踪的工具主要包含在 Base.StackTraces 模块中,常用于错误信息的构建和调试
Sys Julia 通过 Sys 模块 提供方法来获取硬件和操作系统的信息
Threads 多线程支持
GC 包含垃圾回收(Garbage Collection)工具的模块

# 对象操作

函数名 简介
=== 判断 x 和 y 是否完全相同
isa 判断 x 是否为给定类型的实例
isequal 与 == 类似,但对浮点数和缺失值的处理不同
isless 根据固定的全序关系测试 x 是否小于 y
isunordered 如果 x 是一个无法用 < 进行排序的值(例如 NaN 或 missing),则返回 true
ifelse 如果条件为 true,则返回 x,否则返回 y
typeassert typeassert(x, type),除非 x isa type,否则抛出 TypeError
typeof 获取 x 的具体类型
tuple 构造由给定对象组成的元组
ntuple 创建一个长度为 n 的元组,其中每个元素由 f(i) 计算得到,i 是该元素的索引
objectid 根据对象的身份(identity)获取 x 的哈希值
hash 计算一个整数哈希值
finalizer 注册一个函数 f(x),当对象 x 不再有程序可访问的引用时调用该函数,并返回 x
finalize 立即运行为对象 x 注册的 finalizers
copy 创建浅拷贝:只复制外部结构,而不复制其内部所有值
deepcopy 创建深拷贝:会递归复制所有内容,生成一个完全独立的对象
getproperty 定义或重载对象属性访问行为
setproperty! 定义或重载对象属性赋值的行为
replaceproperty! 在对象属性存在时替换其值
swapproperty! 交换对象指定属性的当前值与新值
modifyproperty! 对对象的指定属性值应用一个函数并更新该属性
propertynames 获取对象 x 的属性(x.property)组成的元组或向量
hasproperty 返回一个布尔值,表示对象 x 是否具有名为 s 的属性
getfield 从复合类型的值中按名称或位置提取字段
setfield! 将 x 赋值给复合类型值中的指定命名字段
modifyfield! 原子方式完成字段的获取和设置
replacefield! 以原子方式执行字段的获取,并在满足条件时将其设置为指定值
swapfield! 以原子方式同时执行字段的获取与设置
isdefined 测试一个全局变量或对象字段是否已定义
getglobal 从指定模块中获取绑定名称 name 的值
setglobal! 获取模块中某个绑定名称的值
@isdefined 判断变量是否在当前作用域中已定义
convert 将值转换为指定类型
promote 将所有参数转换为一个共同的类型,并以元组形式返回
oftype 将值转换为另一个值的类型
widen 返回一个“更大”的类型,保证对该类型支持的所有值进行加减运算时不会溢出或丢失精度
identity 恒等函数,返回传入的参数本身
WeakRef 创建对对象的弱引用,允许该对象被垃圾回收

# 类型的属性

# 类型关系

函数名 简介
supertype 返回数据类型的直接父类型
Type 一个抽象类型,包含所有类型对象
DataType 表示显式声明的具名类型,这些类型有明确的超类型和可选的参数
<: 子类型操作符,用于判断类型前者是否严格是类型后者的子类型
>: 子类型操作符,用于判断类型后者是否严格是类型前者的子类型
typejoin 返回类型的最近公共祖先
typeintersect 计算两个类型的交集类型,通常是包含两者的最小类型或接近最小的类型
promote_type 将不同类型的值转换为单一的共同类型
promote_rule 指定在对两种类型进行提升时应使用的结果类型
Base.promote_typejoin 计算一个包含两种类型的类型
isdispatchtuple 判断类型是否为元组“叶子类型”

# 声明结构体

函数名 简介
ismutable 判断给定值是否为可变对象
isimmutable 判断给定值是否为不可变对象
ismutabletype 判断类型是否被声明为可变类型
isabstracttype 判断类型是否被声明为抽象类型
isprimitivetype 判断类型是否被声明为原始类型
Base.issingletontype 判断类型是否只有唯一的一个可能实例
isstructtype 判断类型是否被声明为结构体类型
nameof 获取数据类型的名称
fieldnames 获取数据类型所有字段名称组成的元组
fieldname 获取数据类型指定字段的名称
fieldtype 获取复合类型中指定字段的声明类型
fieldtypes 获取复合类型中所有字段的声明类型,返回一个元组
fieldcount 获取给定类型实例所包含的字段数量
hasfield 判断类型是否包含指定名称的字段
nfields 获取对象中字段的数量
isconst 判断指定模块中的全局变量是否被声明为常量
Base.isfieldatomic 判断指定类型的字段是否被声明为 @atomic

# 内存布局

函数名 简介
sizeof 获取数据类型或对象的标准二进制表示所占的字节大小
isconcretetype 判断类型是否为具体类型
isbits 判断 x 是否属于 isbitstype 类型的实例
isbitstype 判断类型是否为“纯数据”类型
fieldoffset 获取类型中指定字段相对于数据起始位置的字节偏移量
Base.datatype_alignment 获取该类型实例在内存分配时的最小对齐字节数
Base.datatype_haspadding 判断该类型的实例字段在内存中是否紧密排列
Base.datatype_pointerfree 判断该类型的实例是否可能包含指向垃圾回收管理内存的引用

# 特殊值

函数名 简介
typemin 给定(实数)数值类型的最小可表示值
typemax 给定(实数)数值类型的最大可表示值
floatmin 返回浮点类型所能表示的最小正正规数
floatmax 返回浮点类型所能表示的最大正正规数
maxintfloat 返回给定浮点类型(默认 Float64)中能精确表示的最大连续整数值
eps 返回浮点类型的机器精度
instances 返回指定类型的所有实例集合

# 特殊类型

函数名 简介
Any 所有类型的联合类型
Union 类型联合是包含其所有参数类型实例的抽象类型
Union{} 空类型联合
UnionAll 表示对某个类型参数所有可能取值的类型联合
Tuple 元组是一种固定长度且不可变的容器,可以存放不同类型的任意值,通过索引访问元素
NTuple NTuple{N, T}表示长度为 N 且所有元素类型均为 T 的元组类型
NamedTuple 是具有唯一名称(符号表示)的元组类型集合
@NamedTuple 返回一个具有指定键名和对应类型的命名元组类型
Base.@Kwargs 根据与 @NamedTuple 相同的语法构造关键字参数的类型表示
Val 此类型用于通过值(必须是 isbits 类型或符号)在函数间传递信息
Vararg 元组类型的最后一个参数可以是特殊值 Vararg,表示任意数量的尾部元素
Nothing 没有任何字段的类型,表示 nothing 的类型
isnothing 判断是否严格等于 nothing
Base.notnothing 如果 x === nothing 则抛出错误
Some 一种包装类型,用于 Union{Some{T}, Nothing} 中区分 nothing 和存在值但值为 nothing 的情况
something 返回参数中第一个不等于 nothing 的值
@something something 的短路版本,遇到第一个非 nothing 的值立即返回,无需继续检查后续参数
Base.Enums.Enum 由 @enum 定义的所有枚举类型的抽象超类型
Base.Enums.@enum 创建一个枚举类型
Expr 表示 Julia 解析代码中的复合表达式(抽象语法树,AST)的类型
Symbol 用于表示 Julia 解析代码中标识符的类型
Module 是一个独立的全局变量工作空间

# 通用函数

函数名 简介
Function 所有函数的抽象类型
hasmethod 判断指定的函数是否存在与给定参数类型匹配的方法
applicable 判断指定的函数是否存在适用于给定参数的方法
Base.isambiguous 判断两个方法是否可能因某些调用签名而产生二义性
invoke 调用函数中与指定类型匹配的方法
@invoke 提供简化语法,方便调用指定类型的方法
invokelatest 保证调用函数的最新版本,避免执行过时的方法
@invokelatest invokelatest 的便捷用法
new 内构造函数中使用的特殊函数,用于创建该类型的新实例
|> 中缀操作符,将函数 f 应用于参数 x,使得 f(g(x)) 可写成 x |> g |> f。
函数复合,即 (f ∘ g)(args...; kwargs...) 表示先调用 g,再将结果传入 f
ComposedFunction 表示两个可调用对象的函数复合
splat 将多参数函数转换为接受单个参数(元组)并展开调用的新函数,方便在需要单参数函数但传入元组的场景下使用
Base.Fix1 表示对二元函数的部分应用,将第一个参数固定为某值
Base.Fix2 表示对二元函数的部分应用,将第二个参数固定为某值

# 语法

函数名 简介
eval 在指定模块中执行表达式并返回结果
eval 在包含该表达式的模块的全局作用域中执行表达式并返回结果
@eval 使用 eval 执行带有插值的表达式。如果提供两个参数,第一个参数指定在哪个模块中执行
evalfile 使用 include 将文件加载到一个匿名模块中,执行文件中的所有表达式,并返回最后一个表达式的值
esc 仅在宏返回的表达式(Expr)上下文中有效
@inbounds 在表达式中消除数组边界检查
@boundscheck 将表达式块标记为边界检查块,允许被 @inbounds 宏忽略边界检查
Base.@propagate_inbounds 指示编译器内联函数,同时保留调用者的 @inbounds 上下文
@inline 向编译器提示该函数值得进行内联优化
@noinline 向编译器提示该函数不应被内联
@nospecialize 应用于函数参数,提示编译器该参数的方法实现不针对不同类型进行特化,而是使用声明的参数类型
@specialize 将参数的特化提示重置为默认设置
Base.@nospecializeinfer 告诉编译器在类型推断时,针对使用 @nospecialize 标记的参数,使用其声明类型进行推断,从而减少编译器生成的特化版本数量
Base.@constprop 控制被注解函数的过程间常量传播模式
gensym 生成一个不会与同一模块中其他变量名冲突的唯一 Symbol 符号
@gensym 为变量生成一个唯一的 gensym 符号
var"name" 语法 var"#example#" 用于引用名为 Symbol("#example#") 的变量
@goto @goto name 会无条件跳转到标记为 @label name 的语句位置
@label 用符号标签 name 标记一条语句,作为无条件跳转 @goto name 的目标位置
@simd 为 for 循环添加注解,允许编译器在优化时对循环进行更自由的重排
@polly 指示编译器对函数应用多面体优化器(Polly)
@generated @generated 用于标注生成函数
Base.@assume_effects 覆盖编译器对指定方法或外部调用的副作用建模
@deprecate 标记旧方法为已废弃,并指定替代调用 new,同时根据给定签名定义新的旧方法

# 缺失值

函数名 简介
Missing 无字段的类型,其单例实例 missing 用于表示缺失值
missing 类型 Missing 的单例实例,用于表示缺失值
coalesce 返回参数中第一个不等于 missing 的值,否则返回 missing
@coalesce 遇到第一个非 missing 的值立即返回,无需继续检查后续参数
ismissing 判断 x 是否为 missing
skipmissing 返回一个迭代器,用于遍历 itr 中非 missing 的元素
nonmissingtype 如果类型包含 Missing,则返回一个移除 Missing 后的新类型

# 系统

函数名 简介
run 执行用反引号构造的命令对象
devnull 用于流重定向时丢弃所有写入的数据,功能相当于 Unix 系统中的 /dev/null 或 Windows 系统中的 NUL
success 执行用反引号构造的命令对象,并返回是否成功
process_running 判断一个进程是否正在运行
process_exited 判断一个进程是否已经退出
kill 向进程发送信号,默认是终止进程
Base.Sys.set_process_title 设置进程标题
ignorestatus 将命令对象标记为即使返回非零结果码,执行时也不会抛出错误
detach 将命令对象标记为在新的进程组中运行,使其能独立于 Julia 进程存在,且不会收到 Ctrl-C 中断信号
Cmd 构造一个新的命令对象(Cmd),表示外部程序及其参数,同时可通过可选关键字参数修改相关设置
setenv 设置运行指定命令时使用的环境变量
addenv 将新的环境变量映射合并到指定的命令对象中,返回一个新的命令对象
withenv 在临时修改过的环境中执行函数,修改通过零个或多个的参数传入
setcpuaffinity 通过指定的 CPU ID 列表设置命令的 CPU 亲和性
pipeline 创建一个从数据源到目标的管道连接
Base.Libc.gethostname 获取本机的主机名
Base.Libc.getpid 获取当前 Julia 进程的进程 ID
Base.Libc.time() 获取自 epoch 以来的系统时间
time_ns 获取系统时间的纳秒数
@time 用于执行表达式,打印执行时间、内存分配次数以及分配的总字节数,并返回表达式结果
@showtime 类似 @time,但会额外打印被执行的表达式,便于参考
@timev 这是 @time 宏的详细版本,先打印与 @time 相同的信息,再打印所有非零的内存分配计数,最后返回表达式的结果
@timed 用于执行表达式并返回表达式结果、执行时间、总分配字节数、垃圾回收时间,以及包含各种内存分配计数的对象
@elapsed 用于执行表达式并丢弃结果,返回执行所用的时间(秒),以浮点数形式表示
@allocated 用于执行表达式并丢弃结果,返回执行过程中分配的总字节数
@allocations 用于执行表达式并丢弃结果,返回执行过程中发生的内存分配次数
Base.EnvDict 该类型的单例对象提供对环境变量的哈希表接口
ENV 对单例对象 EnvDict 的引用,提供系统环境变量的字典接口
Base.Sys.STDLIB 包含标准库包所在目录完整路径的字符串
Base.Sys.isunix 用于判断操作系统是否提供类 Unix 接口
Base.Sys.isapple 用于判断操作系统是否为 Apple Macintosh OS X 或 Darwin 衍生版本
Base.Sys.islinux 用于判断操作系统是否为 Linux 衍生版本
Base.Sys.isbsd 用于判断操作系统是否为 BSD 衍生版本
Base.Sys.isfreebsd 用于判断操作系统是否为 FreeBSD 衍生版本
Base.Sys.isopenbsd 用于判断操作系统是否为 OpenBSD 衍生版本
Base.Sys.isnetbsd 用于判断操作系统是否为 NetBSD 衍生版本
Base.Sys.isdragonfly 用于判断操作系统是否为 DragonFly BSD 衍生版本
Base.Sys.iswindows 用于判断操作系统是否为 Microsoft Windows NT 衍生版本
Base.Sys.windows_version 返回 Windows NT 内核的版本号,类型为 VersionNumber
Base.Sys.free_memory 获取系统中可用的总内存大小(字节)
Base.Sys.total_memory 获取系统中总的物理内存大小(字节),包括已使用的部分
Base.Sys.free_physical_memory 获取系统当前的可用空闲内存大小(字节)
Base.Sys.total_physical_memory 获取系统物理内存总大小(字节),包含已使用和未使用部分
Base.Sys.uptime 获取系统当前运行时间(秒)
Base.Sys.isjsvm 用于判断 Julia 是否运行在 JavaScript 虚拟机(JSVM)中
Base.Sys.loadavg 获取系统负载平均值
Base.Sys.isexecutable 判断指定路径是否具有可执行权限
@static 在解析阶段对表达式进行部分求值

# 版本信息

函数名 简介
VersionNumber 遵循语义化版本规范(semver)的版本号类型,由主版本号、次版本号和补丁号组成,后可跟预发布和构建的字母数字标识
@v_str 用于将字符串解析为 VersionNumber 的字符串宏

# 错误

函数名 简介
error 抛出带有指定消息的错误异常
throw 抛出一个对象作为异常
rethrow 在 catch 块内重新抛出当前异常,使其继续传播
backtrace 获取当前程序执行点的堆栈跟踪对象
catch_backtrace 获取当前异常的堆栈跟踪信息,通常在 catch 块中使用
current_exceptions 获取当前正在处理的异常堆栈
@assert 当条件 cond 为假时,抛出错误 AssertionError
Base.Experimental.register_error_hint 注册一个“提示”函数,用于为用户提供可能的错误解决建议
Base.Experimental.show_error_hints 调用针对异常类型注册的所有提示处理函数,args 包含该类型处理函数所需的其他参数
ArgumentError 传递给函数的参数无效
AssertionError 判定条件未被满足
BoundsError 对数组的索引操作尝试访问超出边界的元素
CompositeException 将任务抛出的异常向量,封装为包含异常序列信息的对象
DimensionMismatch 调用的对象维度不匹配
DivideError 尝试进行整数除法时,分母为零
DomainError 传递给函数或构造函数的参数值超出有效范围
EOFError 文件或流中没有更多可读取的数据
ErrorException 通用错误类型
InexactError 无法在函数的某个方法中将值 val 精确转换为类型 T
InterruptException 进程被终端中断信号(CTRL+C)终止
KeyError 对抽象字典(如 Dict)或集合(Set)类型进行索引操作时,尝试访问或删除不存在的元素
LoadError 在执行 include、require 或 using 文件时发生错误,具体错误信息存储在 .error 字段中
MethodError 指定函数中不存在匹配的类型签名的方法,或者没有唯一的最具体方法
MissingException 当遇到不支持缺失值的情况时抛出的异常
OutOfMemoryError 操作分配的内存超过系统或垃圾回收器的处理能力
ReadOnlyMemoryError 尝试写入只读内存时发生的错误
OverflowError 表达式结果超出指定类型的表示范围,导致溢出
ProcessFailedException 表示进程异常退出状态,运行命令或管道时返回非零退出码时抛出
TaskFailedException 任务失败时抛出,封装失败的任务
StackOverflowError 函数调用栈溢出,通常因无限递归导致
SystemError 系统调用失败,带有错误码
TypeError 类型判定失败,或内置函数接收了错误类型的参数
UndefKeywordError 函数调用时缺少必需的关键字参数
UndefRefError 对象不存在指定的元素或字段
UndefVarError 当前作用域中符号未定义
StringIndexError 尝试访问字符串中无效索引时发生的错误
InitError 模块的 __init__ 函数运行时发生错误
retry 返回一个匿名函数,该函数调用指定函数
ExponentialBackOff 生成一个长度为 n 的 Float64 迭代器

# 事件

函数名 简介
Timer 创建一个定时器,在每次定时器触发时执行指定的回调函数
Base.AsyncCondition 创建一个异步条件变量,当条件满足时调用指定的回调函数

# 反射

函数名 简介
nameof 获取模块的名称,类型为符号(Symbol)
parentmodule 获取模块的上级模块
pathof 返回导入模块对应的 m.jl 文件路径
pkgdir 返回声明模块的包的根目录
pkgversion 返回导入模块的包的版本
Base.moduleroot 查找给定模块的根模块
__module__ 宏内部可见参数,提供宏调用展开上下文的模块信息
__source__ 宏内部可见参数,提供宏调用处的解析器位置信息(行号节点)
@__MODULE__ 用于获取当前顶层 eval 所在的模块
@__FILE__ 展开为包含宏调用所在文件路径的字符串
@__DIR__ 展开为包含宏调用所在文件目录的绝对路径字符串
@__LINE__ 展开为宏调用所在的行号
fullname 获取模块的全名,返回符号元组
names 获取模块导出的名称数组
nameof 获取函数的名称(符号)
functionloc 返回函数或方法定义的位置
Base.@locals 构造一个字典,包含调用位置处所有已定义局部变量的名称(符号)及其对应的值

# 代码加载

函数名 简介
Base.identify_package 根据名称从当前环境栈中查找包,返回其 PkgId
Base.locate_package 返回与包标识符对应的入口文件路径
Base.require 该函数是 using / import 的实现部分
Base.compilecache 为模块及其所有依赖创建预编译缓存文件,用于减少包加载时间
Base.isprecompiled 判断给定包是否已在当前激活项目中被预编译
Base.get_extension 获取父模块中指定扩展模块

# 内部工具

函数名 简介
Base.GC.gc 执行垃圾回收
Base.GC.enable 控制垃圾回收是否启用,传入布尔值,返回之前的状态
Base.GC.@preserve 标记指定对象在表达式执行期间被使用,通常用于不安全代码中防止资源被回收
Base.GC.safepoint 在程序中插入一个垃圾回收可能运行的点
Base.GC.enable_logging 开启后,会将每次垃圾回收的统计信息打印到标准错误输出
Meta.lower 将表达式转换为在指定模块中执行的等效低级形式表达式
Meta.@lower 将表达式转换为在指定模块中执行的低级形式
parse 解析表达式字符串并返回一个表达式,该表达式可用于后续执行
Meta.ParseError 表示传递给解析函数的表达式无法被识别为有效的 Julia 表达式时产生的错误类型
QuoteNode 表示一段带引号的代码片段,不支持插值操作
macroexpand 将表达式中的所有宏展开,返回不含宏的等效表达式
@macroexpand 返回展开后不含任何宏的等效表达式
@macroexpand1 非递归版本的 @macroexpand
code_lowered 返回与指定函数和类型签名匹配的方法的所有低级形式的数组
code_typed 返回与指定函数和类型签名匹配的方法的类型推断后的低级形式数组
precompile 对给定函数按照指定参数类型进行编译,但不执行该函数
Base.jit_total_bytes 返回即时编译器为本地代码和数据分配的总内存字节数

# 元编程

函数名 简介
Meta.quot 对表达式进行引用,生成带有“quote”头部的表达式
Meta.isexpr 判断给定表达式是否为指定类型头部的表达式
Meta.isidentifier 判断给定的符号或字符串是否包含符合 Julia 普通标识符规则的字符
Meta.isoperator 判断符号是否可用作运算符,返回布尔值
Meta.isunaryoperator 判断符号是否可用作一元(前缀)运算符,返回布尔值
Meta.isbinaryoperator 判断符号是否可用作二元(中缀)运算符,返回布尔值
Meta.show_sexpr 将表达式以类 Lisp 的 S 表达式 形式显示