康奈尔 CS

康奈尔大学计算机科学系,全球历史最悠久、最负盛名的计算机系之一,在 AI、系统、理论与编程语言研究领域居于领先地位。

康奈尔大学编译器导论课程大纲

康奈尔大学CS 4120编译器课程2026年春季的教学大纲。内容包括课程介绍、先修要求、教材列表、作业与考试安排以及详细的每周讲座时间表。主要覆盖词法分析、语法解析、语义分析、代码生成和优化等编译器核心知识点。
评论点赞收藏57 天前

康奈尔大学 CS 6120:高级编译器自学在线课程(2020)

康奈尔大学 Adrian Sampson 教授开设的博士级编译器课程 CS 6120 的自学版大纲。内容涵盖中间表示、数据流分析、经典优化、并行化、JIT 编译及垃圾回收等核心与前沿话题。课程特色在于结合学术论文阅读与基于 LLVM 和自制教育 IR (Bril) 的开源编程实战任务,适合希望深入理解编程语言实现及编译器底层原理的技术人员。
评论点赞收藏58 天前

带类型的汇编语言(TAL):为安全代码提供可验证的底层实现

介绍康奈尔大学提出的TAL项目,这是一种带有类型注解和内存管理原语的汇编语言。其核心是通过类型规则保证程序在内存、控制流和类型上的安全性,同时保持足够的灵活性以支持底层编译器优化。该项目实现了针对IA32架构的TALx86,并开发了将类C语言Popcorn编译为TALx86的工具,旨在为安全移动代码和可扩展操作系统内核提供可验证的安全代码生成方案。
评论点赞收藏176 天前

世界上最危险的代码:非浏览器软件中的SSL证书验证

这篇2012年的经典论文指出,除了浏览器外,大量关键软件(如亚马逊AWS SDK、PayPal接口、Android银行App等)的SSL证书验证存在严重缺陷。研究发现,由于底层API设计糟糕且开发者误解参数,这些程序在遭遇中间人攻击时完全失效,导致支付信息和登录凭证泄露。核心问题在于SSL库默认不安全、文档晦涩以及开发者缺乏安全意识。这是一篇揭示工程实践中普遍存在的安全隐患的经典研究,对后端开发和移动端安全极具警示意义。
评论点赞收藏200 天前

死锁缓解策略:预防、检测与避免

这是一篇关于操作系统死锁处理的课程讲义。文章回顾了死锁的四种必要条件,并详细讲解了如何通过打破这些条件来预防死锁,例如使用读写锁、资源抢占回滚、锁排序等。接着介绍了死锁检测机制,包括超时法和资源分配图算法。最后讲解了银行家算法,这是一种通过保持系统处于“安全状态”来避免死锁的方法。内容基础且理论化,适合初学者复习概念,缺乏前沿技术观点或实战深度。
评论点赞收藏211 天前

类型论与函数式编程(1999经典教材前言)

这是一本1999年出版的关于构造类型论的经典教材的前言和目录。作者Simon Thompson阐述了类型论作为连接逻辑与函数式编程的桥梁作用,强调程序开发、验证及从证明中提取代码的能力。书中涵盖了逻辑基础、Lambda演算、类型论的形式系统、数学性质证明以及多种扩展方案(如子集类型、商类型)。内容偏向学术理论和教学,适合计算机科学专业的学生和研究者深入理解类型论的基础与演变。
评论点赞收藏319 天前

Coq战术速查手册

这是一份来自康奈尔大学CS3110课程的Coq证明助手战术参考手册。文章分类整理了用于解决简单目标、转换目标、分解假设以及处理特定类型目标的常用战术(如assumption, rewrite, induction等),并提供了具体的代码示例和解释。属于静态的教学参考资料。
评论点赞收藏502 天前

扁平化AST及其他编译器数据结构的优化技巧

文章介绍了一种在编译器中常用的数据结构优化技巧:将基于指针的抽象语法树(AST)转换为扁平化的数组索引表示。作者通过Rust实现了一个简单的解释器对比实验,展示了这种“Arena分配”方式带来的四大性能优势:更好的内存局部性、更小的引用体积、廉价的分配与释放成本。此外,扁平化还简化了内存生命周期管理,并便于实现哈希合并等优化。实验显示,仅通过替换指针为索引,解释器速度提升了2.4倍。最后,作者还展示了一种利用构建顺序的线性扫描解释器,进一步消除了递归开销。这对关注编译器底层优化、内存管理和Rust/C++系统编程的开发者极具参考价值。
评论点赞收藏582 天前

二进制补码原理解析

这是一篇经典的计算机科学基础教程,详细讲解了二进制补码(Two's Complement)的定义、转换方法及算术运算原理。文章通过具体例子演示了如何将整数转换为补码形式,以及如何在补码体系下进行加减法运算。最后部分从数学角度解释了“取反加一”这一操作背后的逻辑,即通过借位减法推导其等价性。内容准确且适合初学者,但作为基础概念科普,缺乏新颖观点或深度技术争议,主要面向需要复习底层原理的开发者。
评论点赞收藏680 天前

Bril:专为编译器教学设计的中间语言

康奈尔大学副教授 Adrian Sampson 介绍了他为教学专门设计的编译器中间语言 Bril。与 LLVM 等工业级 IL 不同,Bril 优先追求“上手快”和“语义简单”,甚至故意将程序表示为 JSON 格式,以便学生用任何语言处理,并通过 Unix 管道组合工具。文章详细剖析了 Bril 的设计取舍:如极端的 A-Normal Form 带来的冗余、非 SSA 形式导致的后续维护痛苦,以及松散扩展带来的生态混乱。作者坦诚分享了设计中的“坑”(如 phi 指令的语义缺陷),这种基于真实教学痛点的一手工程反思,对编译器开发者、语言设计者及计算机教育者极具参考价值。
评论点赞收藏750 天前

达特茅斯学院的麦金塔往事:一次早期的校园PC普及实验

作者回顾了1980年代达特茅斯学院在大型机与个人电脑之间的战略抉择。尽管当时大型机在计算和网络服务上占优,但作者通过泄露信息提前接触Mac原型,说服校方采用“个人电脑+终端”的双模策略。文章详细描述了Macintosh早期硬件的局限、Apple University Consortium的低价策略,以及达特茅斯在宿舍布线、网络改造和软件适配上的工程细节。这不仅是一次成功的校园IT部署案例,也反映了早期PC时代苹果与IBM的竞争格局及用户体验对技术采纳的决定性影响。
评论点赞收藏759 天前

自动化测试用例缩减实战:从手动到自动的Bug定位技巧

文章介绍了如何使用自动化工具(如Shrinkray和C-Reduce)来缩小测试用例,从而快速定位Bug根因。作者指出手动缩减测试用例既枯燥又容易出错,而自动化工具虽然速度快,但需要编写准确的“有趣性测试脚本”(Interestingness Test)。文章通过实际调试解释器Bug的案例,详细演示了编写该脚本时的常见陷阱及四个关键技巧:使用Shell取反操作符、添加非伪造检查(Not Bogus Check)、使用grep匹配特定错误信息,以及在必要时提供少量手动辅助。最终展示了自动化工具如何成功将复杂的测试代码缩减为极简的最小复现案例。
评论点赞收藏761 天前

高效泛基因组变异图的一个“奇怪”技巧

作者提出了一种名为 FlatGFA 的二进制表示法,用于处理泛基因组变异图。核心思路是将基于指针的数据结构完全“展平”,用数组索引替代指针,从而获得更好的内存局部性并节省空间。这种设计不仅让解析速度比现有工具快十几倍,更关键的是,由于内存布局与磁盘文件一致,实现了零拷贝加载,在特定场景下速度提升了 1300 多倍。文章通过对比实验展示了这种看似朴素的技术手段在常数级优化上的巨大威力,并探讨了其对硬件加速设计的启示。
评论点赞收藏809 天前

网络 Gossip 协议的优势与局限:一份经典的技术审视

康奈尔大学 Ken Birman 教授深入分析了分布式系统中 Gossip 协议的适用边界。文章指出,虽然 Gossip 协议具有简单、负载可控和拓扑无关等优势,但其核心限制在于信息承载能力有限且收敛速度受系统规模影响。在事件突发或恶意节点干扰时,Gossip 可能失效或产生不一致。作者建议,不应盲目使用 Gossip,而应根据具体场景(如数据一致性要求、延迟敏感度)将其与经典可靠多播或其他协议结合,选择最优解。这是一篇对构建去中心化系统有重要参考价值的理论分析。
评论点赞收藏868 天前

面向SPMD编程的逻辑张量索引方法

作者介绍了一种用于并行架构(HammerBlade)的SPMD编程抽象:逻辑张量索引。核心思想是将算法的逻辑索引与底层的数据格式(如行优先、缓存策略)分离。通过一个2D stencil算法示例,展示了如何用同一套逻辑代码生成带缓存和不带缓存两种不同的高性能实现。文中提供了C语言原型代码和gem5仿真性能对比数据,指出虽然缓存在大矩阵上能摊销成本,但当前实现的分支开销较大,未来编译器优化空间明显。这对关注并行计算、编译器设计和高性能编程模型的工程师有较高参考价值。
评论点赞收藏885 天前

网络、群体与市场:解析高度互联的世界

这是康奈尔大学 David Easley 和 Jon Kleinberg 所著经典教材《网络、群体与市场》的官方介绍页。该书融合了经济学、社会学、计算机科学和数学,系统讲解了网络科学的基础理论与应用。内容涵盖图论、博弈论、市场机制、信息网络、网络动力学及制度行为等七大板块,包含弱连接、结构平衡、纳什均衡、PageRank、信息级联、小世界现象等核心概念。页面提供了全书目录链接及预出版草稿下载,主要面向本科生及对跨学科网络研究感兴趣的读者。
评论点赞收藏891 天前

康奈尔大学自修课:CS 6120 高级编译器原理与实践

康奈尔大学 Adrian Sampson 教授的博士级编译器课程 CS 6120 推出了自学版。课程涵盖中间表示、数据流、经典优化及并行化、JIT 和垃圾回收等前沿话题。特色在于结合论文阅读与基于 LLVM 和自制 Bril IR 的开源编程实战任务,旨在通过动手实现巩固理论理解。
评论点赞收藏896 天前

面向确定性并行Java的类型与效应系统解析

文章介绍了一种名为DPJ(Deterministic Parallel Java)的语言扩展方案,旨在解决Java多线程编程中因线程交错导致的非确定性bug(如数据竞争、死锁)。核心思路是通过引入基于区域的类型与效应系统(Type and Effect System),在编译期静态检查并保证程序执行的确定性。主要特性包括区域路径列表(RPLs)、索引参数化数组、子数组划分以及方法互斥注解。作者通过扩展javac编译器实现了该原型,并在多个基准测试中展示了其表达能力和性能优势,仅需修改约10%的代码即可实现并行化且运行时开销极小。文章最后讨论了该方法的局限性及对程序合成技术的展望。
评论点赞收藏935 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。