>>611
その場合でも、Rustならば戻り値をResultにしてこのように見やすくプログラミングしやすい。

fn process() -> Result<(), Error> {
 foo()?;
 bar()?;
 baz()
}

fn hoge() -> Result<(), Error> {
 begin()?;
 match process() {
  Ok(()) => {
   commit()?;
   Ok(())
  },
  Err(err) => {
   rollback();
   Err(err)
  },
 }
}

>>613
その通り
?オペレータは、ResultがErr(err)の時にreturn Err(err);する。
正確には便利に変換してくれるreturn Err(From::from(err));だが本筋でないので略。