message: [vm-runtime-types] expand GlobalValue doc comment
  Capture discussions between and myself.
  Closes:
  Approved by: runtian-zhou
diff: @@ -158,9 +158,18 @@ pub enum IntegerValue {
  #[derive(Debug)]
  pub struct Struct(Container);
  -/// A special value that lives in the global storage which you are allowed to take global
  -/// references from. A global value also contains an internal flag, indicating whether
  -/// the value has potentially been modified or not.
  +/// A special value that lives in global storage.
  +///
  +/// Callers are allowed to take global references from a `GlobalValue`. A global value also contains
  +/// an internal flag, indicating whether the value has potentially been modified or not.
  +///
  +/// For any given value in storage, only one `GlobalValue` may exist to represent it at any time.
  +/// This means that:
  +/// * `GlobalValue` **does not** and **cannot** implement `Clone`!
  +/// * a borrowed reference through `borrow_global` is represented through a `&GlobalValue`.
  +/// * `borrow_global_mut` is also represented through a `&GlobalValue` -- the bytecode verifier
  +/// enforces mutability restrictions.
  +/// * `move_from` is represented through an owned `GlobalValue`.
  #[derive(Debug)]
  pub struct GlobalValue {
  status: Rc<RefCell<GlobalDataStatus>>,
  