## Tiny C 编译器 (TCC) 概要
TCC 是一款非常小巧、快速且多功能的 C 编译器,专为资源受限的环境设计——甚至可以放入救援盘(约 100KB)。 与使用字节码的编译器不同,TCC 直接生成 x86 代码,从而显著提高了编译速度——在大型项目(76936 行代码)中,速度可达 GCC 的 9 倍。
TCC 旨在完全符合 ISO C99 标准,并支持动态库。 它允许直接执行 C 源代码,无需单独的链接或汇编步骤,甚至支持带有简单 shebang 行的 C 脚本。 内置的内存和边界检查器增强了代码安全性。
此外,TCC 可以通过 `libtcc` 用作动态代码生成的后端。 虽然开发速度有所放缓,但它仍然是特定用例的强大选择,并采用 GNU Lesser General Public License 许可。
本文详细介绍了一种高度压缩图像色度(颜色)数据的技术,有可能在不产生明显视觉伪影的情况下,实现每像素低于0.5比特的压缩。该方法利用了色度通道通常与亮度(Y)通道高度相关的观察结果——本质上,颜色信息可以从亮度近似得到。
核心思想是在图像块(起始为16x16像素)内,使用基于该块内最小和最大Y值的简单方程线性近似色度值。这只需要存储每个色度通道每个块的两个值,从而大大减小数据大小。使用可变块大小(低至2x2)以提高复杂区域的精度,并使用单个比特指示是否应分割块。
为了减轻这种近似造成的“块状”伪影,应用了一种边缘误差估计和补偿技术,以平滑块之间的过渡。结果表明,可以实现低至每像素0.13比特的压缩,但质量损失会增加。进一步的改进可能包括高级熵编码和去块算法的改进。作者提供了一个实验性C++代码链接以供实现。
最近,作者在使用Windows 11时遇到一个令人沮丧的问题:由于Microsoft商店的许可错误,无法使用记事本和截图工具等基本内置应用。这凸显了Windows越来越不像传统的操作系统,而更像一项依赖云服务的平台。
作者是一位资深的Windows爱好者,对这种转变感到担忧,特别是像记事本这样 historically 简单、离线的核心应用,现在也与在线账户绑定,并越来越多地集成Copilot等功能。虽然可以通过卸载OneDrive、创建本地账户等方式进行自定义,但需要使用变通方法以及潜在地依赖第三方“清理”脚本,这显得不必要且可能存在风险。
核心问题并非反对改变,而是反对突如其来的中断以及失去本地控制。作者认为Windows应该保持离线功能,用户不应该被迫依赖互联网连接才能使用基本工具。对于Windows的未来仍然感到担忧,担心它会进一步依赖在线服务,并且Windows 12可能会变得更加依赖云,从而可能促使用户回归更早、更可定制的版本。
这是一个简单的代码探索,灵感来自(并借鉴自)https://iventions.com/,在X平台看到。在这个例子中,我尝试实现一个在用户点击按钮时显示的菜单。仅使用HTML+CSS,不使用JS。有两个剪切路径:菜单通过一个从屏幕左上角增长到右下角的圆来显示。我在这里使用的一个有趣的剪切路径计算(clip-path: circle(calc(1.42 * 100vmax) at 0 0);)基于vmax,它是视口宽度或高度中较大的那个。然后乘以1.42,因为1.42是2的平方根,这是视口宽度与高度之比。第二个剪切路径是一个多边形,用于模拟“射线”。多边形现在是硬编码的,但可以使用js计算,以实现尊重导航尺寸的动态尺寸和响应式设计。感谢您的访问。
## SectorC:一个微型C编译器
SectorC是一个非常小的C编译器,完全容纳在x86机器的512字节引导扇区内——可能是迄今为止最小的。它支持C的一个有用的子集,包括全局变量、函数、`if`和`while`语句、运算符、指针解引用、内联汇编和注释,从而能够编写出令人惊讶的复杂程序。
该编译器通过创新技术实现其小尺寸。它使用空格分隔的“Barely C”语言,有效地创建“超符号”以减少解析开销。它还采用基于哈希的方法来处理标识符,避免了传统的符号表。
尽管存在局限性,SectorC可以运行像移动正弦波动画这样的程序,甚至可以通过PC扬声器播放音乐。它依赖于一个最小的运行时库来实现I/O和基本功能。
该项目表明,显著的功能可以被封装到极其有限的空间中,挑战了关于编译器尺寸的传统观念,并突出了巧妙优化的力量。它证明了创造力,并对编程语言边界进行了有趣的探索。