Home

continuation 专项班结课

2023-04-25原文链接

「continuation 专项班」昨天已经结课了。这是既第一届进阶班之后,我第二次讲授深入的 continuation 内容。从无到有,我们自己实现并且理解了 CPS,call/cc 和 shift/reset 的概念。其中还是包括了 cpser,也就是传说中功的“王垠 40 行代码” 😄。

学习了这些内容对于实际编程有什么用处呢?首先我们用很短的代码(只有 14 行),实际地实现并理解了操作系统的线程是怎么回事,并且用很短的代码(还是只有 14 行)实现了 cpser,它的本质其实是编译器的核心部分。

有人可能以为这些也许太底层系统了,但这些内容其实也可以帮助理解最流行的一些 JavaScript 特性,比如 promise/async/await 之类的。比如,我们会理解下面这段结果有点出乎意料的 JS async 代码是在做什么,并且有能力自己实现 JS 的 promise/async/await 机制。

var show = console.log;

async function fact(n)

{

if (n == 0)

{

return 1;

}

else

{

return n * (await fact(n - 1));

}

}

fact(5).then(show);

fact(2).then(show);

fact(3).then(show);

fact(1).then(show);

fact(4).then(show);

可以试试看,这代码得到什么结果?