问题是这个DSL的度很难把握,放得太松语言会太复杂,收得太紧又学不像。
Regards,
oldrev
在 2007-10-08一的 21:53 +0800,pongba写道:
pongba 写道:
对了,以前的嵌入式sql是否可以算dsl?
--
Regards,
- Oldrev
ExecuteNonQuery ("INSERT INTO employee VALUES ('John', 'Boo')", conn);
这段代码会在编译时展开成标准的 .Net 数据库操作代码,DSL 还是让他们呆在引
号里比较好,省得 hosting 语言变复杂。
参考: http://nemerle.org/SQL_macros
在 2007-10-08一的 21:53 +0800,pongba写道:
> 貌似这个概念被Martine Flower吹捧了好久了。具体可以google一下 :P
>
> Martine Flower把这个编程范式定义为Language Oriented Programming,这个
> 描述其实很精确。
>
> 我个人的感觉,就跟编程界的诸多工具一样,这个工具有两面性。一方面,它的
> 出发点非常好:最直观的就是领域语言了,如今的general purpose language在
> 支持DSL设计方面缺陷很多,导致一些很笨拙的方案,比如C++里面用操作符重载
> 来实现regex,那叫一个丑。我不知道Ruby这方面如何,了解的人指教一下?
> 无论如何,DSL支持在主流语言里面还是一个second-class的特性。
>
> 但另一方面,对DSL进行first-class的支持。其实就是提倡这样一个思想:要把
> 一个general-purpose的语言应用到一个领域,就是先在这个领域做一个DSL,然
> 后再针对这个DSL编程。于是问题来了,谁来设计这个DSL?语言的设计可是比库
> 设计难得多的问题。DSL带来的灵活性同时也使得设计一个接口的选择极大化
> 了,原来在C里面只有光秃秃的函数,接口设计总离不开那几招。后来有了OOP,
> 一下带来了一个额外维度的复杂性。现在来一个DSL,鬼知道有多复杂。当然,
> 复杂性从来都不是阻止去用一个东西的合理理由。一个好的DSL正如一个好的接
> 口一样能够帮助正确使用,阻止错误使用...
>
> 我只想问一个问题,一个典型的高级程序员,也许能够设计出一个足够的C库乃
> 至OO库,但足够设计出一个足够的DSL吗?后者的门槛显然更高,想想正则表达
> 式吧..
>
> 最后一个想法就是,Eric Raymond老大也说过,程序员会仅仅因为能用某个特
> 性,而就去使用某个特性... 这也是为什么C++总被"更"复杂地使用着的原因。
> 那么DSL呢?有多少领域DSL如此重要呢?
>
> --
> 刘未鹏(pongba)|C++的罗浮宫
> http://blog.csdn.net/pongba
> TopLanguage
> http://groups.google.com/group/pongba
> >
--
Regards,
- Oldrev
Nemerle 的 SQL DSL:
ExecuteNonQuery ("INSERT INTO employee VALUES ('John', 'Boo')", conn);
这段代码会在编译时展开成标准的 .Net 数据库操作代码,DSL 还是让他们呆在引
号里比较好,省得 hosting 语言变复杂。
参考: http://nemerle.org/SQL_macros
Nemerle 也有能力解放引号,参考 http://nemerle.org/Syntax_extensions 最后
一节
在 2007-10-11四的 13:08 +0800,pongba写道:
--
Regards,
- Oldrev