C/C++ Embedded Files (2013)5 months agohttps://www.4rknova.com//blog/2013/01/27/cpp-embedded-files在C/C++程序中嵌入资源文件可以通过外部工具如ImageMagick或xxd实现。ImageMagick可将图像文件转换为头文件,而xxd能处理任意文件类型。使用预处理器是另一种方法,特别适用于着色器等纯ASCII文件,通过将文件内容包裹在宏块中实现。通过汇编代码块可将数据嵌入二进制文件的.rodata节,但这种方法具有平台依赖性。每种方法都有其优势和局限性,例如会增加依赖项或需要修改文件。
Odin: Moving Towards a New "core:OS"5 months agohttps://odin-lang.org/news/moving-towards-a-new-core-os/Odin语言的设计理念是实用且渐进式发展,特别注重稳定性和最小化破坏性变更。基础包`base:runtime`和`core:os`是核心库中最古老的组件,其中`core:os`由于API设计缺陷和跨平台不一致性需要重新设计。新版`core:os`(现命名为`core:os/os2`)正在开发中,采用改进后的标准,计划于2026年第一季度完成迁移。新设计的关键变更包括:为返回分配内存的过程显式指定分配器、使用`^os.File`替代原始文件句柄、以及统一跨平台API。采用`^os.File`的核心理由包括:更易实现行为重写/拦截、优化文件缓冲机制。显式分配器设计明确了用户级与操作系统级内存分配的界限,内部分配器专用于操作系统级操作。具体变更示例包括:采用`os.Error`的新错误处理机制、移除操作系统专属过程、改进文件处理逻辑等。
NMH BASIC5 months agohttps://t3x.org/nmhbasic/index.htmlNMH BASIC是1990年代初编写的小型BASIC解释器,以其极简体积(不足5K字节)著称。内置基于无栈洪水填充算法的文字版扫雷游戏,相关技术详见于论文《无栈洪水填充自动机》。软件包还包含猜词游戏、取物游戏、横幅打印器及素数筛(首个用NMH BASIC编写的程序)。最初于1994年开发,提供BASYL-II、8086汇编和T3X/0版本以实现Unix兼容性。采用独特变量命名与数组处理机制,允许A、A0和A(0)指向同一内存地址。内存限制为12K字节,通过预分配'I/O单元'进行输入输出,无文件开关功能。字符串和行长度上限64字节,IF语句条件成立时执行该行剩余全部内容。NMH BASIC II(2024年12月版)调整运算符优先级并优化LIST格式,体积缩减1字节。3.x版本新增字符串比较运算符,支持五孔纸带兼容的博多码编码单元。提供多版本下载,包括需要32K字节TPA的CP/M兼容版本。
The Compiler Is Your Best Friend, Stop Lying to It5 months agohttps://blog.daniel-beskin.com/2025-12-22-the-compiler-is-your-best-friend-stop-...文章讨论了不对编译器撒谎的重要性,以避免运行时错误并提高代码安全性。解释了编译器的定义及其典型工作流程:解析、类型检查、优化和代码生成。不同语言有不同的编译器行为:Rust的预编译、Java的即时编译和TypeScript的转译。常见的编译器欺骗行为包括使用null、未检查异常、类型强制转换和副作用,这些可能导致运行时错误。文章建议通过使用Option类型处理null、Result类型处理异常、避免强制转换以及隔离纯函数与副作用来停止这些欺骗行为。通过诚实对待编译器,它能帮助强化不变量,使非法状态无法表示,从而提高代码安全性。使用类型包装器和联合类型可让编译器追踪更多信息,使代码重构和理解更轻松。文章最后用一个真实案例展示了对编译器撒谎(使用null)如何导致重大故障,而诚实编码本可避免该问题。
Rust errors without dependencies5 months agohttps://vincents.dev/blog/rust-errors-without-dependencies/Rust的错误处理由于组合性和缺乏社区'标准方式'而显得复杂。推荐使用anyhow、thiserror和eyre等流行库,但作者出于安全性和适应性考虑更倾向于标准库。安全性考量包括限制第三方代码以避免供应链灾难,类似NPM中出现的问题。使用标准库的适应性优势在于其普遍熟悉性和经过充分验证。Rust的错误处理不同于try-catch范式,强调返回错误码以实现组合性和安全性,尤其在嵌入式系统中。示例代码展示了unwrap的危险性和正确错误处理的重要性。作者认为当错误确定不会发生时可以使用unwrap,但开发者必须确保正确性。详细示例演示了如何编写Rust自定义错误枚举,通过上下文和位置数据改进错误信息。与NodeJS的对比突显了Rust强制立即处理错误的优势,可防止因错误输入导致的崩溃。Rust错误处理的问题包括冗长性和需要文化层面强制执行最佳实践。作者呼吁完善文档和社区标准以改进Rust错误处理生态。
I was wrong about TypeScript part 15 months agohttps://chefama.blog/blog/posts/i-was-wrong-about-typescript-1TypeScript的类型系统很好但需要正确配置TypeScript缺乏具体的错误返回类型,导致错误处理冗长且不清晰TypeScript中的'any'类型通过允许未经检查的类型转换破坏了类型安全TypeScript默认不严格,可能导致不安全实践(如使用'!!'语法)与Rust等语言不同,TypeScript的函数类型声明不会严格强制返回类型TypeScript的类型系统是结构化的且仅编译时有效,缺乏运行时类型契约强制
Mouse: Computer Programming Language5 months agohttp://mouse.davidgsimpson.com/Mouse是由Peter Grogono博士在20世纪70年代末至80年代初开发的一种小型计算机编程语言。最初专为内存有限的微型计算机系统设计,它成为创建简单解释器的经典范例。现存三种方言:Mouse-79(原始版)、Mouse-83(更新语法版)和Mouse-2002(支持浮点运算和文件I/O等扩展功能)。相关资源包括解释器源代码、示例程序以及书籍和论文的参考文献。目前有多个网站和社区专门研究Mouse编程语言。
LLMs Are Not Fun5 months agohttps://orib.dev/nofun.html开始编程是为了将精确的想法变为现实,避免模糊的人际交流带来的不确定性在指导同事的过程中找到快乐,通过分配安全环境下的挑战性项目帮助他们成长现从事软件构建咨询工作,涵盖产品方向、团队建设、系统架构和代码编写尽管个人持保留态度,仍勉强为客户项目使用大语言模型认为大语言模型既不是有趣的编程工具,也不是理想的机器队友编程的乐趣在于深入理解问题及其系统性影响享受管理工作的方式是见证同事学习、超越和成长,实现师徒共赢认为大语言模型削弱了编程和管理的双重乐趣将用大语言模型编程比作雇人解谜,缺乏个人满足感认为管理大语言模型令人沮丧,无法带来个人成长或有意义的互动
The Future of Software Development Is Software Developers5 months agohttps://codemanship.wordpress.com/2025/11/25/the-future-of-software-development-...作者拥有43年计算机编程经验,见证过多次被预言将终结程序员需求的技术浪潮。从所见即所得编辑器、无代码平台到如今的大语言模型(LLMs),每种技术都被鼓吹为编程的终结者,但无一成功。编程的真正挑战在于将模糊的人类思维转化为精确的计算逻辑,这一核心难题不会因工具更迭而消失。Visual Basic等传统技术和编译器确实提升了效率,但LLMs反而常拖慢团队进度,且生成代码可靠性更低。自然语言天生具有模糊性,因此纯靠自然语言提示词完成编程的可能性微乎其微。熟练程序员供不应求的现状持续存在,当前就业市场波动主要源于过度招聘等经济因素,而非AI影响。AI生成代码常需人工修正,因LLMs缺乏真正的理解与推理能力。作者对超大规模LLMs的长期可行性持怀疑态度,因其高昂成本与固有局限。未来软件开发或由AI工具承担原型设计等辅助工作,但关键环节仍需人类开发者把控。建议企业当下投资培养优秀开发者,为即将显现的AI局限性做好准备。
Parsing Advances5 months agohttps://matklad.github.io/2025/12/28/parsing-advances.html作者在圣诞假期编写了一个玩具解析器,灵感来自《弹性LL解析教程》重点在于生成语法树和诊断信息,而非在首个错误时就放弃解析陷阱:由于弹性解析特性可能导致无限循环/递归(未消耗词法单元)示例:解析函数参数列表时,若表达式未消耗词法单元就会陷入循环传统解决方案:采用'燃料'机制,并在心智中映射词法单元消耗函数新解决方案:通过断言解析进度,将心智映射显式化到代码中优势:能立即报错非推进式解析,并显式追踪词法单元消耗函数引入了基础解析器API来实现该方案提供了存在缺陷的函数示例来演示初始问题
You Need to Ditch VS Code5 months agohttps://jrswab.com/blog/ditch-vs-codeVS Code的便捷功能可能会限制对基础编程操作的深入理解。基于终端的开发迫使你学习Git、文件操作、调试以及在没有自动补全的情况下编写代码。深入理解工具能使程序员在各种环境中更具能力和灵活性。现实场景(如服务器热修复或远程调试)需要终端熟练度而非IDE知识。放弃VS Code通过不适和学习能带来更好的问题解决能力、灵活性和效率。关键在于逐步转向使用终端处理Git、文本编辑和调试,以构建可迁移的技能。
Easily Dealing with Any-Dimensional Planes5 months agohttps://gpfault.net/posts/hyperplanes.html平面是n维空间中平坦的n-1维子空间。平面可通过法向量(`n`)和平面内任意点(`o`)完全确定。点`p`位于平面上的条件是`点积(p - o, n) = 0`。平面可用法向量与标量值`点积(o, n)`表示,该标量值表示沿法线方向从原点到平面的距离。建议使用模板`hyperplane = vec<ScalarT, N+1>`表示超平面。这种表示法简化了点与平面距离计算、两平面平行性判断等操作。该逻辑可推广至高维空间,同样适用于低维情况(如二维空间中的直线)。
Project ideas to appreciate the art of programming5 months agohttps://codecrafters.io/blog/programming-project-ideas73个供开发者边学边练的有趣项目创意项目范围涵盖从构建BitTorrent客户端到开发去中心化协作文本编辑器每个项目创意都包含学习目标和入门资源主题涉及网络编程、算法、数据库、游戏开发等多个领域鼓励大家分享根据这些创意实现的成果或反馈意见
I canceled my book deal5 months agohttps://austinhenley.com/blog/canceledbookdeal.html多位出版商曾联系作者邀约出书,但作者最初选择了自行出版。一位与作者背景相似的组稿编辑说服其与出版社签约。该书创意是打造经典编程项目合集,通过独立教程传授基础计算机概念。作者通过展示相关博客文章数百万浏览量,证明了市场潜力。合同谈判涉及字数、插图、版税及5000美元预付款条款。前7000册版税率为12%,超量部分提升至15%,外文翻译版税达50%。该出版社图书销量中位数仅数千册,头部作品可达数十万册。出版社指派编辑提供详细写作规范并保持高频反馈。出版社要求简化内容并增开Python入门章节,遭作者拒绝。出版社强推AI相关内容被作者坚决否决。作者因工作及个人事务延误交稿,导致与出版社关系紧张。技术编辑的反馈褒贬不一,部分人误解了书籍初衷。因创作乐趣丧失及个人事务繁重,作者决定暂停项目。出版社终止合同,所有版权回归作者。作者仍钟爱这个图书创意,未来可能自出版或开发其他项目。
Nerd: The First Programming Language Not Built for Humans5 months agohttps://www.nerd-lang.org/about如今40%的代码由大语言模型生成,且这一比例仍在持续攀升。从机器码到AI生成代码的编程语言演进,标志着代码创作主体从人类向AI的范式转移。大语言模型对英文词汇的分词效率远高于符号系统,暗示未来代码将向高密度英语演进。NERD(无人工干预自动化编程)新范式具备三大特征:机器优化、可审计性、令牌用量减少50-70%。NERD示例代码在保持功能完整的前提下,相较TypeScript实现了显著的令牌压缩。新型工作流中人类仅作为需求方存在,代码的创作与迭代均由大语言模型完成。针对调试难度与合规性的质疑,可通过更高抽象层和转译视图方案解决。行业预测:五年后生产环境代码将主要由AI生成,现行编程语言将面临代际淘汰。NERD作为实验性范式,若验证人类无需直接编码,或将重新定义源代码的本质概念。
Show HN: C-TURTL, a turtle graphics game5 months agohttps://michae2.github.io/c-turtl/通过DNA编码控制乌龟移动的指令说明F: 让乌龟向前移动L: 让乌龟左转45°(逆时针方向)R: 让乌龟右转45°(顺时针方向)B: 生成一只小乌龟P: 让乌龟排便C: 清理粪便乌龟在DNA序列执行完毕后死亡新生乌龟会从DNA序列起始处重新开始执行乌龟用方块符号(■)表示灵感来自Isabel Beach的L-系统和乌龟绘图法,以及Susam Pal的CFRS源代码和示例可在GitHub上获取
Show HN: Gojju, a Fun Programming Language5 months agohttps://hemanth.github.io/gojju/编程语言介绍:包括Python、Ruby、Haskell、Perl和JavaScript。使用pip安装包的示例:'pip install gojju'。Python列表推导式示例:'[x*x for x in range(10)]'。Python列表切片示例:'list[1:3]'。Ruby字符串插值示例:'"Hello #{name}!"'。Ruby条件打印示例:'print "yes" if happy'。某些语言中的函数链式调用示例:'x |> double |> sum'。Haskell匿名函数示例:'\x -> x * 2'。Ruby控制结构:'unless'和'until'。Perl正则表达式示例:'/pattern/flags'。JavaScript箭头函数示例:'(x) => x * 2'。JavaScript数组展开示例:'[...a, ...b]'。函数式编程概念:'compose'、'curry'、'pipe'。
Kotlin 2.3.05 months agohttps://blog.jetbrains.com/kotlin/2025/12/kotlin-2-3-0-released/Kotlin 2.3.0正式发布,包含新语言特性、稳定功能及工具链更新主要更新包括:语言改进、Kotlin/JVM对Java 25的支持、Kotlin/Native互操作性增强、Kotlin/Wasm默认功能启用、Kotlin/JS实验性特性支持Gradle 9.0版本兼容性,新增生成源代码注册APICompose编译器现可为经过混淆的Android应用提供堆栈追踪标准库更新包含稳定的时间追踪功能和改进的UUID生成机制安装指南:在构建脚本中更新Kotlin版本,或从GitHub下载命令行编译器支持渠道:通过Slack交流或在YouTrack提交问题报告特别致谢顶级问题报告者及外部贡献者向EAP冠军计划成员致以特别感谢
TIL: I am an open-source contributor5 months agohttps://beasthacker.com/til/i-am-an-open-source-contributor.html作者正在使用《如何设计程序》学习Racket语言,盛赞这是最适合初学者的资源之一。他们特别提到该书课程清晰、习题结构严谨,还有趣味十足的图形和游戏库。作者很欣赏DrRacket这个无干扰的集成开发环境,能让人专注语言学习。出于回馈社区的责任感,他们开始向Racket的GitHub代码库提交贡献。尽管贡献不大,但核心团队迅速合并了提交,这让他们信心倍增。作者幽默地表示,期待很快能因拼写检查的贡献获得『核心贡献者徽章』。
The C3 Programming Language4 months agohttps://c3-lang.orgC3是一种基于C语言语法和语义的编程语言,旨在演进C语言的同时保持对C程序员的友好性。C3提供完整的C ABI兼容性,无需特殊类型或限制即可与C/C++应用程序无缝集成。特性包括直观的模块系统、针对向量/矩阵的精确运算符重载,以及编译时宏功能。通过运行时和编译时约束的契约支持契约式编程,并集成了结合结果错误与异常的混合错误处理机制。提供简化泛型类型创建的通用模块,以及支持灵活宏和函数的类型自省功能。允许不使用字符串或晦涩约束的内联汇编,并在调试模式下包含全面的运行时检查以提早发现错误。标准库支持在调试版本中生成详细堆栈跟踪,将错误诊断从简单的'段错误'提示提升到更高层次。