Goose 语言打赌:系统代码不需要堆
这里有个观点,大概会让至少两个语言社区不太高兴:借用检查器其实是一段弯路。不是错误——Rust...
深入解析编程语言:新特性、性能表现与生态系统发展。
17 篇文章这里有个观点,大概会让至少两个语言社区不太高兴:借用检查器其实是一段弯路。不是错误——Rust...
Rust的类型系统做出了一个硬性承诺:只要你的安全代码能通过编译,就不会出现悬垂指针、数据竞争或释放后使用的问题。所以当一个GitHub...
有个不起眼但很实用的小技巧:如果你只关心LLM输出的第一个token,就可以把它当成选择题来问,一次前向传播就能拿到答案。约束解码——把词表里除了你允许的少数几个token之外全部屏蔽掉——能让生成式模型看起来很像一个分类器。不用解析JSON,不用重试循环,也不用为了输出十一个字符跑十一步自回归。一次前向、一次soft...
1989 年,Rob Pike 写下了五条编程法则。他后来还参与创造了 Go、UTF-8 和 Plan 9。这几条法则简短到能写在一张索引卡上,却深刻到让编程界争论了 37 年。大多数开发者至少在博客或技术大会上见过其中一些。但真正内化的人并不多,这很可惜,因为它们能省下大量白费的力气。
编程语言理论圈子里时不时会冒出一个说法:‘足够详细的规格说明,与代码没有区别。’这个观点很有挑衅意味,暗示着‘描述程序应该做什么’和‘让程序真正去做’之间的界线,比我们想象的要薄得多。如果你的规格精确到足以消除所有歧义,那你其实已经把程序写出来了。
SQLite 无处不在。它在你的手机里、浏览器里、智能电视里,说不定还在你的汽车里。它解决了一个根本问题:让应用无需运行独立服务器就能拥有完整的 SQL 数据库。它做得非常出色,以至于「嵌入式数据库」几乎成了 SQLite 的代名词。但 SQLite...
Ryan Dahl 离开 Node.js 后,项目虽然挺了过来,但经历了多年的治理结构调整、一次分叉(io.js)以及后来的重新合并,才终于稳定下来。Guido van Rossum 辞去 Python 的 BDFL(“终身仁慈独裁者”)一职后,社区花了数月讨论治理模式,最终才确定设立指导委员会。Deno...
Ruby 一直被认为很慢。Python 也是。JavaScript 也曾如此,直到 V8 把它提速到足以承担服务端负载。动态语言如何变快,背后的故事就是 JIT(Just-In-Time,即时编译)的故事,也是实践计算机科学中最迷人的领域之一。最新一章是:Ruby 的 ZJIT...
Java 是编程语言界的“小透明”,总是得不到应有的尊重。问问三十岁以下的开发者提到 Java 会想到什么,他们脑海里浮现的大概是 XML 配置文件、企业级 Bean 和 AbstractSingletonProxyFactoryBean。这门语言的口碑停留在 2008 年,那时 Java 6 是最新版本,写...
Stack Overflow上有一个非常有名的回答,浏览量超过300万次。问题是:为什么处理排序后的数组比处理无序数组更快?代码完全相同,都是一个带if语句的循环,唯一的区别是输入数组是否有序。有序版本快了6倍。背后的原因就是CPU分支预测,它揭示了现代计算中影响最深远的性能因素之一。
我们都遇到过这种情况。你需要转换一个视频,于是去搜索,找到一个 Stack Overflow 上的回答,命令看起来像是有人胡乱敲了一通键盘:ffmpeg -i input.mov -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k -movflags...
每个开发者每天都在用Shell,但很少有人真正理解它在做什么。Shell看起来像一个应用程序——你输入命令,它执行——但实际上它只是Unix底层原语之上的一层薄封装,而这些原语是操作系统运行的基石。从零构建一个Shell是理解进程、文件描述符、管道和信号的最佳方式——这些概念支撑着从Web服务器到Docker容器的一切...
每隔几年,就会有人写一篇“Lisp 已死”的文章;而每隔几年,又会有人指出,你最喜欢的现代语言里,有一半特性其实都是从 Lisp 那儿“借”来的。垃圾回收、一等函数、闭包、动态类型、同像性、REPL 驱动开发、宏——这些概念大多在今天多数开发者出生之前,就已在 Lisp 里被发明或推广。Lisp...
1969年,Ken Thompson 和 Dennis Ritchie 在贝尔实验室的办公室里做出了一系列设计决策,这些决策的寿命比那个时代几乎所有其他技术都长。他们写出 Unix 时用的 PDP-7...
Python 从诞生起就一直被说“太慢”。Python 社区的标准回应是“热点循环用 C 扩展来写”,这实际上一直是在承认:语言默认的执行模型有根本性的局限。CPython 逐条解释执行字节码,每条指令都通过 switch 语句分发。这种设计简单、可移植、好调试,但在计算密集型任务上,它大约比编译后的 C 代码慢...
每次你的程序调用 malloc(),都得决定把虚拟内存中的哪一块交出去。这个决定对小程序来说微不足道,但到了大规模场景就成了棘手的工程问题。糟糕的分配器会造成内存碎片、浪费 RAM、在线程之间制造锁竞争,还会在操作系统回收页面时引发延迟尖峰。好的分配器则能避免这些问题。jemalloc 就是一个好的分配器,而...
Flask 花了八年才发布 1.0 版本。SQLite 自 2000 年起就一直在积极开发,至今仍在持续改进。Linux 内核已有三十多年历史,可以说是越老越好。与此同时,一家获得风投支持的普通创业公司,通常被期望在 18 个月内拿出增长数据,否则就得解释原因。