Show HN: I made a C program to create a vanity SHA-1 hash for a text filea year agohttps://gist.github.com/o0101/77eb378b5076fe47c3336583330ac615该文本描述了一个名为'vanity.c'的C程序,该程序生成具有特定目标前缀的SHA-1哈希值。该程序通过处理文本来寻找能产生以'20250327'开头的哈希值的单词大小写组合。程序包含文本规范化、哈希计算和单词解析功能,特别强调避免处理URL和非字母单词。程序会输出搜索过程中的进度和成功信息,包括计数器的二进制表示形式。文中提到版本控制中的'幸运提交'概念,即提交哈希具有美观或有意义的前缀。
Zig is a general-purpose programming languagea year agohttps://ziglang.org/Zig专注于调试应用程序而非语言知识,没有隐藏的控制流、内存分配或预处理器。Zig引入'Comptime'实现元编程,允许编译期函数调用和类型操作,且无运行时开销。Zig可用于逐步改进C/C++/Zig代码库,作为支持交叉编译的零依赖编译器。Zig软件基金会(ZSF)是由Andrew Kelley于2020年成立的501(c)(3)非营利组织,旨在支持Zig发展。ZSF为核心贡献者提供有偿工作,并通过企业赞助、GitHub赞助等捐赠维持运营。
Rust Any part 3: we have upcastsa year agohttps://lucumr.pocoo.org/2025/3/27/any-upcast/As-Any Hack是三年前引入的,旨在实现稳定版Rust中向父特征的向上转型。该hack解决了`Any`特征的方法无法在`dyn DebugAny`上使用的问题,尽管`DebugAny`继承自`Any`。截至Rust 1.86版本,该问题已修复,现在可以直接在`dyn DebugAny`上使用`downcast_ref`等`Any`特征的方法。这一修复意味着当最低支持Rust版本(MSRV)更新后,As-Any Hack等旧解决方案就可以退役了。更新后的`Extensions`结构体示例展示了如何在不使用hack的情况下利用新功能。
Don't write clean code, write CRISP codea year agohttps://bitfieldconsulting.com/posts/crisp-code文章提倡编写'CRISP'代码而非单纯的'整洁代码',强调五大核心原则:正确性、可读性、惯用性、简洁性和性能表现正确性是最重要的属性——如果代码不正确,其他品质都毫无意义。测试至关重要,但测试用例本身也需验证准确性可读性应优先于性能等特性。通过消除不必要的复杂性、采用清晰的命名规范,使代码易于理解惯用代码遵循行业惯例,能降低阅读者的认知负担。保持命名与结构的一致性有助于维持可读性简洁不等于容易,它需要刻意追求直接性和精简度。避免仅为减少重复而引入不必要的抽象性能固然重要,但不应牺牲正确性、可读性或简洁性。当需要优化时,简洁的代码更容易调整
Show HN: I made Confetti: a configuration language file formata year agohttps://confetti.hgs3.me/Confetti是一种配置语言,兼具Unix文件可读性与S表达式灵活性它采用极简主义设计,无类型系统且不强制规范,由用户程序自行处理模式验证Confetti的定位是与INI格式竞争,而非JSON或XML典型特性包括:注释支持、自定义关键字和层次化结构官方实现基于C11标准,代码托管于GitHub平台Confetti的设计哲学强调简洁性、极简主义和去类型化设计突出特性:非强制关键字、本地化友好特性设计、鼓励扩展机制对比表格清晰展示了Confetti相对INI/JSON/TOML格式的优势
Rust 1.86.0a year agohttps://blog.rust-lang.org/2025/04/03/Rust-1.86.0.htmlRust 1.86.0 引入特性向上转型,允许将特性对象强制转换为超特性引用。新增 `get_disjoint_mut` 方法,支持安全地对 `HashMap` 和切片中的多个元素进行可变索引。现在可为安全函数标记 `#[target_feature]`,但对其使用存在限制。调试模式中新增非空指针的调试断言,增强代码健壮性。默认启用 `missing_abi` lint,鼓励显式指定ABI规范。针对 `i586-pc-windows-msvc` 目标平台发出弃用警告,该目标将在 Rust 1.87.0 中移除。多项API稳定化,包括 `{float}::next_down`、`{float}::next_up` 和 `Vec::pop_if`。新增常量上下文稳定化API,如 `hint::black_box` 和 `str::split_at`。
Show HN: The C3 programming language (C alternative language)a year agohttps://github.com/c3lang/c3cC3是C语言的演进版本,保持了C程序员熟悉的语法特性提供Windows、Debian、Ubuntu和MacOS系统的预编译二进制文件完全兼容C语言的ABI,允许在项目中混合使用C和C3代码核心特性包括过程式设计、C语言ABI兼容性以及平滑的C程序员过渡路径避免'宏大构想',专注必要改进并适度增加高层便利功能受C2语言启发,旨在迭代改进C而非创造全新语言示例特性:泛型模块、非强制头文件、新型语义宏系统当前稳定版本0.7.0,未来更新将侧重标准库扩展和错误修复编译器已在Linux、Windows和MacOS平台验证,提供详细支持矩阵鼓励通过提交问题、Discord讨论及特定需求(如库绑定)参与社区贡献提供Windows、Linux和MacOS等多平台安装指南从源码构建需要CMake、LLVM等依赖项,各平台有特定步骤许可协议:C3编译器采用LGPL 3.0,标准库使用MIT协议提供编辑器插件支持开发环境集成包含测试规范指南和贡献者致谢列表
Annotated Unix Magic Postera year agohttps://unixmagic.net/Shell是UNIX系统的核心,作为与内核交互的主要接口,负责进程管理、计算和直接操作系统交互。Shell脚本实现了自动化与高效数据处理,使Shell兼具交互性与可编程性,这一特性在当时独具创新。Bourne shell(sh)是最初的Shell,为后续Shell发展奠定了基础。UNIX Magic海报将Shell喻为通往UNIX力量的大门,是系统掌控的关键。man命令展示命令、系统调用及配置的详细文档(手册页),其解读涵盖从进程回收到黑客象征。管道符(|)通过命令间传递数据将工具组合成工作流,是UNIX灵活性的基石。内存泄漏指程序未释放闲置内存,可能导致系统变慢或崩溃。UNIX史上的关键人物包括dmr(丹尼斯·里奇)、kt(肯·汤普逊)和bwk(布莱恩·克尼汉),他们推动了UNIX与C语言的诞生。C语言由丹尼斯·里奇创建,其用高级语言重写UNIX的决定极大提升了系统可移植性与普及度。进程通过管道通信时,生产者与消费者由OS缓冲区协调数据流,可能产生反压。守护程序是后台服务,常随系统启动,执行网络响应或定时任务等操作,灵感源自麦克斯韦妖。su命令切换用户账户,常用于获取管理员(root)权限。/dev/null丢弃写入数据,用于屏蔽无用输出或充当空输入源。tar(磁带归档)将文件打包,最初为磁带等顺序I/O设备设计。fork是类UNIX系统创建新进程的主要方式,其概念可追溯至1962年。Shell脚本自动化任务,体现了UNIX'组合小程序'的哲学。AWK是贝尔实验室开发的文本处理语言,得名于其作者Aho、Weinberger和Kernighan。/usr目录存放用户主目录、可执行文件及共享资源。线程是程序内的轻量级进程,共享内存但独立运行,用于并发编程。Troff是UNIX文档处理系统,支持排版与手册页格式化,由nroff发展而来。B语言是C语言前身,由贝尔实验室设计,专为非数值应用开发。cat命令合并文件,作为早期UNIX组件由肯·汤普逊和丹尼斯·里奇编写。uucp(Unix间复制)实现UNIX系统间文件传输,由Mike Lesk开发。网络套接字由BSD UNIX引入,统一了本地与网络进程通信,奠定现代网络基础。Make工具通过Makefile自动化构建,相比手动脚本更高效可靠,由Stuart Feldman创建。spawn创建新进程,与fork/exec相关,概念源自VMS操作系统。nroff为打印机和终端格式化文本,是UNIX帮助系统的核心,由Joseph Ossanna开发。root用户拥有超级权限,是系统管理的必备身份。date命令显示/设置系统时间,UNIX纪元(1970年1月1日)的选定出于便利性考虑。whoami显示当前用户,首次出现于2.9 BSD版本。pwd输出当前目录,诠释了UNIX'小而专'的工具哲学。mbox将邮件存储为单一文件,实践了UNIX'万物皆文件'的理念。login验证用户身份、初始化环境并启动进程,关联到终端设备。spell检查英文拼写,由贝尔实验室Stephen Johnson开发。curses库抽象终端图形与光标控制,名称源于'光标优化'。diff比较文件差异,常用于追踪修改,由贝尔实验室开发。陷阱(信号)向进程通知中断或终止等事件,辅助进程间通信。Shell符号(%、$、>、<、*、!、[]等)是控制命令、重定向和自动化的强大工具。缓冲区溢出是常见UNIX漏洞,数据溢出内存边界可能导致崩溃或安全风险。tee命令分流输出至文件与管道,海报中以T型管道符号指代。UNIX文件系统呈树形结构,通过cd、ls、pwd等命令导航。/dev/null象征数据吞噬,如同'黑洞',亦有解读认为其暗指守护进程。
The Tcl Programming Language: A Comprehensive Guide (2nd Edition)a year agohttps://www.magicsplat.com/ttpl/index.html《Tcl编程语言:全面指南》涵盖Tcl 9版本,Gumroad平台用户可购买本书包含Tcl基础语法、高级概念及编程范式讲解命名空间模块化、面向对象结构及包管理功能涵盖国际化、事件循环高效数据传输与异步I/O技术探讨进程间通信、协程并发编程及安全解释器机制通过ZipFS虚拟文件系统实现单文件可执行程序便捷部署首版可下载章节仍适用于Tcl 9,仅需少量修改支持服务包括勘误表及Tclers Wiki用户论坛,提供示例脚本本书获得极高评价,以深度、全面性和清晰度著称多种格式可选:平装本(660页,ISBN-13:9798316640539)、PDF电子版(Gumroad平台19.95美元)、印刷版(亚马逊暂缺货)
Swift 6.1 Releaseda year agohttps://www.swift.org/blog/swift-6.1-released/Swift 6.1 引入了新的语言增强功能,以提高开发效率、诊断能力和数据竞争安全性。并发改进包括将`nonisolated`扩展到类型和扩展,以及为任务组提供更好的类型推断。新的`@implementation`属性允许在Swift中实现Objective-C类型。生产力提升包括在更多上下文中支持尾随逗号,例如元组和参数列表。引入了包特性(package traits),用于Swift包中的条件编译和可选依赖项。SourceKit-LSP 中现在默认启用对SwiftPM项目的后台索引功能。Swift Testing 现在支持用于测试范围的自定义特性,并改进了错误处理宏。Swift-DocC 引入了使用参数和返回类型进行人类可读的符号链接消歧。Swift 6.1 可在Xcode 16.3中用于Apple平台,也可以通过swiftly或其他方法安装。
A Year of Rust in ClickHousea year agohttps://clickhouse.com/blog/rust将Rust集成到ClickHouse的初衷是充分利用Rust的优势,同时避免重写现有的C++代码。首个Rust组件是BLAKE3哈希函数,后来被LLVM的C++实现所取代。后续增加的Rust组件包括用于终端改进的'skim'工具和替代查询语言PRQL。Delta Kernel的集成标志着Rust首次实际应用于Delta Lake支持,取代了不稳定的C++代码。面临的挑战包括供应链安全、复杂的C++/Rust互操作、异常处理机制以及检测工具集成。通过解决交叉编译和库链接问题,保持了ClickHouse的可移植性优势。需要谨慎处理Rust与C++规范的兼容性以及依赖管理问题。尽管存在挑战,Rust集成最终取得成功,并吸引了更多Rust开发者参与贡献。
Why does JSON have commas?a year agohttps://simonsafar.com/2025/json_with_no_commas/JSON的简洁性使其成为XML和二进制格式的热门替代方案。JSON中的逗号被认为是不必要的,且容易引发语法错误。JSON5引入了尾随逗号,但并未完全解决逗号问题。移除JSON中的逗号可以在不损失可读性的情况下简化解析过程。这篇文章幽默地批评了JSON的设计,并提出了改进建议。
The Best Programmers I Knowa year agohttps://endler.dev/2025/best-programmers/阅读你所使用工具和技术的参考文档深入理解你的工具,包括其历史、现状、局限性和生态系统彻底阅读并理解错误信息,以独立解决问题将复杂问题拆分为更简单、可管理的部分愿意动手编写代码,并根据需要学习新技能在团队和社区中帮助他人并分享知识有效写作和沟通,分享想法和知识持续学习并跟进新技术和语言的发展不要盲目追随潮流,而是仔细评估新技术平等对待每个人,不论其职位或经验水平通过有影响力的工作、开源贡献或思想领导力建立声誉对技术、他人和自己保持耐心永远不要将错误归咎于外部因素,而是寻找逻辑解释承认自己不懂的事情,并将其视为学习机会避免猜测,通过研究和调试获取准确信息编写简单、可维护的代码,而非过度取巧的解决方案
Keeping it Old-Tool: REPL habits of a grug-brained Clojure programmera year agohttps://www.evalapply.org/posts/demo-clojure-workflow-scicloj/index.html文章对比了两种Clojure编程工作流:一种是使用现代LLM工具的工作流,另一种是传统的'原始人思维'工作方式。作者更倾向于使用Clojure标准库和基础工具,强调肌肉记忆和REPL驱动开发的重要性。提到的核心工具包括Clojure标准库函数、用于文档编写的org-mode,以及基于REPL的简单工作流。作者主张最小化依赖和本地化开发,并展示了运行Jetty服务器、实时检查对象等具体示例。技巧包括使用Clojure内置工具进行反射、数据检查,以及无需修改项目文件即可实现动态依赖管理。
Learning to Program with Haikua year agohttps://www.haiku-os.org/development/learning_to_program_with_haiku关于Haiku编程的课程始于2010年1月,由DarkWyrm主讲,面向初学者。所有课程均采用知识共享许可协议,仅限非商业用途。可购买经过整理和润色的课程纸质版。课程涵盖从基础到高级的主题,包括数据类型、循环、内存管理和面向对象编程。课程逐步深入至图形用户界面编程、Haiku API及存储工具包的使用。最后部分通过实际项目HaikuFortune,讲解可用性设计、资源管理和软件打包。系列课程以规划后续高级Haiku编程专题作为结尾。
The Soft Skills Renaissancea year agohttps://sourcetms.com/posts/outsourcing-knowledge文章探讨了'氛围编程'的兴起,即通过持续提示AI模型生成代码来完成编程,人类则专注于方向和上下文把控。指出我们正进入'软技能复兴'时代,当硬技能被外包给AI后,品味、直觉和同理心等软技能变得至关重要。AI被描述为既是均衡器——创造了'构建者中产阶级',也是分化器——放大了顶级构建者的能力。文章表达了对顶级AI模型未来开放获取的担忧,以及模型私有化后可能产生的后果。对'氛围编程'感兴趣的读者可查阅相关延伸文章获取更多信息。
Crystal 1.16.0 Is Releaseda year agohttps://crystal-lang.org/2025/04/09/1.16.0-released/Crystal 1.16.0 版本发布,包含新功能和错误修复。包含由19位贡献者提交的162项变更。重大变更包括修复了 File.match? 的实现。参数名后缀'?'和'!'已被弃用。Enumerable#sum 和 #product 现在需要显式指定返回类型。HTTP::Request 现在能正确解析资源字符串。子命令不再设置环境变量 $CRYSTAL。执行上下文作为预览功能引入。Indexable 和 EventLoop 新增了多个方法。编译器改进包括更好的CLI选项和环境变量处理。文档生成器现在可以包含私有和受保护对象。新增对 LLVM 20 的支持。LLVM::ABI 被弃用且无替代方案。
Lisp Programs Don't Have Parenthesesa year agohttp://funcall.blogspot.com/2025/04/lisp-programs-dont-have-parentheses.htmlLisp程序由嵌套的链表构成,而非括号本身。Lisp中的括号在程序打印表示中充当嵌套列表的标记。通过统计括号数量即可确定Lisp程序结构,无需复杂解析器。Lisp明确的表达式边界简化了重构,因其表达式与上下文无关。与C或Java等语言不同,移动Lisp表达式无需调整语法结构。Lisp的简洁性使得仅用基础文本编辑器即可轻松操作代码,无需依赖IDE。
Iterators in Goa year agohttps://bitfieldconsulting.com/posts/iteratorsGo迭代器是能够逐个产生结果的函数,而非一次性计算所有结果迭代器能提升效率,避免为整个切片分配内存和计算未使用的元素Go中的迭代器函数接收'yield'函数作为参数,通过调用该函数来生成每个值Go的'iter'包提供'Seq'和'Seq2'类型,分别对应单值和双值迭代器迭代器可通过同时返回值和错误来处理异常,类似传统Go函数迭代器必须检查'yield'函数的返回值以确定何时停止并执行清理操作迭代器支持组合,允许函数接收和返回迭代器以实现灵活编程相比通道,迭代器更简单且能避免并发问题和资源泄漏Go标准库已在'slices'和'maps'包中更新支持迭代器功能
Learning Assembly for Fun, Performance and Profita year agohttps://thechipletter.substack.com/p/learning-assembly-for-fun-and-profit汇编语言是一种低级编程语言,直接对应处理器的机器指令。学习汇编语言有助于理解计算机工作原理,并对调试高级语言代码非常有用。近期对汇编语言的兴趣包括Nvidia在AI模型中使用的ptx指令集,表明其在性能关键型应用中的重要性。汇编语言学习曲线陡峭,但能提供对硬件的精细控制,在AI等高要求场景中具有优势。文章对比了复古(6502、Z80、8086、68000)与现代(x86-64、ARM64、RISC-V)汇编语言的学习价值。复古架构更简单有趣但现代适用性低,而现代架构复杂却具有现实意义。推荐将RISC-V作为最佳现代汇编语言学习目标,因其简洁性、开放性和未来潜力。Z80与8086并列最佳复古学习架构,其中8086因与现代技术的延续性稍占优势。