There are already many ways to starve/block the event loop.

You could have an infinite loop

while (true) {}

Or a recursive loop that blocks till the stack overflows

function a() {
  a();
}
a();

Now these new semantics would add another way to do the recursive loop,
except this time the trampoline is built in and the stack doesn't overflow.

function a() {
  process.nextTick(a);
}
a();

If we're worried about changing the name to match the meaning and we're
worried about breaking existing code (I know I have some that accidentally
depends on the non-blocking nature), we could add a new function
process.afterTick that does the new semantics and deprecate process.nextTick
.

Then no code breaks and we eventually get the right behavior with the right
name.


On Sat, May 26, 2012 at 10:40 PM, Mikeal Rogers <mikeal.rog...@gmail.com>wrote:

>
>
> On May 26, 2012, at May 26, 20128:16 PM, Jorge wrote:
>
>
> It would mean there's one more thing that can go wrong: the way it's now
> it's ~ impossible to block the event loop (*), the way you're proposing you
> could.
>
>
> That's one way to look at it.
>
> Another way would be to say that there is already something that can go
> wrong when people make the assumption that no IO will fire before their
> nextTick() hander, which is an assumption most people make although I doubt
> there are many cases where the assumption not being true will break
> something.
>
> This gives us a true assumption, which is a feature. In my opinion, it's a
> better feature than this edge case where you block the event loop (although
> I think we should put in a guard for it so that we can throw a nice
> exception).
>
> -Mikeal
>

Reply via email to