compilers

标签

Cards List
#compilers

在 C 中调用一个函数而不给它命名

Lobsters Hottest ↗ · 2026-10-07

一场关于在 C 语言中不直接命名就调用函数的技术讨论,涵盖底层语言技巧以及编译器和链接器的行为。

0 人收藏 0 人点赞
#compilers

编译器、构建系统及其之外的通信机制

Hacker News Top ↗ · 2026-10-06

探讨编译器与构建系统如何更高效地通信,审视它们之间乃至更广泛范围内的接口与协调机制。

0 人收藏 0 人点赞
#compilers

# 为什么编译器有时使用 `ud2`,有时使用 `int 3` 来标记不可达代码? ## 核心原因 编译器在遇到**不应该被执行的代码**(即"不可达代码"或"陷阱区域")时,会插入特定的机器指令来主动触发崩溃,而不是让它默默执行未定义行为。选择 `ud2` 还是 `int 3` 取决于多个因素。 --- ## 两种指令的区别 | 特性 | `ud2` | `int 3` | |------|-------|---------| | 含义 | 触发"非法指令"异常(#UD) | 触发断点异常(#BP) | | 异常类型 | SIGILL / EXCEPTION_ILLEGAL_INSTRUCTION | SIGTRAP / EXCEPTION_BREAKPOINT | | 字节长度 | 2 字节(`0x0F 0x0B`) | 1 字节(`0xCC`) | | 语义 | "这不是一条合法指令" | "这是一个软件断点" | --- ## 为什么选择 `ud2`? ### 1. 语义更准确 `ud2` 的含义是 **"非法指令"**——即 CPU 明确知道"这条指令根本不存在"。这最能表达编译器的意图: > "如果你执行到了这里,说明程序逻辑出了严重错误。" ### 2. GCC 的默认选择 GCC 在大多数情况下使用 `ud2` 来标记不可达路径,例如: - `__builtin_unreachable()` 的实现 - `switch` 语句中缺少 `default` 分支时 - `noreturn` 函数在末尾的填充 ### 3. 不会被误认为是有意设置的断点 调试器可能会对 `int 3` 做特殊处理(比如自动恢复执行),而 `ud2` 通常会直接被当作致命错误处理。 --- ## 为什么选择 `int 3`? ### 1. Clang/LLVM 的偏好 Clang 编译器更倾向于使用 `int 3`(通常是填充用的 `0xCC` 字节),原因是: - **单字节**:`0xCC` 只有 1 字节,可以更紧凑地填充对齐区域 - **历史惯例**:x86 平台上 `0xCC` 长期被用作填充字节(从 MS-DOS 时代开始) - **MSVC 风格**:Microsoft 的工具链传统上使用 `0xCC` 填充 ### 2. 填充对齐区域 在函数之间或代码段之间的**对齐填充(padding)**中,编译器会用 `int 3` 填充未使用的字节: ```asm func_end: nop ; 对齐填充 int3 ; 或者用 0xCC 填充到下一个对齐边界 next_func: push rbp ... ``` ### 3. 与调试器配合 `int 3` 正是软件断点的实现方式,所以在某些调试场景下,`int 3` 更容易被调试工具识别和处理。 --- ## 总结对比 ``` 编译器 不可达代码标记 填充字节 ───────────────────────────────────────────── GCC ud2 (0x0F 0x0B) nop / int3 Clang int3 (0xCC) int3 (0xCC) MSVC __debugbreak/ud2 0xCC ``` **简单来说:** - **`ud2`** = "这里不应该被到达,如果到了就是 bug" - **`int 3`** = "这里不应该被执行,同时方便调试器处理" 两者都是**安全的陷阱**,确保程序不会默默地继续执行未定义的行为,而是立即崩溃并产生一个可诊断的异常。选择哪一个更多是**编译器团队的偏好和历史传统**,而不是功能上的本质区别。

The Old New Thing (Raymond Chen) ↗ · 2026-10-06 缓存

Raymond Chen 解释了为什么编译器在不可达代码中使用 `int3` 而非 `ud2`:`int3` 用于标记不应存在代码的填充区域(即无效的函数指针),而 `ud2` 用于标记违反语言层面未定义行为的路径。

0 人收藏 0 人点赞
#compilers

@Modular:计算正变得日益异构,而编程它目前意味着要在多种语言之间来回切换。我们的目标……

X AI KOLs Following ↗ · 2026-10-05 缓存

Modular CEO Chris Lattner 将在 SPLASH 2026 上发表主题演讲,介绍面向异构计算时代的系统语言 Mojo,内容涵盖参数化元编程、基于 origins 的所有权模型,以及尚未解决的语言设计难题。

0 人收藏 0 人点赞
#compilers

Refinement E-Graphs

Lobsters Hottest ↗ · 2026-10-05 缓存

Philip Zucker 提出了 "Refinement E-Graphs"(细化 E-图),它是对 E-图的一种扩展,在等价关系之外增加了具有特权地位的 <= 关系,从而支持单向的细化重写规则,可用于数字电路中 don't-care 逻辑等编译器优化场景。

0 人收藏 0 人点赞
#compilers

未来会不会只有一种编程语言?

Reddit r/singularity ↗ · 2026-10-03

一篇讨论帖提出:既然大多数代码将由 LLM 编写,我们是否应该专门设计一种面向 AI 的语言——用户只需描述意图和约束条件,而编译器负责决定使用 Go、Java 或 SQL 等语言的具体实现方案。

0 人收藏 0 人点赞
#compilers

Lobsters 对 Sjamaan 的访谈

Lobsters Hottest ↗ · 2026-10-02 缓存

对 Peter Bex 的访谈——他是 CHICKEN Scheme 的维护者,也是职业 Clojure 开发者。访谈内容涵盖他从 C64 BASIC 走向 Lisp 的经历、对 CHICKEN Scheme 的核心贡献(数值塔、irregex、安全修复),以及他对 Scheme 社区、Racket、Postgres 和 Clojure 的看法。

0 人收藏 0 人点赞
#compilers

基于编译器的 AI 编码代理超越 Claude Code、OpenCode 及其他主流代理与框架(附基准测试链接)

Reddit r/ArtificialInteligence ↗ · 2026-10-01

Benzi 是一个基于编译器的 AI 编码代理,采用确定性静态分析和代码索引,而非直接读取原始源代码。在 SWE-bench Verified 上报告达到 78.2%,每次修复成本低于 10 美分,且读取的 token 数量远少于 Claude Code、DeepSeek 的框架以及 OpenCode。

0 人收藏 0 人点赞
#compilers

@_ndigo:无 bug 的 vibe coding 时代即将到来。Bend2 有潜力成为终极前端编译语言。我把……

X AI KOLs Timeline ↗ · 2026-10-01 缓存

ind-igo/bend-frontend 是一个用 Bend 编写的可组合 Bend 2 前端,只需对程序做一次类型检查,就能为任意后端生成类型化、可序列化的 Core.Program,包括 EVM(通过 bend-evm)和 WASM。

0 人收藏 0 人点赞
#compilers

不动点与强制令

Hacker News Top ↗ · 2026-10-01 缓存

这篇博客文章讨论了单调函数的最小/最大不动点在编译与程序分析中的作用,指出人类编写的算法常默认收敛到错误的极端不动点,并用活跃变量分析、引用计数与类型传播举例说明如何通过正确的初始值找到真正需要的不动点。

0 人收藏 0 人点赞
#compilers

我写了一本免费的开源书,关于如何让ML模型真正快速,从硅片到智能体 [P]

Reddit r/MachineLearning ↗ · 2026-09-29

一本免费的开源书,题为《How to Make Your Model Fast》,从硬件到智能体提供了高效机器学习的系统视角,以帮助优化模型性能。

0 人收藏 0 人点赞
#compilers

C++20的u8/char8_t向后兼容性灾难

Lobsters Hottest ↗ · 2026-09-18 缓存

C++20引入了一个破坏性更改,将u8字符串字面量从const char改为const char8_t,这可能导致依赖先前标准的现有代码库出现编译错误。

0 人收藏 0 人点赞
#compilers

测量 Gauss-Seidel 循环携带依赖并通过循环展开修复它

Hacker News Top ↗ · 2026-09-15 缓存

本文研究了为什么理论上收敛更快的 Gauss-Seidel 方法由于循环携带依赖而表现得比 Jacobi 方法慢,并展示了如何通过循环展开来提高性能。

0 人收藏 0 人点赞
#compilers

尝试使循环自动向量化

Hacker News Top ↗ · 2026-09-10 缓存

本文讨论了在代码循环中实现自动向量化的尝试,重点关注优化技术以提升软件性能。

0 人收藏 0 人点赞
#compilers

@PyTorch:在#PyTorchCon北美2026大会上,内核工程轨道深入探讨编译器、优化、自定义内核等,……

X AI KOLs Timeline ↗ · 2026-09-01 缓存

PyTorchCon北美2026大会设有内核工程轨道,专注于编译器、优化、自定义内核和系统工作,并有Mark Saroufim的主题演讲。

0 人收藏 0 人点赞
#compilers

JIT编译代码在5μs内完成

Hacker News Top ↗ · 2026-08-23 缓存

文章探讨了AI辅助如何简化了创建具有亚微秒级编译时间的快速JIT编译器的过程,并通过一个基于Rust的正则表达式引擎示例进行了演示。

0 人收藏 0 人点赞
#compilers

Mojo 现已开源

Lobsters Hottest ↗ · 2026-08-18 缓存

Mojo 是一种专为AI加速器和GPU设计的编程语言,现已在Apache 2.0许可下完全开源,其编译器和工具链已在GitHub上提供,用于开发和贡献。

0 人收藏 0 人点赞
#compilers

Serokell 对 GHC 的工作:依值类型,第5部分

Lobsters Hottest ↗ · 2026-08-15 缓存

本文详细介绍了 Haskell 的 GHC 编译器在依值类型方面的最新进展,包括 GADTs 中的可见 forall、命名空间指定导入以及其他编译器改进。

0 人收藏 0 人点赞
#compilers

计算图的支配点

Lobsters Hottest ↗ · 2026-08-14 缓存

一篇技术博客文章,解释如何计算图的支配点,比较 Lengauer-Tarjan 算法与“A Simple, Fast Dominance Algorithm”,并深入介绍数据流方法背后的直觉。

0 人收藏 0 人点赞
#compilers

C语言中的尾调用优化相对较新

Hacker News Top ↗ · 2026-08-10 缓存

LWN的一条评论讨论了C语言编译器中尾调用优化相对较新的实现,引用了历史上的局限性,并指出现代的GCC和Clang现已支持该优化,这对解释器实现有潜在好处。

0 人收藏 0 人点赞
← Previous
Next →
← 返回首页

提交意见反馈