Notes on structured concurrency, or: Go statement considered harmful13 days agohttps://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-consider...并发 API 传统上使用 go 语句(线程生成、回调、future)来允许后台任务独立运行,类似于控制流中的 goto 语句。Go 语句破坏了抽象,使得函数不再是黑盒(它们可以在调用者不知情的情况下生成任务),扰乱了自动资源清理,并阻碍了正确的错误传播。Trio 引入了托儿所(nursery)作为结构化替代方案,其中任务在托儿所块内启动,父任务在退出前等待所有子任务完成,确保控制流遵循‘黑盒’规则。托儿所保留了函数抽象,支持动态任务生成,允许显式传递托儿所对象以提供灵活性,支持自定义类似托儿所的类型,并集成了自动错误传播和取消功能。移除 go 语句使得 Python 能够实现可靠取消和适当的 Control-C 处理等新功能,托儿所鼓励更清晰、更健壮的并发编程,正如 Trio 中简化的实现(如 Happy Eyeballs)所展示的那样。
Data-Oriented Design (2009)16 days agohttps://gamesfromwithin.com/data-oriented-design/数据导向设计被提出作为游戏开发中面向对象编程(OOP)的替代方案。面向对象编程常导致性能问题,如缓存未命中和并行化困难。数据导向设计侧重于数据布局,旨在实现连续、同质的数据块以进行高效处理。它提高了缓存利用率,简化了并行化,并增强了模块化和测试性。缺点包括陌生感和与现有面向对象代码集成的挑战。对于GUI系统或处理单一实体时,面向对象编程可能仍然适用。
Building Gin: Simple over Easya month agohttps://manualmeida.dev/articles/gin-simple-over-easy/作者在旧金山参与SDK开发并创建了一个名为Fyve的社交网络未果后,回到西班牙时并无具体计划。对Martini框架基于反射的复杂性感到不满,作者受Rob Pike理念启发而创建了Gin框架,将简洁性置于易用性之上。Gin被设计为Martini框架的‘魔法’特性与net/http缺乏辅助功能之间的折中方案,通过显式的*gin.Context对象处理常见操作,避免使用反射。Gin的路由器采用基数树实现高效查找,通过固定内存分配和sync.Pool优化性能,以简洁路由模式换取运行速度和代码简明性。向后兼容性是其核心设计约束,确保早期程序在十余年后仍可运行,这助力Gin获得超过29万个项目的广泛采用。作者在Hacker News发布Gin后,最终将维护工作移交他人,视项目的独立性和持续改进为其成功的标志。