CMU 15-445
実験目標#
この実験は、CMU 15-445/645
の前提実装です。主に C++ のスキルを評価します。
私が受講しているコースはfall20221です。関連するコードはRelease2からダウンロードできます。
このコースでは、次の 2 つの内容に関連しています。
- 環境の構築方法
- C++ の使用方法
環境の構築#
私は仮想マシン(Ubuntu)+ ローカルコンピュータの SSH を使用して開発しています。
以下のプラグインを VSCode にインストールします。
C/C++
CMake
CMake Tools
Remote - SSH
まず、必要なコードをダウンロードして解凍します。
wget https://github.com/cmu-db/bustub/archive/refs/tags/v20221128-2022fall.tar.gz
tar -zxvf v20221128-2022fall.tar.gz
次に、VSCode の SSH を使用してリモートコンピュータに直接アクセスします。
その後、必要なソフトウェアをインストールします。
sudo build_support/packages.sh
その後、VSCode のいくつかのオプションを設定する必要があります。
下部の「生成」をクリックします。
次に、「Clang 12.01 x86_64-pc-linux-gnu」を選択してください。
デバッグ#
生成の横にあるボタン[all]
をクリックして必要なものに切り替えます。
テスト方法はGTest
を使用しています。
テストファイルのすべてのDIABLE_
を削除するだけでテストを実行できます。
たとえば、パス/test/primer/starter_trie_test.cpp
のすべてのDIABLE_
を削除し、結果を出力してみることができます。ブレークポイントでデバッグするにはを押します。結果を直接出力するにはを押します。
デバッグ
実行結果
C++ の使用方法#
この部分についてはあまり説明することはありません。
std::unique_ptr
の使用法に重点を置いてください。
以下はいくつかの使用例です。
トライノードの反復処理
auto cur_node = &this->root_; // ! スマートポインタへのポインタ
auto par_node = cur_node;
while(cur_node != nullptr) {
cur_node = cur_node->get()-> GetChildNode(ch);
...
par_node = cur_node;
}
親クラスのポインタで子クラスのノードを動的に構築する方法
auto tmp_node = std::make_unique<T>(std::move(*cur_node) , value);
par_node-> get() -> InsertChildNode(ch, std::move(*tmp_node));
cur_node = par_node-> GetChildNode(ch);
キャストを使用して子クラスの値を取得する方法
auto tmp_node = dynamic_cast<TrieNodeWithValue<T> *>(cur_node->get());
コースが終了してしまった場合、私のコードを参考にしてください。
Footnotes#
-
CMU 15-445/645 fall2022 公式ウェブサイト https://15445.courses.cs.cmu.edu/fall2022/ ↩
-
bustub ソースコードの場所 https://github.com/cmu-db/bustub ↩