P0 - C++ Primer
Problem Description
這個版本是 2024 Fall 的版本,目標是實現一個常見的資料結構 Hyperloglog,並熟悉 C++ 的語法。
如果想要快速上手專案架構,可以使用 AI,譬如 deepwiki。
Learning Resource
Environment Setup
- 我使用的環境是 WSL (Ubuntu 24.04) 和 VSCode
- 安裝 VSCode 套件
C/C++ Extension Pack
、clangd
、CMake Tools
、Clang-Format
- 將 bustub clone 下來,並且回退到 2024 Fall 的 commit,這樣可以避免一些不必要的問題
git clone https://github.com/cmu-db/bustub.git
cd bustub
git checkout f97256b88b20468c01023928b63f5693d697674c
接著可以把 .git
檔案移除並接上自己的 git repo (注意不要公開 repo 在 github 上並且把 github action 關掉)
rm -rf .git
git init
git add .
git commit -m "init"
git remote add origin <your-git-repo>
git push -u origin main
- 由於我使用的是 24.04,所以需要修改一下
packages.sh
的內容,並順便安裝clangd
的套件。
build_support/packages.sh
install_linux() {
# Update apt-get.
apt-get -y update
# Install packages.
apt-get -y install \
build-essential \
clang-14 \
clang-format-14 \
clang-tidy-14 \
clangd-14 \
cmake \
doxygen \
git \
pkg-config \
zlib1g-dev \
libelf-dev \
libdwarf-dev
}
install() {
set -x
UNAME=$(uname | tr "[:lower:]" "[:upper:]" )
case $UNAME in
DARWIN) install_mac ;;
LINUX)
version=$(cat /etc/os-release | grep VERSION_ID | cut -d '"' -f 2)
case $version in
18.04) install_linux ;;
20.04) install_linux ;;
22.04) install_linux ;;
# add this line
24.04) install_linux ;;
*) give_up ;;
esac
;;
*) give_up ;;
esac
}
- 安裝套件
sudo build_support/packages.sh
- 嘗試編譯一下,看看有沒有問題
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=/usr/bin/clang-14 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-14 -B build
cd build
make -j`nproc`
- 設定 formatter,這樣就可以在 save 的時候自動格式化 :
.vscode/settings.json
{
"C_Cpp.clang_format_path": "/usr/bin/clang-format-14",
"C_Cpp.formatting": "clangFormat",
"C_Cpp.clang_format_style": "file",
"clangd.path": "/usr/bin/clangd-14",
"cmake.configureSettings": {
"CMAKE_C_COMPILER": "/usr/bin/clang-14",
"CMAKE_CXX_COMPILER": "/usr/bin/clang++-14"
}
}