Zig language and toolchain packaged as a deb for Debian and Ubuntu amd64/ARM6410 months agohttps://github.com/clayrisser/debian-zigZig是一种通用编程语言,用于开发健壮、高效且可复用的软件。此代码库中提供了Zig的Debian打包文件。仓库安装方式需添加软件源和密钥,然后通过apt命令安装。直接安装方式需下载.deb文件后进行安装。适用于Debian Unstable (Sid)的软件包包含amd64和arm64版本。所有软件包均通过Open Build Service构建完成。
A compact bitset implementation used in Ocarina of Time save files10 months agohttps://github.com/jb55/oot_bitset灵感来自《塞尔达传说:时之笛》的极简零开销旗帜系统采用C/C++和Rust实现,实现高效旗帜存储在存档文件中存储数百或数千个单比特旗帜,不浪费字节使用uint16_t数组实现空间高效存储(1个字=16面旗帜)C语言版本仅需头文件,Rust版本依赖极小;无需堆分配通过无分支位操作实现零成本抽象,性能优异可扩展性从1到4096个字(65,536面旗帜)直观的索引方式便于调试(例如0x12对应字1位2)包含设置、清除和检查旗帜的功能函数兼容C99及以上版本编译器,并通过Cargo支持Rust
Crypto 101 – Introductory course on cryptography10 months agohttps://www.crypto101.io/Crypto 101是一门面向各级程序员的免费密码学入门课程涵盖核心密码学概念:分组密码、流密码、哈希函数、消息认证码、公钥加密、密钥协商协议及签名算法教授如何利用编程技能破解密码学漏洞包含伪造Cookie、密码恢复、随机数生成器后门等实战应用提供多种无数字版权管理限制的格式版本课程源自PyCon 2013演讲内容,后扩展成专注于密码学破解的书籍
The First Time I Was Almost Fired from Apple10 months agohttps://www.engineersneedart.com/blog/almostfired/almostfired.html作者于1995年苹果公司动荡时期加入该公司最初负责QuickdrawGX项目,后因项目调整转入ColorSync团队为适配PowerPC芯片,作者将色彩选择器的汇编代码重写为C语言基于个人兴趣与市场需求,作者额外开发了HSV/HTML/蜡笔/CMYK等色彩选择器因在代码中隐藏T.S.艾略特诗歌彩蛋险些被解雇,暴露出职场认知不足虽经历风波得以留任,作者自此对公司政策更加审慎蜡笔选择器暗藏趣味彩蛋:如磨损蜡笔纹理及团队成员名字字母重组作者回顾了在苹果早期职业失误及适应企业环境的成长历程
Ziglings: Learn Zig by fixing broken programs10 months agohttps://codeberg.org/ziglings/exercisesZiglings是一系列故意存在缺陷的程序,旨在通过修复它们来教授Zig编程。该项目灵感来源于rustlings、Ruby Koans以及《Little LISPer/Schemer》系列书籍。专为没有系统编程经验的初学者设计。每个练习独立完整且附带讲解,并推荐了额外学习资源。需要使用Zig编译器的开发版本(0.15.0-dev或更高)。克隆仓库后运行'zig build'即可开始。Ziglings跟踪Zig的开发版本而非稳定版。高级用法包括运行特定练习、跳过检查及调试功能。涵盖Zig核心语言特性和部分标准库功能。欢迎贡献改进说明文档、练习题及地道用法示例。
Uncommon Uses of Python in Commonly Used Libraries (2022)10 months agohttps://eugeneyan.com/writing/uncommon-python/Python的`super()`函数对于协作式多重继承至关重要,特别是在基类中混入类(Mixin)提供无状态的可复用功能,非常适合跨多个类的可选特性相对导入(使用`.`)确保Python优先搜索当前包,防止模块冲突非空的`__init__.py`文件可以简化API、重构代码而不破坏变更,并初始化包级资源类方法用于需要类级别操作的场景,而静态方法则作为类命名空间内的工具函数pytest中的`conftest.py`不仅提供测试夹具(fixture),还能修改`sys.path`以识别模块像scikit-learn这样的库强调一致性和组合的设计原则,而PyTorch则注重实用性能和简洁性
Best Way to Advertise a Programming Language10 months agohttps://www.stylewarning.com/posts/write-programs/推广编程语言的最佳方式是编写吸引广泛受众的有用程序。尽管Common Lisp和Haskell有其优点,但缺乏大量广泛使用的程序,这影响了它们的流行度。GitHub星标和项目实用性是衡量语言实际采用情况的关键指标。著名的Common Lisp项目包括Nyxt(网页浏览器)和pgloader(PostgreSQL迁移工具)。Haskell拥有如pandoc(标记语言转换器)和ShellCheck(Shell脚本分析器)等项目,但许多是利基工具或编译器。Python和Zig拥有更多广泛使用的程序,展示了超越理论优势的实际采用情况。发布实际软件证明了语言的可行性,并可以作为有效的宣传手段。语言的流行度受营销、教育和机构支持的影响,而不仅仅是技术优势。
Haxe 5.0 preview.1 has been officially released10 months agohttps://haxe.org/download/version/5.0.0-preview.1/Haxe 5.0.0-preview.1已作为预发布版本正式推出该版本尚不稳定且存在已知问题,但鼓励测试以协助最终版Haxe 5的发布遇到版本字符串错误的用户应更新或移除旧版haxelib多项移除和破坏性变更包括:将sys.db、php.Web和neko.Web移至hx4compat库常规改进和错误修复包括:启用并行处理及解决多项技术问题
# [derive(Clone)] Is Broken10 months agohttps://rgbcu.be/blog/derive-broken/代码示例讨论了Rust的`#[derive(Clone)]`及其过于严格的限制要求。第一个示例展示了一个本应能编译通过的`WrapArc<T>`结构体,但由于Rust的`Clone`派生要求而无法通过。第二个示例展示了`PartialEq`和`Eq`特性存在的类似问题。核心问题在于Rust内置的派生特性要求所有泛型参数都必须实现该特性,即使这些参数未被使用。提出了两种解决方案:长期的RFC流程或快速的自定义宏方法。作者建议在`derive_more` crate中实现限制较少的派生宏,或创建一个新的crate来解决这个问题。
Code and Trust: Vibrators to Pacemakers10 months agohttps://punkx.org/jackdoe/code-and-trust.html振动器与起搏器控制程序的对比,强调两者虽用途不同但结构相似探讨起搏器编程的复杂性与关键性,包括容错设计和监管标准(ISO 14971、IEC 62304等)关于代码作者信任度的讨论:对比djb等个人程序员与FDA审计企业,以及AI在未来编程中的潜在角色对AI介入关键系统(如起搏器、汽车制动)的担忧,涉及AI生成代码的安全性与可信度挑战主张通过代码、规范及流程的彻底透明化,作为建立AI生成/审计系统信任的前提条件
Jank Programming Language10 months agohttps://jank-lang.org/jank是一种通用编程语言,也是Clojure的方言。它通过基于LLVM的JIT原生编译,拥抱交互式、面向价值的开发模式。jank保持与Clojure的强兼容性,包括其'代码即数据'哲学和宏系统。它提供函数优先的编程范式,采用不可变数据结构,并通过STM和代理支持可变性。jank允许在Clojure源文件中无缝集成C++代码。它具有快速启动、低内存占用的特点,同时支持JIT和AOT编译。jank提供高质量的错误报告,并兼容Clojure JVM和ClojureScript。包含强大的数据操作能力,如reduce、zipmap和merge-with等函数。通过loop宏支持命令式风格的循环,同时保持纯粹函数式特性。jank中的Vars支持动态重定义,便于测试和副作用管理。
A software conference that advocates for quality10 months agohttps://bettersoftwareconference.com/凯西·穆拉托里将讲述编程历史。丹尼斯·古斯塔夫松将探讨物理引擎的并行化。比尔·霍尔将介绍行业工具的使用。维耶科斯拉夫·克拉亚契奇将展示《文件领航员:引擎内部》。瑞安·弗勒里将讲解《破解代码:实时调试器可视化架构》。埃斯基尔·斯滕伯格将进行两场演讲:《你应该完成你的软件》和《安全吐槽》。瓦西姆·阿尔哈约马尔将讨论游戏中的车辆编程。桑德尔·J·斯凯格斯塔德将讲述音频中的动态相位对齐技术。泰德·本迪克森将发表演讲《你的大多数项目都很蠢,请做些真正的游戏吧》。德米特里·斯帕诺斯将探讨《分层距离场:带渐变的字形可扩展渲染》。卡梅隆·雷克斯将介绍《深度学习与计算机视觉在游戏开发中的应用》。山姆·H·史密斯将讨论《无抽象语法树编译器与海量节点》。安德鲁·里斯将演讲《尽可能多地假设》。现场参会仅限受邀者,门票不对外公开销售。所有演讲将进行免费直播并录制存档。活动地点:一个迷人的小镇。参会者将获得信息指南,联系人包括山姆、桑德尔和查理。
Dict Unpacking in Python10 months agohttps://github.com/asottile/dict-unpacking-at-home介绍了一个名为'dict-unpacking-at-home'的幽默Python包,用于字典解包。说明包括添加特定的编码声明以启用字典解包语法。通过示例演示了基本和嵌套字典解包操作。提到一个关于堆栈跟踪中行号问题的已知缺陷,以及包含修复的分支。强烈建议不要在严肃项目中使用该包。指出该包每月近百万次下载,总下载量超过3000万次的流行度。
Difftastic: A structural diff that understands syntax10 months agohttps://github.com/Wilfred/difftasticDifftastic 是一个基于语法结构进行文件比对的差异分析工具支持30多种编程语言,无法识别的文件扩展名会回退到文本对比模式能理解代码比较中的嵌套结构、对齐方式和换行处理处理大文件或大量变更时存在性能问题,内存占用较高并排显示方式有时会造成理解困难定期更新修复崩溃问题,但不适合用于生成补丁文件不支持抽象语法树合并或处理无序数据类型可不进行完整差异分析就检查语法变更(速度更快)支持通过合并冲突标记来比对冲突文件采用Dijkstra算法进行结构化差异分析,基于MIT协议开源
"high level" languages are easier to optimize10 months agohttps://jyn.dev/high-level-languages-are-easier-to-optimize/高级语言相比低级语言更容易优化低级语言由于复杂的别名分析和内存分配问题而难以优化Haskell的引用透明性使得流融合等优化更易实现像Futhark这样的函数式语言通过使用未装箱值和严格约束,能在特定领域超越C语言性能SQL的声明式特性允许在不修改源代码的情况下持续获得显著的性能提升原始指针有时对特定内存优化是必要的,但在通用编程中很少需要Rust通过将原始指针设为可选特性并支持函数式编程范式来优化,是朝着正确方向迈出的一步允许在语言间切换的元语言有助于选择最合适的工具,从而提升性能
Working through 'Writing A C Compiler'10 months agohttps://jollygoodsw.wordpress.com/2025/03/13/working-through-writing-a-c-compile...作者决定为nand2tetris书中的Hack处理器开发一个C语言编译器。发现了No Starch Press出版的《编写C编译器》一书,决定按章节逐步学习。该书因其循序渐进的方法广受好评,第一章就从能处理基本return语句的简单编译器开始教学。后续章节逐步增加新功能,比如第二章会引入一元运算符。书中为每个章节都提供了大型测试套件,可测试词法分析器、语法分析器、语义分析等各个阶段。作者fork了原版测试套件并针对Windows系统做了一些适配修改。作者正在使用Rust语言实现编译器,并计划为每个章节撰写博客记录。尽管未来可能会提到一些细微批评,但这本书仍被强烈推荐。
A Mental Model for C++ Coroutine10 months agohttps://uvdn7.github.io/cpp-coro/C++协程是为库作者定义定制点的规范,而非现成的库或特性。协程通过支持挂起、恢复和销毁操作,泛化了仅支持调用和返回的函数概念。示例协程'add'展示了在'co_await'处挂起,并在'co_sleep(1)'完成后恢复的过程。C++协程的灵活性允许定制调用、返回、挂起、恢复和销毁等操作。协程返回类型(如'Task<T>')中的'promise_type'是定制协程行为的关键。Awaiter与Awaitable概念通过'await_suspend'和'await_resume'方法实现挂起/恢复操作的定制。'final_suspend'支持在协程结束时定制行为,常用于恢复等待中的其他协程。'await_transform'提供将表达式转换为可等待对象(awaitable)的机制,确保所有可等待对象均为协程。
Zig's New Async I/O10 months agohttps://kristoff.it/blog/zig-new-async-io/Zig引入了一种新的I/O接口设计,调用方需提供I/O实现,类似于内存分配器的处理方式。新I/O接口能更好地控制并发和并行I/O操作。示例展示了如何使用新接口编写并发I/O操作,包括处理future和取消机制。计划支持多种I/O实现,包括阻塞式I/O、线程池、绿色线程和无栈协程。该设计追求代码复用性和最优性能,支持语义化I/O操作(如sendfile和向量化写入)。路线图显示部分功能将在Zig 0.15.0中提供,后续版本会有更全面的改进。Zig的异步I/O方案避免了'函数染色'问题,使代码在不同执行模型间更具复用性。新系统支持多种执行模型而不强制特定方案,提升了灵活性和性能。FAQ解答了关于Zig为何专注异步I/O及其如何与语言底层特性结合的常见问题。
Zig's new I/O: function coloring is inevitable?10 months agohttps://blog.ivnj.org/post/function-coloring-is-inevitableBob Nystrom 2015年的博客《你的函数是什么颜色?》引发了编程语言中异步计算处理方式的讨论。Zig语言引入了一种新的I/O处理方式,试图通过向函数传递'std.Io'来解决函数着色问题,但这只是将问题从阻塞/非阻塞转移到了'io/非io'的区分上。文章指出函数着色本质上是语义和行为问题,而非单纯的语法或类型签名问题,可能是无法从根本上解决的。Zig的设计通过统一执行模型提高了人机交互效率,类似于通过传递'std.mem.Allocator'处理内存分配的方式。文章总结认为,虽然函数着色问题依然存在,但Zig的方案为I/O操作提供了一种更便捷的处理途径。
Show HN: Bedrock – An 8-bit computing system for running programs anywhere10 months agohttps://benbridle.com/projects/bedrock.htmlBedrock是一套紧凑便携的8位计算机系统,专为永久运行而设计。它是一套规范标准而非实体设备,任何搭载Bedrock模拟器的系统都能运行其程序。通过模拟器可在Windows、Linux、网页端及任天堂DS等平台运行程序。Bedrock仅含32条指令和12种设备,学习曲线极为平缓。提供教程文档及示例程序(如微波炉时钟),助力快速上手。现有bedrock-js(JavaScript版)和bedrock-pc(Rust版)实现方案,支持程序汇编与模拟。该项目源自Uxn分支,特别优化了在资源受限系统上的性能表现。实时演示包含Cobalt(像素画工具)、Snake(图形演示)和微波炉时钟等应用场景。