{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreidzb6xmoqasl5ucr4nxqalbedv6zmwbdki2qdqhz3lbsmgecsuzna",
    "uri": "at://did:plc:ivbknywyskln22er3nkssdhl/app.bsky.feed.post/3mhe6xkv4u5r2"
  },
  "path": "/t/stable-type-identifiers-a-missing-piece-for-crabi-and-export/24093#post_15",
  "publishedAt": "2026-03-18T17:53:45.000Z",
  "site": "https://internals.rust-lang.org",
  "textContent": "ParaDevOne:\n\n> Two builds of serde 1.0.100 and 1.0.200 as long as they are the same major version will create the same hash. It makes sense because the types are the same and have always been compatible with each other.\n\nThey may have different definitions between minor and patch releases and thus wouldn't be ABI compatible. For example the source may have reordered fields or a field may have been added if it was `#[non_exhaustive]` or a private field may have changed.\n\nParaDevOne:\n\n> Would combining StableCrateId with DefPath make a practical basis for stable type identifiers?\n\nDefPath already contains the StableCrateId. The DefPathHash is the stable identifier used by incr comp. It is still sensitive to non-abi changes though.\n\nParaDevOne:\n\n> The one real question remaining is whether or not this can be made stable between compiler versions, as opposed to them being implementation details of rustc.\n\nNot easily. DefPath components encode a lot of implementation details.",
  "title": "Stable type identifiers: a missing piece for crABI and export"
}