Glean 拾遗
最近收录

3 条 · 按时间

09-22

函数着色:async 如何把语言劈成两半

作者用一个自造的“红蓝函数”语言作寓言:每个函数必须选颜色,红函数只能被红函数调用,调用方式更繁琐,且部分核心库函数只有红色。谜底是——红即异步。JS/Node、C#、Dart、Python 都把世界切成同步与异步两半,根因是异步 IO 必须退掉整个 C 调用栈才能回到事件循环,于是回调、promise、async-await、生成器只能把调用栈手工具体化到堆上(CPS 变换)。async-await 治好了“调用很痛”,却没有消除颜色:同步函数返回值,异步函数返回 Future/Task 包装,仍需 await 拆包。Go、Lua、Ruby 靠 goroutine/协程/fiber 挂起整条线程,同步与异步的区分因此消失。C# 若改用线程同样可避开。适合关心并发模型与语言设计的工程师。

journal.stuffwithstuff.com · 20 min · Concurrency · Essay · JavaScript
09-22

标识符过长也是病:四个删词规则砍掉名字里的水分

Bob Nystrom 在 Google 做 Dart 的 readability 代码审查,见过超过 60 字符的标识符。他给出四条删词规则:类型已由静态类型或参数列表说明,就不该再写进名字(nameString → name,holidayDateList → holidays);对每个限定词追问“去掉它名字还成立吗”,recentlyUpdatedAnnualSalesBid 就这样逐词落马;类名和方法名已经提供了上下文,AnnualHolidaySale.promote 不必再叫 promoteHolidaySale;manager、data、state、engine 这类词不传递任何图像,可以直接删。文末用一个反面例子,把 DeliciousBelgianWaffleObject.garnishDeliciousBelgianWaffleWithStrawberryList 一步步砍成 Waffle.garnish,演示四条规则如何叠加生效。适合每天在 code review 里跟命名较劲的工程师。

journal.stuffwithstuff.com · 9 min · Code · Code Review · Programming Languages
09-14

写软件的十一条原则:先数据,后代码

作者列出自己构建软件时遵循的一组原则,主线是让系统更简单:让非法状态无法表示、保证数据一致性、先设计数据再写代码、测量之后再优化。文中用一个数据库例子说明不一致的代价——必须保持 x=y 的两个布尔变量一旦拆到不同库、无法原子更新,数据就多出两种状态,toggle 函数在这些状态下没有正确答案。作者认为一致性是当下最被低估的工程原则,多数问题本质上都是数据不符合预期;他同时主张代码一致性优先于局部「正确」,学习应聚焦 concepts(关系模型、代数数据类型、borrow checker、Curry-Howard 同构)而非 React、Kubernetes 的表层细节。适合做后端与数据系统设计、正在权衡微服务拆分和 schema 取舍的工程师。

kevinmahoney.co.uk · 9 min · Database · Programming Languages · Software Engineering