【发布时间】:2010-11-04 11:19:40
【问题描述】:
对我来说,Interpreter 模式听起来很像被称为 Greenspun 第十规则的反模式:
任何足够复杂的 C 或 Fortran 程序都包含一个临时的、非正式指定的、充满错误的、缓慢的 Common Lisp 一半实现。
也就是说,如果您需要使用解释器,您可能会创建一些缓慢、临时且指定不明确的东西。正确的解决方案是从一开始就使用正确的语言。
或者,或者,将一种众所周知且明确指定的语言嵌入到您的应用程序中,例如 Guile(GNU 可嵌入方案)。或者使用 Haskell 作为嵌入式领域特定语言。
但我还没有在实践中看到这一点——您在构建自己的嵌入式语言方面有什么经验?这是个好主意吗?是否比嵌入现有语言更好?
(我不是特别喜欢 lisp。它很好,但 C、Haskell 和 python 以及许多其他语言也是如此。)
【问题讨论】:
-
有一种学派认为,四人组中的 Smalltalkers 将解释器模式放在书中作为一个笑话,只是为了嘲笑 C++ 人群。不幸的是,C++ 人群没有得到这个笑话,现在我们被它困住了。 (当然,笑话是,在 Smalltalk 中,程序员可以获得对编译器和解释器的完全编程运行时访问权限,因此不需要像解释器模式这样的东西。)
标签: design-patterns lisp anti-patterns interpreter-pattern greenspunning