Langjam Gamejam: Build a programming language then make a game with it6 months agohttps://langjamgamejam.com/Langjam Gamejam是一项为期7天的挑战,要求参与者创建一门编程语言并用该语言开发一款游戏。参赛者可自定规则并自由选择技术栈。活动鼓励创意与趣味性,并为最具创意的作品设立奖项。规则要求在7天内完成编程语言的设计实现及配套游戏的开发。允许个人或组队参与,并鼓励撰写开发文档。为撰写关于语言设计、游戏开发过程的博客文章提供额外加分。作品需通过Itch.io平台提交。
Zig Book – An open, technical and introductory book for Zig6 months agohttps://github.com/pedropark99/zig-bookPedro Duarte Faria所著《Zig语言入门:基于项目的教程》官方资源库使用Quarto出版系统和R代码编译Zig示例构建的书籍可通过Amazon和Leanpub购买PDF、电子书或实体书支持通过PayPal、Revolut或Swift直接捐赠面向初学者和经验开发者的开源技术书籍教授Zig语法、数据结构、内存分配器、测试调试等内容需要Zig编译器、R语言和Quarto进行构建两种安装策略:手动安装或使用Nix Flake创建可复现环境R脚本'dependencies.R'用于安装必要的R包使用Quarto编译书籍内容(含内部链接、引用和HTML)通过R脚本'zig_engine.R'编译执行Zig代码示例采用CC-BY 4.0知识共享署名4.0国际公共许可证
Ruby Is Not a Serious Programming Language6 months agohttps://www.wired.com/story/ruby-is-not-a-serious-programming-language/心理学中的'印刻效应'可应用于编程领域——开发者往往会对自己的第一门编程语言产生强烈情感依赖Ruby常被誉为让编程变得直观的语言,但作者因接触较晚反而看清了它的缺陷Ruby由松本行弘(Matz)于1995年创建,其类英语的简洁语法显著提升了代码可读性动态类型特性使Ruby只能在运行时暴露错误,而静态类型语言在编译阶段就能预防同类问题Ruby的性能劣势在Twitter从Ruby转向Scala的案例中暴露无遗,后者显著提升了系统扩展性与Python和JavaScript等语言相比,Ruby缺乏不可替代的垂直领域优势Ruby至今仍保持存在感主要归功于Ruby on Rails框架——这一2000年代初的颠覆性技术Ruby on Rails曾为Airbnb、GitHub和Twitter等初创公司提供革命性的全栈开发解决方案作者与同行看衰Ruby的发展前景,调查显示其热度持续下滑,如今主要依靠怀旧情结和遗留系统维持
Beej's Guide to Learning Computer Science6 months agohttps://beej.us/guide/bglcs/html/split/Brian 'Beej Jorgensen' Hall所著的《Beej计算机科学学习指南》是学习计算机科学的综合性资源。该指南涵盖多个主题,包括成长型思维、问题解决、问题分解、工具选择、学习技巧、调试、新语言学习以及人工智能的应用。它强调了成长型思维、韧性和问题解决能力在计算机科学中的重要性。指南提供了关于调试、学习新编程语言以及有效利用AI辅助学习和工作的实用建议。每章结尾还附有反思环节以巩固学习效果。
Dark Corners of Unicode (2015)6 months agohttps://eev.ee/blog/2015/09/12/dark-corners-of-unicode/Unicode是一个旨在表示所有人类语言的复杂系统,但即便是程序员也常对其存在误解。Unicode包含ASCII之外的字符(如表情符号),并使用码位(codepoints)来表示它们。UTF-8是一种能表示所有Unicode码位的编码,而ASCII仅限128个字符。Unicode字符可由多个码位组成,例如组合变音符号或表情符号序列。由于语言特定规则和规范化问题,Unicode文本的排序和比较并非易事。Unicode规范化可以分解字符,但并不能解决所有问题,尤其是非拉丁文字。终端和字体对Unicode字符(尤其是表情符号和组合字符)的渲染可能不一致。JavaScript等语言在处理Unicode时存在局限,特别是辅助平面字符(astral plane)。MySQL的'utf8'编码每字符仅限3字节,导致辅助平面字符出现问题。表情符号并非正式的Unicode区块,而是分散在不同区块中并由使用习惯定义。Unicode包含许多有趣而冷门的字符,从控制符图形到炼金术符号应有尽有。
Nimony (eventually Nim 3.0) Design Principles6 months agohttps://nim-lang.org/araq/nimony.htmlNimony是Nim语言变体的新编译器,目标成为Nim 3.0版本专注于硬实时和嵌入式系统,确保可预测的最坏执行时间(WCET)采用基于作用域的析构器及移动语义进行内存管理,简化安全性保障错误处理摒弃传统异常机制,改用对象状态或线程局部错误变量ErrorCode枚举为跨库和跨系统错误处理提供统一方案独树一帜的内存耗尽(OOM)处理机制,支持自定义处理器和优雅的错误传播泛型经过完整类型检查,增强IDE支持并实现早期错误检测通过统一的`spawn`结构整合并发与并行,简化异步和多线程编程并行for循环提供结构化并行,无需流程变量通过编译器插件增强元编程能力,支持深度代码转换模块插件实现整模块级转换,在多场景下可替代宏正式版计划2025年秋季发布,目前正在积极开发中
Advent of Compiler Optimisations 20256 months agohttps://xania.org/202511/advent-of-compiler-optimisation宣布推出《编译器优化降临历2025》(AoCO2025),这是从12月1日至25日每日更新的博客与视频系列。每天将讲解一个C或C++编译器优化技术,涵盖适用场景、汇编解析及局限性等细节。内容既包含底层架构专属技巧(主要侧重x86-64架构,部分涉及ARM),也涵盖高级优化策略。可通过AoCO2025博客标签、YouTube订阅或播放列表追踪更新。该项目凝聚了一年研究成果,旨在分享编译器技术洞见与开发热情。
Paged Out6 months agohttps://pagedout.institute《Paged Out!》是一本免费的实验性技术杂志,聚焦编程、黑客技术、信息安全、复古与现代计算机、电子设备及演示场景。该杂志由社区驱动且非营利,所有期刊均可免费下载、分享和印刷。纸质版可在各类活动及按需印刷书店获取。近期期刊包括第7期(2025年10月)、第6期(2025年3月)和第5期(2024年11月),每期均提供下载量与印刷量统计。早期期刊(第4期至第1期)同样开放获取,部分标注为'测试版'并持续优化中。杂志鼓励读者投稿,每篇文章仅限一页篇幅。官网提供下期进度追踪功能,读者可订阅邮件列表获取新刊通知。
A Look at Rust from 20126 months agohttps://purplesyringa.moe/blog/a-look-at-rust-from-2012/文章探讨了Rust早期版本(0.5-0.6)并将其与现代Rust进行对比安装过程复杂,需要从源代码构建或在Windows上手动设置,与如今的rustup工具形成鲜明对比早期语法使用'io::println'进行打印,尚未出现'println!'宏,格式化字符串则使用'fmt!'语法差异包括使用'uint'/'int'而非如今的'usize'/'isize',且循环控制使用'loop'而非'continue'枚举变体未限定作用域(类似C语言风格),并可模拟元组结构体内存模型包含'@T'(GC堆)、'~T'(独占堆)和'&T'(引用),比现行模型复杂许多早期Rust采用绿色线程、基于任务的并发机制,并将panic称为'exceptions'借用检查机制较为原始,仅支持词法生命周期,尚未引入非词法生命周期(NLL)结构体可变字段需标记'mut',引用类型包含'&const'、'&mut'和'&'三种形式文章最后赞赏了Rust逐步演变成更用户友好语言的发展历程
Show HN: Fresh – A new terminal editor built in Rust5 months agohttps://sinelaw.github.io/fresh/安装方式:可通过npm(推荐)、npx(快速测试)、Cargo(从源码安装)或GitHub预构建二进制文件安装。发现与易用性:具备原生用户界面、完整菜单系统、命令面板,可无缝切换图形编辑器。现代化扩展能力:插件采用TypeScript编写,在沙盒化Deno环境中安全运行,可访问现代JavaScript生态。零延迟性能:专为速度优化,实现近乎零延迟体验,可流畅处理数GB大文件。完整功能体系:包含文件管理、编辑工具、搜索替换、导航功能、视图布局、LSP支持、生产力工具及插件扩展能力。
Formally verifying Advent of Code using Dijkstra's program construction5 months agohttps://haripm.com/blog/aoc-day-3-without-thinking/文章讨论了如何运用Edsger W. Dijkstra提出的结构化编程原则解决Advent of Code第3天的挑战阐释了类似函数式编程概念的量化表示法在数组操作和归约中的应用明确定义了问题的后置条件——寻找数组中两节电池串联时的最大输出电压通过建立定理和定义构建领域模型以支撑程序构造程序循环设计包含不变量、变体和守卫条件以确保正确性解决方案从守卫命令语言(GCL)转换为函数式编程语言Gleam由于复杂度问题,第二部分采用更直接的解决方案作者回顾整个过程,强调了基于证明的严谨程序构造方法特别致谢Henry McLoughlin老师充满热情地教授《程序构造》课程
Programming peaked5 months agohttps://functional.computer/blog/programming-peaked作者回顾了2010至2025年间编程的演变,指出现代工具和实践带来的低效与复杂性。2025年的编程场景包括自动纠错机器生成JavaScript代码、VS Code等臃肿的IDE,以及繁琐的拉取请求和容器化流程。作者将之与2010年更简单高效的工作流对比,当时Eclipse和Maven等工具能提供可靠支持,部署过程更快更直接。NPM、React和Electron的兴起被视为转折点,导致人们不顾JavaScript的缺陷而将其滥用于所有场景。作者表达了对过去的怀念,渴望回归'为工作选择合适工具'的理念,而非依赖万能解决方案。
What Is "Open Recursion"?6 months agohttps://journal.stuffwithstuff.com/2013/08/26/what-is-open-recursion/开放递归是Pierce在《类型与编程语言》中提出的术语,用于描述从具有函数和记录的基础语言构建面向对象语言时所需的扩展机制。此处的递归特指方法定义的相互递归,使得方法间可以无视声明顺序相互可见和调用。开放特性指基类方法能够访问派生对象中被重写的方法,这是通过显式传递接收者对象实现的。示例展示了创建计数器对象时方法间的相互调用(递归),以及通过重写方法实现调用日志功能(开放)。与基础语言的关键差异包括方法的相互递归特性及对派生对象的访问能力,这些特性支持了方法重写等面向对象特征。
Synadia and TigerBeetle Pledge $512,000 to the Zig Software Foundation5 months agohttps://tigerbeetle.com/blog/2025-10-25-synadia-and-tigerbeetle-pledge-512k-to-t...Synadia和TigerBeetle承诺在两年内向Zig软件基金会捐赠51.2万美元。TigerBeetle选择Zig而非C和Rust,因其简洁性、显式内存管理和安全特性。TigerBeetle的设计理念与Zig原则一致,如无隐藏内存分配和无预处理器。Zig默认启用算术检查与边界检查,在无显著性能开销下增强了安全性。Zig的简洁性与高质量使TigerBeetle能快速招聘到可迅速掌握该语言的程序员。TigerBeetle通过模糊测试和Jepsen审计等严格测试,验证了Zig在生产环境的可靠性。Zig独立的编译器后端与工具链投资为其长期性能提升奠定了基础。Andrew Kelley的领导力及Zig软件基金会的独立性是Zig成功的关键因素。Synadia与TigerBeetle联合捐赠旨在支持Zig发展,避免企业影响力干预。
Building a Copying GC for the Plush Programming Language6 months agohttps://pointersgonewild.com/2025-11-29-building-a-copying-gc-for-the-plush-prog...Plush是一种受Lox/JavaScript启发的动态类型编程语言,专为音频与图形编程设计。该语言采用基于参与者的并行模型,通过避免锁和内存安全问题简化多线程编程。Plush虚拟机内置垃圾回收器,可管理参与者间传递消息的内存,确保失效对象被回收。虚拟机自动静默拷贝参与者间的消息,程序员无需手动冻结或深拷贝数据。每个参与者配备两个分配器:私有分配器实现无锁内存分配,邮箱分配器专用于接收消息。采用碰撞分配器与复制式垃圾回收机制,确保内存分配既快速又简单。通过与友人协作攻克了垃圾回收器实现的拖延问题,两周内完成90%开发进度。在M1芯片MacBook Air上运行的3D动画演示达到60帧/秒,展现了Plush的性能实力。待完善的垃圾回收功能包括:满消息分配器处理及大规模回收的性能优化。现招募贡献者协助性能调优,并共同开发图形/音频应用等演示程序。
Skin-Shedding Code (2024)5 months agohttps://registerspill.thorstenball.com/p/skin-shedding-code“Shredding”指通过拆解代码并以更好的方式重构来重写代码,类似于重构但更为激进。在Zed公司,shredding是常见实践——直接删除整个代码段并根据新需求彻底重建。Zed团队通过为期数周的shred彻底重写了UI框架GPUI,最终提交了一个庞大的拉取请求。Shredding需要开发者具备判断何时该推倒重建而非小修小补的自信、经验和自我认知。Zed能高效运用shredding可能源于三点:深厚的领域知识、顶尖的程序员团队、谨慎且目标明确的拆解。定期shred有助于维护健康代码库:既能消除累积的低效设计,又能为理想重构创造机会。Jonathan Blow将这种方法称为「大锤编程」,并强调深厚领域知识是其关键前提。
AoCO 2025: Division5 months agohttps://xania.org/202512/06-dividing-to-conquer计算机处理整数运算的速度各不相同:加法最快,乘法较慢,除法最慢。编译器通过右移操作优化对2的幂次方的除法运算,但对于有符号整数必须处理舍入方式的差异。使用无符号整数可以简化编译器优化,避免为负数舍入生成额外指令。编译器行为受语言规范约束,有时会产生意料之外但正确的优化结果。Compiler Explorer等工具能帮助开发者理解编译器优化机制,使代码意图与优化策略保持一致。
SedaiBasic2: A modern reimplementation of Commodore BASIC v75 months agohttps://github.com/camauri/SedaiBasic2SedaiBasic2是对Commodore BASIC v7的现代重实现,支持Tiny BASIC子集及多维数组、整型变量和基于寄存器的高性能字节码虚拟机。Windows用户可能需要调整PowerShell执行策略来运行安装脚本,可选择临时绕过或永久修改策略。安装选项包括下载安装Free Pascal编译器(FPC)、编译SedaiBasic2或执行特定任务如清理构建目录。Linux支持正在开发中,为偏好手动操作的用户提供了安装与编译指南。基准测试套件使用The Computer Language Benchmarks Game的程序测量解释器性能,提供多种运行选项和统计追踪功能。基准测试结果会保存用于累积分析,具备中断处理和输出定制功能。SedaiBasic2采用GNU通用公共许可证v3授权,商业许可咨询请直接联系作者。
The programmers who live in Flatland6 months agohttps://blog.redplanetlabs.com/2025/11/24/the-programmers-who-live-in-flatland/《平面国》是对程序员有限视角的隐喻,正如其主角难以理解更高维度一样保罗·格雷厄姆在《击败平均水平》中强调,Lisp的强大之处(尤其是宏)是其关键竞争优势尽管Clojure拥有宏和状态管理等优势,但由于误解和生态顾虑,它仍未得到充分利用'布卢伯悖论'解释了为何程序员可能无法认识到Lisp/Clojure等更强大语言的优势编程维度:大多数抽象只是自动化任务,但少数(如宏)能扩展编程代数,创造全新维度学习新的编程维度需要好奇心,并克服对陌生概念的认知偏见《形式法则》中的'再进入'概念与宏类似,通过自指抽象为形式系统开启新维度
Semantic Compression (2014)5 months agohttps://caseymuratori.com/blog_0015编程涉及确定处理器需要执行的任务,并通过代码高效地表达这些指令。编程效率意味着优化开发流程,以最小化代码整个生命周期中的人力投入。效率的全局观包括编码、调试、修改、适配以及代码集成等环节。最高效的编程方式是像字典压缩器那样处理代码,通过消除重复使其在语义层面更精简。避免过早复用——至少出现两处相似代码时再进行重构以实现复用性。良好压缩的代码更易阅读、维护和扩展,因为它契合问题领域的语言并最大限度减少冗余。从细节入手逐步压缩成架构,能规避预先设计架构带来的潜在陷阱。