锁定老帖子 主题:DSL的讨论
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-08-07
buaawhl 写道 Interpreter is over Code Generator。 meta programming的最高层次是 语言级别直接解决,比如,smalltalk, ruby, python, 还有其他reflection 支持的非常好的语言。 甚至 STL 等 template 技术,也可以算作语言级别。 Code Generation 是最低级别的meta programming解决方案。技术含量也最低。 这个级别必须超越,才能够真正达到质变,完全跳出概念炒作的层次。 nod! 不然没有这么多人关心研究产生式编程了! 其实代码生成也没有那么坏,关键在于生成什么东东,如果是生成结构性的代码,就很容易被人bs,因为这种代码是大都可以用template完成的,同时因为这种代码往往不是最终的产物,就存在同步维护问题。 但如果生成的是功能性代码,这类代码是最终执行代码,那么通常就把用于设计的代码看作是最终产物,最明显的例子是dsl。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-08-07
yimlin 写道 buaawhl 写道 Interpreter is over Code Generator。 meta programming的最高层次是 语言级别直接解决,比如,smalltalk, ruby, python, 还有其他reflection 支持的非常好的语言。 甚至 STL 等 template 技术,也可以算作语言级别。 Code Generation 是最低级别的meta programming解决方案。技术含量也最低。 这个级别必须超越,才能够真正达到质变,完全跳出概念炒作的层次。 nod! 不然没有这么多人关心研究产生式编程了! 其实代码生成也没有那么坏,关键在于生成什么东东,如果是生成结构性的代码,就很容易被人bs,因为这种代码是大都可以用template完成的,同时因为这种代码往往不是最终的产物,就存在同步维护问题。 但如果生成的是功能性代码,这类代码是最终执行代码,那么通常就把用于设计的代码看作是最终产物,最明显的例子是dsl。 这DSL interpreter (compiler)的代码生成,更是罪莫大焉,极度重罪。:D 别看它表面看起来很酷,但改变不了罪恶的本质。 想想看,一个功能的改变,就需要增加DSL语法特性,就需要修改BNF, AST定义,然后重新编译(或者其他手段)。 人工智能有个领域叫做,遗传算法。就是代码自动生成,优胜劣汰。 发展到最终,就是《终结者》里面的天网。 天网对人类犯下了多大的罪行,各位精品电影爱好者应该深有感触。 |
|
返回顶楼 | |
发表时间:2006-08-08
buaawhl 写道 yimlin 写道 buaawhl 写道 Interpreter is over Code Generator。 meta programming的最高层次是 语言级别直接解决,比如,smalltalk, ruby, python, 还有其他reflection 支持的非常好的语言。 甚至 STL 等 template 技术,也可以算作语言级别。 Code Generation 是最低级别的meta programming解决方案。技术含量也最低。 这个级别必须超越,才能够真正达到质变,完全跳出概念炒作的层次。 nod! 不然没有这么多人关心研究产生式编程了! 其实代码生成也没有那么坏,关键在于生成什么东东,如果是生成结构性的代码,就很容易被人bs,因为这种代码是大都可以用template完成的,同时因为这种代码往往不是最终的产物,就存在同步维护问题。 但如果生成的是功能性代码,这类代码是最终执行代码,那么通常就把用于设计的代码看作是最终产物,最明显的例子是dsl。 这DSL interpreter (compiler)的代码生成,更是罪莫大焉,极度重罪。:D 别看它表面看起来很酷,但改变不了罪恶的本质。 想想看,一个功能的改变,就需要增加DSL语法特性,就需要修改BNF, AST定义,然后重新编译(或者其他手段)。 人工智能有个领域叫做,遗传算法。就是代码自动生成,优胜劣汰。 发展到最终,就是《终结者》里面的天网。 天网对人类犯下了多大的罪行,各位精品电影爱好者应该深有感触。 要是这样说,那interpreter也一样了,要加一个功能就需要加增加interpreter,否则也玩不转啊 其实功能的增加,就意味着一定的变化。 现在无非是看变化的代价了,DSL改变语法只是其中一种选择。 (听起来像诡辩 ) |
|
返回顶楼 | |
发表时间:2006-08-08
yimlin 写道 buaawhl 写道 yimlin 写道 buaawhl 写道 Interpreter is over Code Generator。 meta programming的最高层次是 语言级别直接解决,比如,smalltalk, ruby, python, 还有其他reflection 支持的非常好的语言。 甚至 STL 等 template 技术,也可以算作语言级别。 Code Generation 是最低级别的meta programming解决方案。技术含量也最低。 这个级别必须超越,才能够真正达到质变,完全跳出概念炒作的层次。 nod! 不然没有这么多人关心研究产生式编程了! 其实代码生成也没有那么坏,关键在于生成什么东东,如果是生成结构性的代码,就很容易被人bs,因为这种代码是大都可以用template完成的,同时因为这种代码往往不是最终的产物,就存在同步维护问题。 但如果生成的是功能性代码,这类代码是最终执行代码,那么通常就把用于设计的代码看作是最终产物,最明显的例子是dsl。 这DSL interpreter (compiler)的代码生成,更是罪莫大焉,极度重罪。:D 别看它表面看起来很酷,但改变不了罪恶的本质。 想想看,一个功能的改变,就需要增加DSL语法特性,就需要修改BNF, AST定义,然后重新编译(或者其他手段)。 人工智能有个领域叫做,遗传算法。就是代码自动生成,优胜劣汰。 发展到最终,就是《终结者》里面的天网。 天网对人类犯下了多大的罪行,各位精品电影爱好者应该深有感触。 要是这样说,那interpreter也一样了,要加一个功能就需要加增加interpreter,否则也玩不转啊 其实功能的增加,就意味着一定的变化。 现在无非是看变化的代价了,DSL改变语法只是其中一种选择。 (听起来像诡辩 ) 不是诡辩。说的很有道理。是我没有说清楚。 所谓的DSL(Rule Engine等,SQL)都是针对某个特殊领域现场开发出来的特殊语言。发展到极端,就是所谓的LOP,Language Oriented Programming。 我说的这个Interpreter是通用完整语法语言的Interpreter。比如,Ruby, Python, Groovy这些。 当人们为了开发某个领域的应用功能,而随意创造一门新的语言 DSL 的时候,这个语言的成熟度可想而知。考虑的全面度也可想而知。应用的需求变化,很容易超出DSL的能力范围。 而对于通用语言来说,设计的时候,已经考虑了几乎所有的需要覆盖的应用需求。应用的需求变化,很难超出通用语言的能力范围。 |
|
返回顶楼 | |
发表时间:2006-08-09
越说越外行,听着都快不行了。
buaawhl 写道 而对于通用语言来说,设计的时候,已经考虑了几乎所有的需要覆盖的应用需求。应用的需求变化,很难超出通用语言的能力范围。
废话。通用语言是图灵完备的,只要图灵机能解决的问题不管Python还是C一定能解决。什么叫“超出通用语言的能力范围”? buaawhl 写道 当人们为了开发某个领域的应用功能,而随意创造一门新的语言 DSL 的时候,这个语言的成熟度可想而知。考虑的全面度也可想而知。应用的需求变化,很容易超出DSL的能力范围。
DSL不需要成熟和完备。DSL是建立在通用语言的基础之上,它是从实际应用中抽象出来,并且可以继续发展变化的。例如用Ruby编程,一个类库就可以被看作一种内部DSL,DSL的发展实际上就是类库的发展。对于一个业务尚在发展变化的领域,为什么你要期望一种成熟完备的DSL? 看来要坚决打击对DSL的妖魔化之风。 |
|
返回顶楼 | |
发表时间:2006-08-09
看了半天,发现与我无关,不过“图灵完备”是什么东西,肯请那位解释一下?
|
|
返回顶楼 | |
发表时间:2006-08-09
dfchjk 写道 看了半天,发现与我无关,不过“图灵完备”是什么东西,肯请那位解释一下?
wikipedia 写道 In computability theory, an abstract machine or programming language is called Turing complete, Turing equivalent, or (computationally) universal if it has a computational power equivalent to (i.e., capable of emulating) a simplified model of a programmable computer known as the universal Turing machine. Being equivalent to the universal Turing machine essentially means being able to perform any computational task – though it does not mean being able to perform such tasks efficiently, quickly, or easily.
|
|
返回顶楼 | |
发表时间:2006-08-09
简单说就是,一切可计算的问题都能计算,这样的虚拟机或者编程语言就叫图灵完备的。
不是吧……程序员不知道图灵完备,会遭天打雷劈滴…… |
|
返回顶楼 | |
发表时间:2006-08-09
已有的成熟的DSL,研究之。
有新意有潜力的的原创DSL,鼓励之。 任意攒的DSL,坚决妖魔化之。 咱们恐龙时代的 J2EEer不讲究啥图灵完备,咱讲究的是Commen Sense。 不能访问操作系统底层,Java需要提供JNI,C#就要提供Unmanaged Unsafe c++ Code,Ruby要嵌入inline c。这都叫应用需求超出语言能力的范围。 |
|
返回顶楼 | |
发表时间:2006-08-09
超出DSL能力的范围不要紧,你仍然可以换回原生语言,就好像写Rakefile一样,DSL不够用了就用Ruby。“DSL不够用了就没辙”和“DSL不够用了就得全用原生语言”,都属于了解不足的肆意妖魔化。
|
|
返回顶楼 | |