本文探讨静态语言为何在追求“表达力”时反而滋生复杂度。作者提出“静态-动态二象性”:同一抽象在编译期与运行期分裂,导致不一致与特性重复,引发学习曲线陡峭、宏与模板泛滥、类型层与值层割裂。文中以 Rust、C++、Haskell 等举例对比记录/数组、和类型/树、递归/类型归纳,展示逻辑可在两层互映却难以复用。作者评析 Idris 的依赖类型与 Zig 的 comptime 作为潜在出路,并呼吁在保留编译期保障的同时减少二象性,重新思考语言设计。

阅读全文 »

本文介绍了一种新的轻量级标记语法标准 Orgdown,旨在把 Org-mode 的标记语言与其 Emacs 实现区分开来。作者认为目前 Org-mode 被误解为“只有 Emacs 的工具”,而标记语言本身的语法设计有很高的价值,可以被更广泛采用。虽然 Markdown 已经很流行,但它在功能和一致性上存在局限,而 Orgdown 既保持简洁,又能提供更强的表达能力和兼容性指数,适合需要更可靠语法支持的用户与工具生态。Orgdown 第一等级 (“Orgdown1”) 定义了一组基本语法(如标题、列表、链接、表格等),适合大多数文字处理场景,并建立了一个兼容性指数来评估各个工具对这些语法的支持情况。文章还号召社区参与,让 Orgdown 成为一个被广泛理解、标准化、工具可用性良好的标记语言。

阅读全文 »

这是对 Monadic parsing in Haskell 一文的翻译。

引言(Introduction)

本文是一篇关于在 Haskell 中定义递归下降解析器(recursive descent parsers)的教程。秉持“一站式服务”的精神,文章把三个领域的材料整合到一个来源中。这三个领域分别是函数式解析器(functional parsers)(Burge, 1975; Wadler, 1985; Hutton, 1992; Fokker, 1995)、使用单子(monads)来组织函数式程序(Wadler, 1990, 1992a, 1992b),以及在 Haskell 中用于单子程序的特殊语法(Jones, 1995; Peterson 等, 1996)。更具体地说,本文展示了如何在 Haskell 中使用 do 记法(do notation)来定义单子解析器。

当然,手写的递归下降解析器在效率上不如由工具生成的自底向上解析器(Aho 等, 1986; Mogensen, 1993; Gill 与 Marlow, 1995)。然而,对于许多研究型应用,一个简单的递归下降解析器已足够。此外,解析器生成器通常仅提供一套固定的组合子(combinators)来描述文法,而本文的方法则完全可扩展:解析器是第一类值(first-class values),我们可以充分利用 Haskell 的能力来为特定应用定义新的组合子。该方法也是展示函数式编程优雅性的一个极佳例子。

本文的目标读者是熟悉 Haskell 并且学过“文法与解析”课程的优秀本科生。具备一些函数式解析器的知识会有帮助,但不要求具备单子方面的经验。基于本文而来的一个 Haskell 库可在网页上获取: http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#pearl(链接已失效)

阅读全文 »

staged event-driven architecture (SEDA) 框架在建模的时候就将负载和资源瓶颈考虑在内,从而可以在高负载的情况下也能工作良好,并且有效防止服务过载。SEDA 架构的基本思想是将业务逻辑切分成一系列通过 queues 连接起来的 stages,组合成一个 data flow 网络去执行。

很久之前就看到过 SEDA 的论文,当时没有太过在意,因为这个 idea 实在是太简单了。最近这几年在多租户系统的隔离性,延迟稳定性方面进行了一些比较深入的工作,又加上最近看到了比较相关的论文和文章之后,突然又产生了一些触动,决定把这篇文章再捞起来写上几句。

0%