Post

CMU-15445 Project 0 C++ Primer

CMU的入门实验

写在前面

现在是2024-08-23,久闻15-445课程大名,但没机会参加进来玩一下。纸上得来终觉浅,决定这段时间跟一下CMU的客车学习一下课程,如何上车参考这里。这几篇并不能算是实验报告而只能算是个人的一些记录,关于实现或者代码上的细节由于课程要求不会公开

CMU的开源课程会每学期更新,这一期CMU学生学的是2024Fall,客车开放的2023Fall,2023Fall课程主页在这里.

CMU15-445的课程代码,课件,视频等均开源,加入客车一起加入讨论群(discord)和加入作业提交网站(gradescope)。

实验要求

trie

这门作业是为了检验是否达到C++入门要求。Project要求,以下是理解要求。

要求实现一个支持copy-on-writetrie数据结构,trie是一种有序的k-v树结构,为了简化实现这里将key假定为变长字符串。

可以根据字符串索引到对应节点,每个终端节点指向一个value。

任务1: 写时复制Trie

trie

修改trie.cpptrie.h两个文件,要求实现写时复制Trie数据结构,支持方法:

  • Get(key) 获取对应的值
  • Put(key, value). 如果已有值则覆盖之,返回一个新的Trie,kv对值不应该被复制;
  • Delete(key). 删除值,返回一个新的Trie

任务2: 并发kv存储

修改trie_store.cpptrie_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教程可以参考:

任务4:SQL String Functions

在文件string_expression.hplan_func_call.cpp中补充upperlower两个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
This post is licensed under CC BY 4.0 by the author.