5 ms·
Promises and generators are both awesome, but they're both way more restrictive than call/cc. Now, I tend to the idea that that's usually a feature - and that a
by mst 9y ago
Promises and generators are both awesome, but they're both way more restrictive than call/cc. Now, I tend to the idea that that's usually a feature - and that at most strictly delimited continuations is more than sufficient in a normal language - but equating promises to continuations is ... not really accurate.
(but oh gods 'let' makes me so happy, having to get sensible closure behaviour by typing out let-over-lambda shenanigans by hand was -ing horrible)
- dahart 9y ago> equating promises to continuations is ... not really accurate. That's fair, agreed, and I don't mean to imply equality. The argument was that JS doesn't have continuations at all though, which wasn't completely true in 2013, and is trending less true over time with promises and generators, right?
- Roboprog 9y agoRe: “let” Some might argue that a function which is so long that it needs block scoping, whether for visibility or storage lifetime management, is too long. I guess it’s at least “mostly harmless”, though :-) (“class” arguably sucks in ES2015)
- z3t4 9y agoI like the function scope as it encourages you to create functions. functions are great! Only time it gets confusing is in the for-loop where most people expect a closure. I tell them to just put the innards of the for-loop in a function. Also with function scope you don't have to worry about the blocks, you can declare variables everywhere and they'll be hoisted.
- mst 9y agoBeing able to write: for (let x in list) { callbacks.push(function () { x+3 }); } instead of: for (var x in list) { callbacks.push((function (x) { function () { x + 3 } })(x); } is a huge advantage to me. (yes, I know arrow function notation exists, but given I was explaining "why I love let" it would've been unfair to use it in the "good" example)
- Roboprog 9y agoOh. I guess I don’t use for...in much (at all). I see your point now, though. OTOH: list.forEach( function( x ) { callbacks.push( function () { return x + 3 } ) } I guess I tend to use forEach, or one of the Ramada.js operations, rather than for loops these days. EcmaScript isn’t Scheme, or Smalltalk/Self, or Ruby. But it sucks a lot less than the other language I’m allowed to use at work :-) (I pretend that ES is mostly Ruby)
- rachitnigam 9y agoBoth promises and generators can be used to implement delimited continuations. Furthermore, there is already a compiler that implements first class delimited continuations in JavaScript: http://stopify.org http://stopify.org The project implements the control operator (which can implement other operators like call/cc). The research paper linked on the website talks about how control is implemented.
- mst 9y agoI've implemented delimited continuations using both. But I don't disagree with any of your factual statements.