The Creative Tension Between Developer and Language9 months agohttps://krishna.github.io/posts/creative-tension-between-developer-and-language/编程语言会影响编码风格和思维方式,就像艺术媒介会影响艺术表达一样。Swift和Rust通过可选类型和借用检查器等特性鼓励安全性与健壮性,但这可能对脚本或原型开发造成时间消耗。根据代码用途和生命周期需要采用不同编码方式,例如快速脚本与长期系统就有明显差异。编程的「目的性」需要思考代码用途、设定时间限制,有时也需要采用更宽松的脚本思维。优秀的程序员能驾驭任何语言,根据需求决定何时遵循或突破语言的设计倾向。
Typed languages are better suited for vibecoding9 months agohttps://solmaz.io/typed-languages-are-better-suited-for-vibecoding像TypeScript、Rust和Go这样的类型化语言因其安全性保障,正逐渐成为新项目首选,而非Python。Claude Code等AI工具通过确保编译时安全性,提升了类型化语言的生产力,使重构更快速安全。Python在快速原型开发中的优势如今已被AI工具追平,降低了其在生产部署中的必要性。作者预测尽管个人对Python怀有感情,但其在生产环境中的采用率将会下降。
What is Debounce and how does it work9 months agohttps://developer.mozilla.org/en-US/docs/Glossary/Debounce防抖(Debouncing)会丢弃间隔过近的连续操作,将其合并为单次调用。防抖与节流(throttling)不同:节流限制连续操作的频率,而防抖会等待调用停止后再进行合并。典型应用场景是处理用户输入(如键盘键入),通过仅在停顿后处理输入来避免界面卡顿。防抖包含前缘(leading)与后缘(trailing)机制,由指定时间间隔(如10毫秒)决定合并操作的执行时机。具体实现可选择在前缘、后缘或两者触发,并通过时间约束防止快速连续调用。
The history of the Schwartzian Transform (2016)10 months agohttps://www.perl.com/article/the-history-of-the-schwartzian-transform/施瓦茨变换(Schwartzian Transform)是一种缓存键排序算法,由Randal Schwartz于1994年在Usenet帖子中首次公开分享。Randal的Perl代码展示了装饰-排序-去装饰技术,该技术灵感来源于LISP语言。这一技术最初没有名称,后来被Perl社区命名为'施瓦茨变换'。著名Perl布道师Tom Christiansen对该变换持矛盾态度,担心它可能会吓退Perl新手。施瓦茨变换声名鹊起,被收录在《Effective Perl Programming》和《Perl Cookbook》等书籍中。该变换衍生出多种变体,例如使用哈希缓存排序键的Orcish Maneuver技巧。施瓦茨变换影响了包括Ruby和Python在内的其他编程语言。
No Comment9 months agohttps://prog21.dadgum.com/57.html作者强调技术应服务于实现创意,而非为技术而技术他禁止网站评论功能,以规避网络技术讨论中常见的负面情绪基于程序员经历,作者分享个人教训:批评代码前必须充分理解上下文他批判工程师群体中常见的条件反射式挑错行为——缺乏深度理解就妄下论断Flickr被赞为积极的网络社区典范,与多数编程论坛形成鲜明对比作者詹姆斯·霍格曾任程序员和游戏设计师,认为组织能力比技术实力更重要
The Q Programming Language9 months agohttps://git.urbach.dev/cli/qQ是一种极简、无依赖的编程语言和编译器,支持x86-64和arm64架构。其特性包括高性能、快速编译(简单程序<1毫秒)、极小的可执行文件('Hello World'约600字节)、多平台支持(Linux/Mac/Windows)以及零依赖。可通过源码编译或符号链接安装。使用方式包括运行示例程序、为不同架构和操作系统构建可执行文件,以及启用详细输出模式。贡献者可查阅源码结构概览,了解arm/asm/ast/cli等各个功能模块。常见问题解答涵盖:'Hello World'二进制文件大小、支持平台、汇编代码质量、安全特性、脚本支持、测试套件、性能基准、IRC频道、发音以及许可证等话题。
Gleam v1.12.0 Released9 months agohttps://gleam.run/news/no-more-dependency-management-headaches/Gleam v1.12.0 版本引入了更清晰的依赖冲突错误提示信息。新增了对依赖项重大版本更新的通知功能。增强了 `echo` 调试功能,支持自定义消息和优化显示效果。针对 Erlang 和 JavaScript 编译目标进行了代码体积缩减优化。Gleam 格式化工具现提供更灵活的列表格式选项。新增 JavaScript 文档的 JSDoc 支持。增加了对不可达导入和冗余比较的警告提示。针对 Python 和 JavaScript 语法错误提供了更友好的报错信息。改进了函数调用错误中的参数标签提示。位数组功能增强,支持字节序指定和计算操作。启用 Erlang 本地函数内联以提升性能。支持 monorepo 项目结构,可自定义 git 标签前缀。JavaScript FFI 新增对 CommonJS 模块的支持。语言服务器新增代码块删除等操作功能。呼吁赞助以支持 Gleam 项目的持续开发。
Python performance myths and fairy tales9 months agohttps://lwn.net/SubscriberLink/1031707/54efcf7b35fa8da0/Antonio Cuni探讨了关于Python性能的常见误解,强调Python的动态特性本质上限制了其运行速度。Python的性能问题源于其动态特性,这些特性虽提供了灵活性,却使优化工作变得复杂。内存管理和缓存不友好被确认为Python性能的根本瓶颈,即时编译器也无法彻底解决这些问题。Cuni介绍了SPy(静态Python)项目,该项目旨在通过调整语言语义而不破坏兼容性来提升Python性能。演讲强调了Python的动态性、速度与实现简洁性之间的权衡,提出局部优化可能是未来的可行路径。
Out-Fibbing CPython with the Plush Interpreter9 months agohttps://pointersgonewild.com/2025-08-06-out-fibbing-cpython-with-the-plush-inter...Plush是一种基于参与者模型的玩具编程语言,具有并行特性。作者致力于优化Plush解释器以提升其性能表现。递归斐波那契数列(fib)基准测试被用来衡量性能指标。Plush初始运行fib(38)耗时9.10秒,比Python的5.70秒更慢。优化措施包括将push和call指令合并为call_direct,使时间降至8.44秒。通过perf工具分析,作者发现函数调用中哈希查找的开销较大。引入call_pc指令配合自修改代码技术后,时间缩减至5.13秒。新增add_i64指令优化整数运算,进一步将时间降低到4.57秒。这些优化对并行光线追踪程序无显著影响,揭示了微基准测试的局限性。
Rust 1.89.09 months agohttps://blog.rust-lang.org/2025/08/07/Rust-1.89.0/Rust 1.89.0 版本已发布,包含多项语言改进和更新新增支持使用 '_' 显式推断 const 泛型的参数引入不匹配生命周期语法检查以提升代码清晰度新增更多 x86 目标特性支持,包括 sha512、sm3、sm4、kl 和 widekl跨平台编译的文档测试现可验证,并支持忽略特定目标i128 和 u128 类型现可在 extern "C" 函数中使用且不会触发 improper_ctypes_definitions 检查因 macOS 变更,x86_64-apple-darwin 降级为附带主机工具的 Tier 2 支持级别wasm32-unknown-unknown 目标现支持符合标准的 C ABI 外部函数调用规范新增 Tier-3 支持目标:loongarch32-unknown-none 和 loongarch32-unknown-none-softfloat多项 API 完成稳定化,包括 NonZero<char>、文件锁定方法等
Immich – Cursed Knowledge9 months agohttps://immich.app/cursed-knowledge/Zitadel Actions因其JS引擎不支持正则表达式命名捕获组而被诟病。Microsoft Entra因OpenID发现文档未包含PKCE而备受批评。EXIF元数据中的图像尺寸可能与实际尺寸不符,导致问题。YAML的空格处理方式反直觉且令人头疼。Windows中的隐藏文件无法用'w'标志打开,造成困惑。当Git将LF转换为CRLF时,Bash脚本中的回车符会导致脚本崩溃。Cloudflare Workers中的Fetch默认使用http,引发重定向循环。某些手机在应用缺少定位权限时会删除照片中的GPS数据。PostgreSQL的NOTIFY功能因事务机制每5秒写入一次WAL日志。npm脚本会不必要地向注册表发起HTTP请求,因此不适合健康检查。某JavaScript用户为『向后兼容』添加50个额外包,导致项目臃肿。Bcrypt会忽略密码中前72字节之后的字符。JavaScript的Date对象索引不一致(年/日从1开始,月从0开始)。Node.js v20.8之前版本混用ESM和CommonJS导入可能导致段错误。PostgreSQL存在65,535个参数限制,导致批量插入失败。剪贴板API等Web功能仅在安全上下文(https/localhost)下有效。TypeORM的remove方法会通过删除id属性来改变输入对象。
Partially Matching Zig Enums9 months agohttps://matklad.github.io/2025/08/08/partially-matching-zig-enums.html讨论在Zig枚举中处理多个变体的通用代码指出为通用代码场景重构枚举时的笨拙之处介绍针对Zig中AB问题的运行时panic解决方案提出使用`inline .a, .b`和`comptime unreachable`的编译器检查方案解释`comptime unreachable`如何确保不可达分支的编译期失败演示添加错误代码时会按预期导致编译失败
A subtle bug with Go's errgroup9 months agohttps://gaultier.github.io/blog/subtle_bug_with_go_errgroup.html作者在开发Kratos时遇到一个bug,该问题在代码合并前被测试用例捕获。这个问题被精简成一个100行的独立密码验证程序。密码以哈希值形式存储防止暴力破解,并通过errgroup实现并发任务以优化性能。发现一个上下文过早取消的bug,导致密码泄露检查未能执行。提出两种修复方案:在errgroup中运行HTTP检查,或避免上下文变量遮蔽。作者强调必须仔细阅读API文档,理解技术细节中的注意事项。该博文已开源,欢迎读者贡献代码或给予支持。
Zig's Lovely Syntax9 months agohttps://matklad.github.io/2025/08/09/zigs-lovely-syntax.htmlZig的语法因其简洁清晰而备受赞誉,尤其是与Rust相比时。Zig的整数字面量只有`comptime_int`一种类型,且需要显式类型转换。Zig的字符串字面量通过将每行视为独立标记,避免了其他语言中原始字符串的常见问题。Zig的记录字面量采用`.{}`语法,使字段写入更易检索。Zig使用前缀类型和后缀解引用,提升了代码可读性。Zig的标识符可通过`@""`语法包含空格,避免关键字冲突。Zig的函数声明省略了Rust中的箭头符号(`->`),简化了语法。Zig用`const`和`var`声明变量,其中`const`更常用。Zig的布尔运算符拼写为`and`和`or`,强调其控制流特性。Zig要求显式`return`语句,避免了Rust中分号导致的歧义。Zig的`if`语句允许省略大括号,编译器会捕获格式错误。Zig的循环支持`else`子句且本身是表达式,提升了可读性。Zig禁止变量遮蔽,并通过显式导入简化名称解析。Zig将所有内容视为表达式,统一了值、类型和模式的语法。Zig的泛型类型像函数一样调用(如`ArrayList(u32)`),且无类型推断。Zig的“结果位置语义”支持基于上下文的类型转换,简化代码。Zig的内置函数采用`@`语法(如`@divExact`),提供清晰的命名操作。Zig通过`@import`函数导入文件,语法明确简洁。Zig的语法设计追求清晰性、易读性和极简主义,既借鉴他山之玉,也坚持创新。
PHP compile time generics: yay or nay?9 months agohttps://thephp.foundation/blog/2025/08/05/compile-generics/PHP中的泛型功能备受期待但由于PHP是解释型语言而难以实现PHP基金会开发团队建议在接口和抽象类上实现泛型,以20%的精力获得80%的收益编译时泛型将允许接口和抽象类声明所需类型,由实现类具体指定运行时泛型(如`new Exporter<Foo>()`)仍不可行,但编译时泛型能规避大多数问题Arnaud Le Blanc和Gina Banyard的实验探索了泛型和关联类型,主要聚焦编译时解决方案关联类型允许接口指定继承者必须定义类型,提供了比完整泛型更简单的替代方案手动单态化可实现编译时类型强制,由类为泛型接口指定具体类型潜在扩展包括允许抽象类成为泛型,以及支持方法签名中的类型声明泛型的常见用途(如类型化集合)可通过`Sequence<T>`、`Set<T>`和`Dict<K, V>`等接口实现未来可能支持泛型类型的变体注解(`in`和`out`),但这些功能复杂可能后期实现特性(trait)和函数的泛型存在额外挑战,初期版本不太可能支持运行时泛型、联合类型与泛型的结合、类型推断等难题尚未解决且可能永远不可行PHP基金会正征求社区意见:仅支持编译时泛型是否值得继续开发
Why tail-recursive functions are loops9 months agohttps://kmicinski.com/functional-programming/2025/08/01/loops/递归函数和循环在计算上是等价的。由于栈帧压入操作,递归函数比循环慢,这会影响内存性能。尾递归函数通过确保每次递归调用都是尾调用来优化递归,仅使用常量栈空间。尾递归函数通过使用累加器变量可以达到与循环相同的效率。延续传递风格(CPS)可以将任何程序转换为仅使用尾调用,从而消除栈的消耗。
Weathering Software Winter9 months agohttps://100r.co/site/weathering_software_winter.htmlDevine探讨了在太阳能帆船上生活时使用现代软件和技术所面临的挑战,重点指出了对云服务、数字版权管理(DRM)和订阅制软件的依赖问题。文章深入探讨了数据保存的概念以及确保数字内容长期可访问性的困难,并援引了BBC《末日审判书》项目等历史案例。Devine分享了他们学习虚拟机(VM)和更简单计算系统的历程,以此作为创建更具韧性且个性化的技术解决方案的途径。叙述中包含了用Smalltalk、Lisp、Forth和Brainfuck等多种编程语言及系统进行的实验,旨在寻找一个最小化、可理解且可持续的计算基础。一个关键认知是对简洁性的重视,以及利用更古老、复杂度较低的系统来创建持久且可审查软件的潜力,这与现代技术栈的脆弱性和不透明性形成鲜明对比。文章最后提出了受永续农业启发的'永久计算'理念,倡导技术解决方案的多样性,以构建抵御过时和中心化风险的韧性。
You're Wrong About Dates – and Your Code Is Lying to You9 months agohttps://metaduck.com/youre-wrong-about-dates/日期库传统上将日期视为精确时刻,这与人类对时间的感知并不相符。Decipad引入了具有内置粒度的日期区间概念,使时间表示更加直观。这种方法支持自然的包含关系检查(例如:年份包含月份,月份包含日期)。时间区间使得持续时间计算变得直接(例如:两个日期之间的差值是一等值)。实际应用包括项目管理、财务和活动规划,无需手动转换。基于区间的方法消除了时区困扰和任意时间戳选择等常见问题。对比表格突显了区间方法相较于传统日期处理方式的优势。
The Best Line Length9 months agohttps://blog.glyph.im/2025/08/the-best-line-length.html编码的最佳最大行长度建议为88个字符,在可读性和实用性之间取得平衡。历史背景显示,80字符限制源于电传打字机和穿孔卡片等硬件限制,并非随意选择。人类生理学支持较短行长度以提升阅读舒适度,因为眼球通过快速跳视('扫视运动')移动。现代宽屏显示器未充分利用文本区域,多栏布局能更高效利用屏幕空间进行阅读和编码。代码不同于散文:缩进会减少有效行长度,因此90字符限制对可读代码更实用。代码软换行理论上理想,但因差异工具等集成问题而缺乏实践性。行长度争论具有复杂性,但88字符作为标准既带有幽默感又兼具实际意义。
A Spellchecker Used to Be a Major Feat of Software Engineering9 months agohttps://prog21.dadgum.com/29.html1984年,为MS-DOS系统编写拼写检查器需要极高的内存效率,因为系统资源极其有限(仅有256K内存)。UNIX系统的字典文件过大(2.4MB),无法载入内存,迫使程序员开发创新的压缩技术或基于磁盘的解决方案。当时的程序员开发了先进的数据压缩和存储结构,以在严苛的内存限制下实现拼写检查功能。现代编程语言(如Python或Perl)利用内置哈希表就能轻松实现基础拼写检查器。这种对比鲜明体现了数十年来计算能力和编程便捷性取得的巨大进步。