型システム編 - スコープと有効性
難易度: 🔴 上級 所要時間: 10分
現在の実装状況
重要: Cm v0.11.0時点では、ライフタイムパラメータ('a、'staticなど)は実装されていません。
スコープルール
現在のCmでは、以下の基本的なスコープルールが適用されます:
int main() {
int* r;
{
int x = 5;
r = &x; // xはこのブロックの終わりで破棄される
}
// *rを使用すると未定義動作(コンパイラは現在これを検出しない)
return 0;
}
借用の基本ルール
現在実装されている借用チェック:
- 借用中の移動禁止 - ポインタが取得された変数は
moveできない - 借用中の変更禁止 - ポインタで参照中の変数への代入は禁止
int main() {
int x = 100;
const int* px = &x; // xを借用
// int y = move x; // エラー: 借用中は移動不可
// x = 200; // エラー: 借用中は変更不可
return 0;
}
今後の実装予定
将来的には以下の機能が検討されていますが、現時点では未実装です:
- ライフタイムパラメータ(
'a、'staticなど) - ライフタイム注釈
- より高度な借用チェッカー
前の章: 所有権と借用
最終更新: 2026-02-08