标准库¶
关于标准库对名称的规定
标准库规定了许多变量及函数的用法,你不仅应该在标准库中这样使用这些函数,也应该在自己的代码中这样使用。
这样可以使你的代码更加规范,也可以使你的代码更加易读。
这些命名标准的意义
众所周知当你开始编写一个项目时,最困难的一件事就是给变量和函数命名。
但是当你使用统一的命名标准时,你不需要再记住各个函数的作用,你只需要记住标准规定就可以命名和使用函数和变量。
关于异常
标准库的每个函数都有开启异常和关闭异常的版本。因为 Lumos 默认是关闭异常的。
为了在全局开启异常,你可以编辑项目根目录的 lumos-config.lm。
核心功能¶
内存 std.memory¶
低级内存操作、指针管理和智能指针。
memset,memcpy,memmove,memcmp- 指针操作和检查
- 内存分配和释放
- 引用计数和智能指针(Rc, Arc, Box)
- 内存统计和泄漏检测
字符串 std.string¶
字符串操作和文本处理。
- 字符串创建和基本操作
- 搜索、匹配和替换
- 字符串转换和分割
- 类型转换(字符串↔数字)
- 可变字符串操作
容器 std.container¶
数据结构和容器类型。
- 有序集:Array, List, LinkedList, Queue, Stack
- 无序集:HashSet
- 排序集:Set, MinPQ, MaxPQ
- 映射:HashMap, Map, ArrayMap, ListMap 等
- 迭代器接口
- 容器通用操作
系统交互¶
输入输出 std.io¶
标准输入输出和流操作。
- 基础输出:
print,println - 格式化输出:
printf,format - 基础输入:
scan,scan_line,scan_str - 格式化输入:
scanf - 流对象:stdin, stdout, stderr
- 缓冲化控制
- 颜色和表格输出
文件操作 std.file¶
文件和目录操作。
- 文件打开、读取、写入
- 文件指针操作(seek)
- 文件元数据查询
- 目录操作:创建、列表、遍历
- 文件系统操作:复制、移动、删除
- 路径处理和规范化
- 临时文件和目录
线程 std.thread¶
并发编程和线程安全。
- 线程创建和管理
- 互斥锁(Mutex)
- 读写锁(RWLock)
- 条件变量(Condvar)
- 屏障(Barrier)
- 自旋锁(Spin)
- 原子类型(Atomic)
- 通道(Channel)
- 线程池
随机数 std.random¶
伪随机数生成。
- 全局随机函数
- 随机数生成器类(RNG)
- 各种分布:均匀、正态、指数、泊松、二项
- 性能优化建议
算法¶
算法 std.algorithm¶
常用算法库。
- 搜索:线性搜索、二分搜索
- 排序:快速排序、合并排序、堆排序
- 变换:映射、过滤、反转、旋转
- 比较:集合操作、合并
- 分区:数据分区和排序
- 数值:累积和、最大最小值、求和
模块导入¶
导入整个模块¶
using std.container.*;
using std.algorithm.*;
using std.string.*;
导入特定函数¶
using std.io.println;
using std.io.print;
using std.random.rand;
using std.file.open_read;
有限导入¶
// 导入容器模块,但不导入内部的私有实现
using std.container.{List, HashMap, Set};
快速参考¶
I/O 操作¶
println("Hello, {}!", name); // 带格式化输出
i32 x = scan<i32>(); // 读整数
str line = scan_line(); // 读一行
容器操作¶
var list = List::<i32>::new();
list.push(1);
list.push(2);
val map = HashMap::<str, i32>::new();
map.set("age", 25);
字符串操作¶
str s = "hello world";
str upper = s.to_upper();
[str] parts = s.split(" ");
str formatted = format("Value: {}", 42);
文件操作¶
match open_read("data.txt") {
Ok(file) => {
str content = file.read_all().unwrap();
file.close();
}
Err(err) => println("Error: {}", err),
}
并发编程¶
val counter = Mutex::new(0);
spawn {
var guard = counter.lock();
guard[] = guard[] + 1;
};
随机数¶
srand_auto();
i32 num = rand_range(1, 100);
f32 prob = randf();
性能提示¶
-
容器选择
- 频繁随机访问:List
- 频繁两端操作:LinkedList 或 Deque
- 快速搜索:HashMap, Set
- 有序遍历:Map
-
内存管理
- 避免频繁分配:预分配足够容量
- 使用智能指针而非原始指针
- 启用检测工具捕获泄漏
-
I/O 性能
- 批量读写而非单个字符
- 适当调整缓冲区大小
- 大文件考虑流式处理
-
算法选择
- 小数据集:简单排序(插入排序)
- 一般情况:快速排序
- 需要稳定性:合并排序
- 无锁场景:原子操作
标准库的扩展¶
Lumos 社区提供了许多标准库扩展:
- 数学库:矩阵、线性代数
- 日期时间库:时间戳、时区
- 正则表达式库
- JSON/YAML 序列化库
- 网络库:TCP, UDP, HTTP
这些库可通过包管理系统安装。