IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Yield

共 2 篇相关文章

IT 累计浏览 4,207

一个“蝇量级” C 语言协程库

这篇讲的是如何用不到100行代码在C语言里实现协程。作者从协程的背景讲起,对比了它和线程在“生产者-消费者”模型中的差异,指出C语言由于依赖栈帧实现函数调用,缺乏原生yield语义,直接实现对称协程比较麻烦。 文章核心介绍了开源库protothreads。这个库“蝇量级”到所有代码都在5个头文件里,每个协程只需2字节内存开销,非常适合资源敏感的嵌入式场景。作者还追溯了作者Adam Dunkels的其他知名作品,暗示其工业级可靠性。 实现的关键在于一个C语言“奇技淫巧”:利用switch-case语句的穿透特性和`__LINE__`宏,模拟了程序计数器的保存与恢复。通过将return语句嵌入case标签,并在函数入口用一个switch跳转到上次的挂起点,就用纯C语法实现了协程的挂起与恢复。文章最后展示了如何用宏封装出Begin/Yield/End这样的简洁接口,让开发者能写出类似Python生成器的代码结构。

IT 累计浏览 2,824

适合JavaScript 1.7中迭代生成器的异步编程机制

作者从自己之前实现的AsyncIterator(一种基于迭代生成器yield的异步编程方式)出发,指出其最初是对C# AsyncEnumerator的仿制。在与同事讨论后,他受到启发,针对JavaScript 1.7区别于C# 2.0的特性,对这种异步编程机制进行了更优雅的改进。文章的核心在于展示如何利用yield特性,将回调风格的异步代码转换为更线性的、易于理解和维护的写法。 作者通过这个案例,具体探讨了语言特性如何影响编程模型的设计。他遗憾地提到,这个非常实用的yield特性后来在ECMAScript 5标准化过程中被剔除,并将其归结为“委员会设计模式”的产物。文章在提供一个清晰异步编程思路的同时,也折射出技术规范制定过程中的一种无奈现实。