CMU-15445 Project 0 C++ Primer
CMU的入门实验
写在前面
现在是2024-08-23,久闻15-445课程大名,但没机会参加进来玩一下。纸上得来终觉浅,决定这段时间跟一下CMU的客车学习一下课程,如何上车参考这里。这几篇并不能算是实验报告而只能算是个人的一些记录,关于实现或者代码上的细节由于课程要求不会公开。
CMU的开源课程会每学期更新,这一期CMU学生学的是2024Fall,客车开放的2023Fall,2023Fall课程主页在这里.
CMU15-445的课程代码,课件,视频等均开源,加入客车一起加入讨论群(discord)和加入作业提交网站(gradescope)。
实验要求
这门作业是为了检验是否达到C++入门要求。Project要求,以下是理解要求。
要求实现一个支持copy-on-write
的trie
数据结构,trie
是一种有序的k-v树结构,为了简化实现这里将key假定为变长字符串。
可以根据字符串索引到对应节点,每个终端节点指向一个value。
任务1: 写时复制Trie
修改trie.cpp
和trie.h
两个文件,要求实现写时复制Trie数据结构,支持方法:
- Get(key) 获取对应的值
- Put(key, value). 如果已有值则覆盖之,返回一个新的Trie,kv对值不应该被复制;
- Delete(key). 删除值,返回一个新的Trie
任务2: 并发kv存储
修改trie_store.cpp
和trie_store.h
两个文件,要求kv存储满足:
- Get(key) returns the value.
- Put(key, value). No return value.
- Delete(key). No return value.
任务3:debug
使用trie_debug_test.cpp
测试,通过输出(cout/printf),gdb等工具调试,在trie_answer.h
中补齐答案。
在这个过程中,使用gdb经常调用一些方法无法执行,有一部分原因是因为:gdb不包含标准库,它只能调用代码中使用过或者定义过的代码和函数。
gdb教程可以参考:
- Debugging Under Unix: gdb Tutorial(cmu);
- GDB Tutorial: Advanced Debugging Tips For C/C++ Programmers.
任务4:SQL String Functions
在文件string_expression.h
和plan_func_call.cpp
中补充upper
和lower
两个sql函数的实现。
可以通过bustub-shell
测试实现:
1
2
3
4
5
cd build
make -j`nproc` shell
./bin/bustub-shell
bustub> select upper('AbCd'), lower('AbCd');
ABCD abcd
或者用sqllogictest
,其中BufferPoolManager
未实现跟本实验无关。
1
2
3
4
5
cd build
make -j`nproc` sqllogictest
./bin/bustub-sqllogictest ../test/sql/p0.01-lower-upper.slt --verbose
./bin/bustub-sqllogictest ../test/sql/p0.02-function-error.slt --verbose
./bin/bustub-sqllogictest ../test/sql/p0.03-string-scan.slt --verbose
开发环境
写的是拉取主分支,但是现在主分支在别的学期了,要求可能不一样,建议直接下载github上的release版本。
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
# 安装依赖
# Linux
sudo build_support/packages.sh
# macOS
build_support/packages.sh
# build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j`nproc`
# 测试
cd build
make trie_test trie_store_test -j$(nproc)
make trie_noncopy_test trie_store_noncopy_test -j$(nproc)
./test/trie_test
./test/trie_noncopy_test
./test/trie_store_test
./test/trie_store_noncopy_test
## 别忘了实验要求3 参考上述测试样例的编译进行编译调试
# 代码格式检查,检查不过直接0分哦
make format
make check-clang-tidy-p0
# 内存检查
cmake -DCMAKE_BUILD_TYPE=Debug -DBUSTUB_SANITIZER= ..
最后生成提交文件
1
make submit-p0
记得还要添加gradescope的认证信息:
1
python3 gradescope_sign.py