5 ms·
(1) MLs allow to nest named functions. Go only allows named global functions, and lacks a feature that Pascal had. (2) Someone has to do cleanup anyhow. Either
by a_strange_guy 15y ago
(1) MLs allow to nest named functions. Go only allows named global functions, and lacks a feature that Pascal had.
(2) Someone has to do cleanup anyhow. Either the caller or callee. (I am no expert in calling conventions) Anyhow, isn't this practically free, because the stack is in the L1 cache?
(3) To implement lightweight threads (ala. Erlang, Go, Stackless) you already can't allocate your activation records on the C-stack. So the main cost for call/cc is already paid for. Besides, Go lacks any form of non-local jumps, so escape continuations alone (setjmp/longjmp) would already be an improvement.
- koenigdavidmj 15y ago> Go only allows named global functions, and lacks a feature that Pascal had. func main() { bar := func() { fmt.Println("Hello, 世界") } bar() } What do I lose by doing that versus having 'func bar()'?
- a_strange_guy 15y agothis: func global(some_arg_to_close_over Bar) { func walk_tree(node Node) { ... walk_tree(left(node)) walk_tree(right(node)) } walk_tree(something) }