论坛首页 编程语言技术论坛

DSL的讨论

浏览 21821 次
锁定老帖子 主题: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。
   发表时间: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定义,然后重新编译(或者其他手段)。

人工智能有个领域叫做,遗传算法。就是代码自动生成,优胜劣汰。
发展到最终,就是《终结者》里面的天网。
天网对人类犯下了多大的罪行,各位精品电影爱好者应该深有感触。
0 请登录后投票
   发表时间: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改变语法只是其中一种选择。
(听起来像诡辩
0 请登录后投票
   发表时间: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的能力范围。

而对于通用语言来说,设计的时候,已经考虑了几乎所有的需要覆盖的应用需求。应用的需求变化,很难超出通用语言的能力范围。
0 请登录后投票
   发表时间:2006-08-09  
越说越外行,听着都快不行了。
buaawhl 写道
而对于通用语言来说,设计的时候,已经考虑了几乎所有的需要覆盖的应用需求。应用的需求变化,很难超出通用语言的能力范围。

废话。通用语言是图灵完备的,只要图灵机能解决的问题不管Python还是C一定能解决。什么叫“超出通用语言的能力范围”?
buaawhl 写道
当人们为了开发某个领域的应用功能,而随意创造一门新的语言 DSL 的时候,这个语言的成熟度可想而知。考虑的全面度也可想而知。应用的需求变化,很容易超出DSL的能力范围。

DSL不需要成熟和完备。DSL是建立在通用语言的基础之上,它是从实际应用中抽象出来,并且可以继续发展变化的。例如用Ruby编程,一个类库就可以被看作一种内部DSL,DSL的发展实际上就是类库的发展。对于一个业务尚在发展变化的领域,为什么你要期望一种成熟完备的DSL?
看来要坚决打击对DSL的妖魔化之风。
0 请登录后投票
   发表时间:2006-08-09  
看了半天,发现与我无关,不过“图灵完备”是什么东西,肯请那位解释一下?
0 请登录后投票
   发表时间: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.
0 请登录后投票
   发表时间:2006-08-09  
简单说就是,一切可计算的问题都能计算,这样的虚拟机或者编程语言就叫图灵完备的。
不是吧……程序员不知道图灵完备,会遭天打雷劈滴……
0 请登录后投票
   发表时间:2006-08-09  
已有的成熟的DSL,研究之。
有新意有潜力的的原创DSL,鼓励之。
任意攒的DSL,坚决妖魔化之。

咱们恐龙时代的 J2EEer不讲究啥图灵完备,咱讲究的是Commen Sense。
不能访问操作系统底层,Java需要提供JNI,C#就要提供Unmanaged Unsafe c++  Code,Ruby要嵌入inline c。这都叫应用需求超出语言能力的范围。
0 请登录后投票
   发表时间:2006-08-09  
超出DSL能力的范围不要紧,你仍然可以换回原生语言,就好像写Rakefile一样,DSL不够用了就用Ruby。“DSL不够用了就没辙”和“DSL不够用了就得全用原生语言”,都属于了解不足的肆意妖魔化。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics