Move の組み込み型であり、グローバル ストレージ内の場所 (アカウントと呼ばれることもあります) を表すために使用される。
値は 256 ビット (32 バイト) の識別子。
C言語におけるポインタ算術は、メモリ上の位置を動的に操作することができ、これによりプログラマーはデータの位置を細かく制御できます。たとえば、あるポインタから特定のバイト数だけずらして、連続するメモリ領域にアクセスするなどの操作が可能です。このような動的なメモリ操作は非常に強力ですが、同時にプログラムの安全性を損なうリスクも高まります。例えば、不正なメモリ領域へのアクセスや意図しないデータの上書きなどが発生する可能性があります。
一方、Move言語では、このような動的な振る舞いは許可されていません。Moveの設計は、コードが行う操作を静的に(つまり、プログラムの実行前に)検証できるようにすることを目的としています。これにより、コードが想定外の動作をするリスクを減らし、特に金融トランザクションなどのセキュリティが重要な場面で安全性を高めることができます。
アドレス型の使用においても、整数からの生成や算術演算が禁止されているのは、アドレスの安全な使用を保証し、不正なアクセスやデータの誤操作を防ぐためです。このように、Moveは静的な検証を優先しており、実行時にエラーが発生するリスクを最小限に抑える設計となっています。
特定のアドレスには、モジュールとリソースの2つを保存可能。
実行時にアドレス値(type addressの値)を使用して、そのアドレスにあるリソースにアクセスできる。
実行時にアドレス値を介してモジュールにアクセスすることはできない。
u256
数値がアドレス値として使用できます。
42
、0xCAFE
、2021
などがすべて有効な数値アドレスリテラルです。@
記号が必要。
@<数値値>
または@<名前付きアドレス識別子>
。@
記号を省略できる。
<数値値>
または<名前付きアドレス識別子>
。@
記号はアドレスを名前空間の項目から式の項目に変えるオペレーターと考えることができます。