# ADR-0006: 62-bit タグ付き Int モデル

- Date: 2026-02-16
- Status: accepted

## Context

vibe の Int 型をどのビット幅・表現で扱うか決定する必要があった。JavaScript の 53-bit 安全整数、WASM の i32/i64、ネイティブの 64-bit 整数などの選択肢があった。WASM GC ランタイムでは値のタグ付けが必要になる場面がある。

## Decision

62-bit タグ付き整数を採用する:

- **リテラル上限**: 2^61 - 1 (2305843009213693951)。超過は `IntLiteralOverflow` エラー
- **ランタイム範囲**: -2^61 〜 2^61-1（i64 の下位 2 bit をタグに使用）
- **hex リテラル**: `0xFF`, `0X1A2B`（大文字小文字どちらも可）
- **`>>` は算術シフト**（符号拡張あり）
- **`~` (bit_not) 非対応**: `x ^ mask` で代用

## Consequences

- WASM i64 とネイティブ 64-bit の両方で効率的に動作する
- JavaScript 安全整数範囲（53-bit）を超えるが、WASM 環境では問題なし
- ビット演算のセマンティクスに注意が必要（符号なし右シフトは手動マスク）
