I want to know if there are some big differences between Rust CDK and Motoko in request-processing/inter-canister-calls/memory-management/… .
- Are requests (update-calls) in CDK processed single threaded as in Motoko and queries multi-threaded?
- Are all changes to memory/variables discarded after a query call in CDK as in Motoko?
- Are all changes to memory/variables not visible to parallel query calls in CDK as in Motoko (no dirty reads)?
- Are all changes to variables get visible/stored permanently only after an await call (in update call) in CDK as in Motoko?
- Are all changes to variables get rolled-back to previous state (where last await was called) when the canister traps in Rust CDK as in Motoko?
- What is the equivalent of trap (state will be rolled back) and throw (state will not be rolled back) from Motoko to Rust CDK?
- Will the state in Rust CDK be automatically stored as stable memory (
ic_cdk::storage) or is it expected to call
ic_cdk::storage::stable_saveand if yes, then when (
pre_upgrade()or in every update-call)?
- Does Rust CDK have the same message delivery guarantees in inter-canister-calls as Motoko (every call get exactly a single reject or a single reply)?
- Does orthogonal persistence also apply to Rust CDK or is it something exclusive in Motoko?
- If there are some other big differences in Rust CDK an Motoko in request-processing/memory-management or other guarantees, then I would be glad to hear more about them.