Differences between Move and Move IR

I stumbled across these two statements

  1. Move (IR?) is a language which is compiled to statically typed bytecode
  2. Move (IR?) is a statically typed bytecode language, there is no compile phase which makes it safer (less error prone due to missing compilation step), the code is interpreted “right away”

Could you please clarify on this and maybe link to a comparison between Move and Move IR (if there is none)?

Thanks!

(BTW: is this the right place to ask these kind of questions or would you recommend some other place like Telegram, etc.)

This is indeed the right place to ask such questions!

  1. Move (IR?) is a language which is compiled to statically typed bytecode

This ought to say “Move IR” is, but would also be true of the (forthcoming) Move source language, or any other language that compiles to Move bytecode.

  1. Move (IR?) is a statically typed bytecode language, there is no compile phase which makes it safer (less error prone due to missing compilation step), the code is interpreted “right away”

This ought to say “Move is” or “Move bytecode” is. If we say “Move” in isolation, we intend to refer to the Move bytecode language.

Move bytecode is what is included in transactions and what validators actually execute. For a comparison between Move bytecode and Move IR, let me paraphrase from the Move overview.

Move IR is an early (and unstable) precursor to a forthcoming Move source language (see Future Developer Experience for more details). Move IR is a thin syntactic layer over Move bytecode that is used to test the bytecode verifier and virtual machine, and it is not particularly developer-friendly. It is high level enough to write human-readable code, yet low level enough to compile directly to Move bytecode.

2 Likes

yeah for starters, i’m so confused on the diff b/w Move bytecode language and Move IR, that would be nice if the calibra team can make these two things more crystal clear. thanks