主要观点:
- “metaprogramming”不是特定功能名,而是一类功能的统称,不同编程语言的程序员对其有不同理解。
- 讨论编程语言的新功能需考虑语言整体上下文和生态系统,避免对用户产生误解和误用,要考虑更广泛的影响。
- 不能盲目添加功能,要先确定实际问题,列出当前解决方法及不足,再进行设计和提案。
- 编译器就像其他程序,添加新功能需考虑如何实现,如实现 Lisp 风格的宏需要考虑在编译时评估 Gleam 代码等问题。
- 完成研究和设计后应写成文档供社区讨论,提案被接受的可能性小,即使未被采纳也有价值。
关键信息:
- 列举了 C++、Elixir、Java、Ruby、Zig 等语言中对“metaprogramming”的不同理解。
- 强调语言设计要考虑对用户的影响,如避免程序员在压力大时做出后悔的代码决策。
- 说明添加新功能要考虑编译器实现细节,如实现 Lisp 风格宏需增加编译时评估代码的能力。
重要细节:
- template classes and template functions 是 C++ 程序员眼中的“metaprogramming”。
- compile time code execution that manipulates code as data 是 Elixir 程序员眼中的“metaprogramming”。
- runtime reflection 是 Java 程序员眼中的“metaprogramming”。
- 动态“metaprogramming”用
#method_missing
是 Ruby 程序员眼中的。 comptime
是 Zig 程序员眼中的。- Gleam 语言的目标是可预测、可靠、易学习和易阅读,新语言变化不应违背这些目标。
- 不能以“喜欢其他语言的这个功能”等理由作为添加功能的依据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。