#适合你头脑的语言 – 终有一死的不死者

这篇文章是为Racket Advent Calendar的第 8 天而写。“#lang”是 Racket 中用于声明使用的编程语言的术语,本文以 Racket 为平台讨论编写良好编程语言的一种方法。

主要观点

  • 当表达复杂想法的方式变得足够小且易于记忆时,它就成为了一种语言,如 Racket 的模块系统。
  • 对比 Racket 的模块系统和其他语言的异常处理机制,指出后者不实用,而 Racket 可利用基本原语构建自己的异常语言。
  • 介绍在 Racket 社区的主要项目 Qi,它是用于表达面向流计算的语言,可通过宏嵌入 Racket 中,最近还发展出 curlique 以更灵活地嵌入 Qi。
  • 探讨创建“#lang qi”,使其无缝支持面向流的表达式,并思考如何解决关于“适合大脑”的小语言的问题。
  • 通过使用syntax-parseparen-shape解析和 Racket 的插补点,实现用方括号表示未引号的列表,展示了对语言的探索。
  • 作者创建“language experiments”仓库来尝试这些想法,目前有类似 Clojure 和更 Rackety 的语言,未来将探索更多通用特性。

关键信息和重要细节

  • Racket 的模块系统通过“require”可轻松描述引入模块的方式及各种组合。
  • 其他语言的异常处理接口如raise-argument-error等难以记忆和定义,不实用。
  • Qi 是用于表达面向流计算的语言,通过宏嵌入 Racket,curlique 可更灵活地嵌入 Qi。
  • 使用syntax-parse和插补点可让方括号表示未引号的列表,如(map {~> sqr add1} [1 2 3 4 5])
  • “language experiments”仓库按索引分文件夹存放不同语言,目前有 Clojure 样和更 Rackety 的语言,未来将探索更多通用特性。
阅读 5
0 条评论