Random thoughts: - go encourages a return type of foo, err = func(whatever) but that is wrong because you want to return 'foo' *or* an 'err', not both. We almost want a type that is like boolean but contains an error. So if the response is treated like that type no exception is thrown, else it is. if err func(asdad) .... if noerr func or_err int myvar; myvar = int_func(asdf) The big thing we want to avoid here is deep nesting for a sequence of failable. Would goto work? a = func(sss) on_err label; a = f1 b = f2(a) c = f3 on_err label; once an error happens, nothing depending on the error gets called?? - it is really nice if extra statements and clauses can always be added with no syntax fiddling. For statements, that means always have braketing: if (whatever) { statement1 } adding statement2 is just a oneline change. for clauses.. if test statement1 to if test && test2 statement1 is awkward to manage. It would need: if test1 and test2 then statement1 statement2 endif or if test1 ifand test2 then statement1 then statement2 Both horrible. Probably best compromise is if test1 and test2 then statement1 statement2 while test3 or test4 then statement5 ? test1 : statement1 do while then else??