Bespoke:一门要求程序员"说请"的编程语言
编程世界有一个不太令人愉快的语气问题。我们杀死进程(kill processes)、中止事务(abort transactions)、抛出异常(throw exceptions)、跳出循环(break out of loops)、执行指令(execute instructions)。我们不问自取地获取锁(acquire locks without asking),毫无歉意地修改变量(mutate values without apologising),命令机器返回值(order the machine to return)。
一位开发者决定改变这一切,创造了一门名为 Bespoke 的编程语言——一门为"说请"的人设计的语言。
设计理念
Bespoke 的核心设计理念是:编程应该是一种礼貌的对话,而不是对机器的粗暴命令。语言的语法和语义都围绕着"礼貌"和"尊重"来设计。
在 Bespoke 中,你不会"命令"机器做什么,而是"请求"它做什么。你不会"杀死"进程,而是"请它退出"。你不会"抛出"异常,而是"礼貌地告知"出现了问题。
语法特色
Bespoke 的语法充满了英式礼貌用语:
please关键字:所有操作都需要以please开头,表示请求thank you:用于结束一个代码块,表示感谢sorry:用于异常处理,表示歉意may I:用于请求权限或资源would you mind:用于条件判断
例如,一个简单的 Hello World 程序:
please print "Hello, World"
thank you
一个条件判断:
please if would you mind (x > 5)
please print "x is greater than 5"
thank you
异常处理:
please try
please do_something_risky()
sorry if SomethingWentWrong
please print "Sorry, something went wrong"
thank you
并发模型
Bespoke 的并发模型也体现了礼貌原则。传统语言中,线程之间通过锁来"强制"互斥访问。而在 Bespoke 中,线程通过"请求"和"等待"来协调:
may I have the lock, please:请求获取锁of course:表示同意授予锁after you:表示礼让,让其他线程先执行
这种设计的目的是减少死锁——因为每个线程都在礼貌地等待对方,而不是粗暴地抢占资源。
类型系统
Bespoke 的类型系统也有独特之处。它引入了"礼貌类型"的概念:
polite int:一个有礼貌的整数,在被使用前会先打招呼shy string:一个害羞的字符串,需要被邀请才会显示自己grumpy boolean:一个脾气不好的布尔值,偶尔会拒绝回答
这些类型虽然看起来像是玩笑,但实际上体现了语言设计者对类型系统扩展性的思考。
实现细节
Bespoke 是一门编译型语言,编译器将 Bespoke 代码编译为 C 代码,然后通过 C 编译器生成本机二进制。这种设计使得 Bespoke 可以利用成熟的 C 编译器生态,同时保持语言的独立性。
语言的运行时包含一个"礼貌检查器",在运行时验证代码是否遵守了礼貌规范。如果代码忘记说"please",运行时会发出警告而不是直接报错——因为毕竟,谁都会偶尔忘记礼貌。
这是认真的吗
Bespoke 看起来像是一个玩笑项目,但它实际上提出了一些严肃的问题:
- 编程语言的语气重要吗? 我们使用的语言(包括编程语言)会影响我们的思维方式吗?
- API 设计应该更"礼貌"吗? 好的 API 设计是否应该像有礼貌的对话一样?
- 错误处理的隐喻:我们用"抛出异常""杀死进程"这样的暴力隐喻,是否会影响我们对错误的态度?
这些问题在编程语言设计社区中一直有讨论。Bespoke 用一种幽默的方式把这些问题摆在了台面上。
无论 Bespoke 是否会成为一门被广泛使用的语言,它都提醒我们:编程不仅仅是技术,也是一种表达方式。我们选择的关键词、语法和隐喻,都在塑造我们与机器、与彼此的关系。
也许,在编程中多说几个"please"和"thank you",并不会让代码运行得更快,但可能会让写代码的过程变得更愉快一点。
原文链接:https://blog.hofstede.it/bespoke-a-programming-language-for-people-who-say-please/