CMU 15445 spring 2023 - project 0 C++ Primer实验笔记
前排提醒
本项目需要在linux/mac环境下进行开发,如果是windows最好是整个linux的环境,比如云服务器、虚拟机、wsl等。
整个课程需要仔细看文档,包括bustub的readme,每篇project的描述。
整个课程需要仔细看文档,包括bustub的readme,每篇project的描述。
整个课程需要仔细看文档,包括bustub的readme,每篇project的描述。
项目大意
本项目分为4个部分:
- 写一个写时复制的字典树
- 写一个多线程字典树(在1基础上)
- 测试debug能力
- 写一个bustub数据库的聚合函数
难度大概是1最难,2次之,其余都很简单。
对我而言1最难是因为语法不熟悉,本项目使用的是c++17的语法,不过只要熟悉c++11就能顺畅写下来了。
多线程难写主要是并发炸了
提醒,改了代码文件但没改测试代码文件时候,也需要指定测试目标重新生成
Task #1 - Copy-On-Write Trie
这个任务要求实现Get、Put、Remove方法。
Get的话要判断key是否为空,为空那就是root为value节点。遍历的时候map不要用[],也不要用at来判断是否存在这个键值对(算竞人只会[]),因为函数是const的。还要记得判断root是否为空。
Put比起Get来就比较难一点。首先也需要判断root是否为空。为空就好说了,如果不为空的话,那么遍历一路,一路上都是需要创建新的节点的。特判key最后一个字符对应的节点是否存在,存在的话就copy-on-write,不存在就直接new(不是直接new)。
Remove的时候,过程就类似于递归了。首先跟着key找到对应的路径,接着从底部往上copy-on-write。我是写了一个lambda递归,返回是否要删除子节点以及子节点的指针。
Task #2 - Concurrent Key-Value Store
这个如果之前有接触过多线程的话很好写,只要看清楚题意想明白怎么写就行。
我之前我想明白上“多人可读,一人可写”。弄成了多个人拿取那份数据后,分写改写后,仅一人可写回,这样就不对的。应该是写的时候,仅其中一人在进行写的整个过程,其他的写者都应该等着。
Task #3 - Debugging
这个很简单,熟悉一下debug操作就行。
记得答案写到 src/include/primer/trie_answer.h
不要写错位置了。
Task #4 - SQL String Functions
这个任务可以帮助熟悉项目结构。
在 string_expression.h
写出来具体的执行方法。在 plan_func_call.cpp
写调用逻辑。
结语
整个课程需要仔细看文档,包括bustub的readme,每篇project的描述。
要用linux/mac系统来运行项目。
其实早在三四月份就想上手写这个,但当时语法知识欠缺,无从下手。在经过一段时间的学习,以及实习经历对编程技术的增长,还有和其他前辈的交流,让之前觉得很难的cmu15445变得一般难了。终于有了资格去上这门课了2333.
欢迎加群152391370一起搞cmu15-445,也可以搞他课程例如6.824,6.828(6.S081),15-213等相关内容。