分享
 
 
 

JetBrains DSL工具MPS发布引起的关于DSL的讨论

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

n江南白衣 10:00:26

JetBrains opens Meta Programming System for Early Access

http://www.theserverside.com/news/thread.tss?thread_id=34619

江南白衣 10:00:46

JetBrains那个DSL制造器终于放出来溜达了

magicgod 10:00:55

是不是以idea为依靠?

江南白衣 10:01:09

an IDE-like language workbench for creating domain-specific languages (DSLs) and programs. It includes a plugin for IntelliJ IDEA which helps to generate Java code from your DSLs.

magicgod 10:01:15

dsl跟rules有什么区别?

江南白衣 10:02:39

Martin Flower最近出来凑热闹,写了一篇关于Language workbench的blog阿,非常综合的总结了面向语言编程,你看他的好了

http://martinfowler.com/articles/languageWorkbench.html

江南白衣 10:03:44

不是说,面向对象的封装不能真的一一映射现实世界.

而面向人类语言习惯的封装,从逻辑学上,更能影射人类的思维.

magicgod 10:04:00

看了一下,真的有点奇怪

江南白衣 10:04:43

他那篇blog,一开始举的例子太长太无聊了,搞得大家频频起身吃零食,去厕所....

buaawhl 10:04:43

LOP.

magicgod 10:05:22

哈哈,是的

magicgod 10:05:41

但我总觉得还是有点隐隐不对劲

buaawhl 10:06:07

groovy, beanshell, js, python, ruby 不都是 LOP吗?

江南白衣 10:06:18

不是吧 ....

buaawhl 10:06:18

LOP的一个例子

magicgod 10:06:20

这又回到了五六十年代人工智能和专家系统的方向了

buaawhl 10:06:43

Lisp允许自定义 语法规则

magicgod 10:06:43

lisp是恐怖的

buaawhl 10:06:56

对。最终的出路就是 人工智能

magicgod 10:07:02

学autocad的时候,真是要晕死了

magicgod 10:07:24

不见得是自然的,应该有一种类自然语言先出现

buaawhl 10:07:28

autocad用Lisp ?

江南白衣 10:07:28

Lisp按MF的分类,属于Internal DSL.用自己来表达DSL

而其他的都属于External DSL,需要转译器

magicgod 10:07:40

我看了ilog的语言,看上去不错

江南白衣 10:07:52

MPS这种是用转译器的阿,不同LISP.

江南白衣 10:08:50

JetBrains的MPS,优点在帮你制造语言的同时,制作这种语言的IDE...

magicgod 10:10:01

应该是为了让这种语言给用户或低级实施人员用吧

江南白衣 10:11:18

周末试用一下再说了,这年头,总是广告做得好,实际没什么用.

buaawhl 10:11:43

MPS is a Java Code generator ?

magicgod 10:12:16

是不是这样的理想:创建一种语言适合客户直接使用

buaawhl 10:12:23

http://www.jetbrains.com/mps/start_mps3.html look its sample

magicgod 10:12:29

那么就相当于把域逻辑的功能放给用户来用

magicgod 10:12:49

这个hello world是有点复杂的,我觉得他举的例子不对

buaawhl 10:12:52

客户直接使用 自然语言。比如,汉语

magicgod 10:13:48

而且更好规范,适合计算机来识别

江南白衣 10:14:25

举个例子吧,SQL属于DSL....你如果不用SQL,也可以用一堆API来进行查询,像hibernate的critexx.....

但SQL明显更易读.

so,把代码封装成语言,在某些情况下比封装成OO的lib更好.

magicgod 10:15:13

是的,那如果封装成OO的语言呢?

magicgod 10:15:56

一个用户写好的DSL代码,继承给另一个用户去使用,岂不是很方便

buaawhl 10:16:57

SQL能够做到的事情很少啊。where = if.

江南白衣 10:17:03

可继承的语言?这不是我的知识范围内了...

buaawhl 10:17:08

if( a = 1) b = 3;

buaawhl 10:17:25

select * from A where b = 3

buaawhl 10:17:43

难度差不多啊

江南白衣 10:17:57

MF说,DSL就是不是不符合图灵XXX的语言,不自足的,只能成为程序的某一方面,而主体必须要General Language(like java)完成.

magicgod 10:18:25

是的,DSL就是要简单

江南白衣 10:18:40

靠,打字太快,

MF说,DSL就是不符合图灵XXX的语言

buaawhl 10:18:43

问题是在于,General Language(like java) 表达 程序的某一方面(简单)的时候, 也相当简单。和DSL一样简单

magicgod 10:18:53

目标不是程序员,而是行业用户

江南白衣 10:19:08

而且,简单的时候你可以不封装阿.

magicgod 10:19:09

如果要到DSL的程度就可以视为DSL

buaawhl 10:19:11

那么,有必要用另一个简单,来定义 本来就简单的东西吗?

buaawhl 10:19:41

行业用户?:-) for example? what they realy need?

江南白衣 10:19:41

不是这个意思啊.

buaawhl 10:19:58

前一段时间,看了一下 Rule Engine

江南白衣 10:20:00

ilog的规则语言就可以让电信的mm自定义收费规则

magicgod 10:20:26

是的,就是要够简单,这只是一个模糊概念

buaawhl 10:21:10

yes. i know iLog. 怎么说呢.那是商业的成功.另外也是业务模块的成功.

magicgod 10:21:54

而且实际上DSL应该是面向实际人群的,比如:电报码是一个非常复杂的编码,可是仍然有大批的业务人员直接操作

江南白衣 10:22:01

其实也不一定直接面对行业用户

只是把某些面向OO的lib ,转为面向语言的封装,产生更多的蓝领.

但我觉得这个方向还有太多东西要研究,MPS只是一次探索

buaawhl 10:22:24

谁能给出一个 具体的 ilog sample ? MPS可以说是 MDA。

buaawhl 10:22:33

Model Graph -> Code

buaawhl 10:23:16

iLog和JRules是同一个产品吗?

风之子 10:23:19

Ilog是rule->Fuction

magicgod 10:24:27

If the call destination number is the preferred numberThen apply the preferred number rate

江南白衣 10:24:27

MPS的内涵一定不只Model Graph -> Code ,看他的那篇总领性的文章,不只如此的.

不过可能第一版只做到这样.

magicgod 10:24:41

If the call destination number is the preferred numberThen apply the preferred number rate

magicgod 10:24:44

If

the call destination number is the preferred number

Then

apply the preferred number rate

magicgod 10:24:53

ilog's bal

庄表伟 10:25:02

这是ilog的代码?

magicgod 10:25:02

已经比较接近自然语言了

庄表伟 10:25:08

让我想起了cobol

buaawhl 10:25:10

yes. i c. 江南白衣(228013) 10:20:00

ilog的规则语言就可以让电信的mm自定义收费规则 。

电信的mm写这个?

magicgod 10:25:13

google上抄来的

buaawhl 10:25:26

是啊。Pascal, VB 也是这样

magicgod 10:25:26

是的,有点象,所以cobol至今还有生命力

magicgod 10:25:43

destination number

magicgod 10:29:09

这应该就是DSL的好处,用户很快搞懂了SQL的基本方法,以后做报表就简单了

buaawhl 10:29:15

可以自定义语言规则。

buaawhl 10:29:27

其实,就是关键字替换了。

江南白衣 10:29:40

不会的,ilog的规则语言也是绑定IDE的,你打个节字,会出来一个下拉选择框,只能选节假日

phalanger 10:29:50

自然语言太自然了不是什么好事,到最后还是要一个语言规则,发展到最后,其实还是要小mm掌握一门“电脑语言”

magicgod 10:30:10

http://blog.csdn.net/calvinxiu/archive/2005/05/27/382372.aspx

magicgod 10:30:20

做了一个比较

江南白衣 10:30:49

就像我们用dtd,xsd限制 xml一样.

magicgod 10:31:32

既然用户需求这么多变,好!干脆开放给你们,自己写去吧!这总算好了吧

buaawhl 10:31:41

对,XML表示逻辑,没有一点优势。iLog采用的是script方式。好多了。

buaawhl 10:32:18

不过,难道iLog要为每一个国家行业定制一种 解释引擎/IDE?

庄表伟 10:33:03

看了你的blog,和我的思路,有很多可以相互参照之处

buaawhl 10:33:13

iLog能够流行起来,完全靠的是,行业经验。和 DSL的优势 没有关系

庄表伟 10:33:40

我现在在写的对于OO的分析,就是认为它事实上无法准确的描述真实世界

庄表伟 10:33:51

而要描述需求世界,OO又是不足的

buaawhl 10:33:54

假设我也是iLog公司,我用支持 中文变量的 VB,一样可以做到这样的程度

江南白衣 10:34:14

ilog但如果不靠DSL ,而是一堆 API,想必大打折扣。

buaawhl 10:34:22

只要把业务模块做好了。

magicgod 10:34:48

关键在于要让用户来写这个东西最好了

buaawhl 10:34:53

是啊,VB 的 function 也可以不带 ( )

庄表伟 10:35:05

要更好的描述需求世界,应该要将真实经验转换为需求世界中的规范定义,然后需要另外的、特定的、描述需求的语言

magicgod 10:35:19

动态语言更好,这其实就是向人工智能的发展

buaawhl 10:35:26

用户用iLog从来就不会定义 function。从来只是调用 function.

庄表伟 10:35:27

这样的语言,究竟是不是要类似自然语言,我却有不同的看法

magicgod 10:35:49

再下去用户就会提要求了,能不能搞懂自己的意思啊

庄表伟 10:35:52

可能类似于model graph这样的图形表示会更加好

buaawhl 10:35:56

那么,VB也是一样。我就给你一本关键字手册,而不是API手册。有什么区别?

magicgod 10:36:27

正是如此,DSL就是领域内的一种语言啊

magicgod 10:36:51

定好语法,函数,然后用户你去写吧,最多给你一个IDE可以调试一把

buaawhl 10:37:07

不是一种。而是多种。:-) ilog 一种,jrules一种,drools一种,

江南白衣 10:37:10

我还是认为语言和API之间的差别是巨大的。

而且APi还受很多继承阿,多重继承阿之类的编程语言本身的限制。

庄表伟 10:37:19

如果我的思路没错的话,那么我的那篇文章,最后会自然的接上DSL这样的语言

庄表伟 10:37:27

magicgod 10:37:33

是的,听了阿飞介绍的GP确实感触比较大

magicgod 10:38:04

就是又回到了原来的世界,语言要定义得简单,让客户能使用,不要设计包罗万象的东西

buaawhl 10:38:07

江南白衣(228013) 10:37:10

我还是认为语言和API之间的差别是巨大的。

而且APi还受很多继承阿,多重继承阿之类的编程语言本身的限制。

应该说 是 关键字 和 API之间的差别吧

江南白衣 10:38:18

MF说,LOP== GP,微软软件工厂,JetBrains MPS三线发展...

magicgod 10:38:23

甚至对于一个项目就设计一种语言

magicgod 10:38:41

然后实际上的软件开发核心让用户来开发,哈哈,完美啊

庄表伟 10:39:20

哪有这么简单,最为困难的部分,就是将真实世界,抽象、界定为含义清晰的需求世界的工作。

buaawhl 10:39:18

magicgod(2240529) 10:38:23

甚至对于一个项目就设计一种语言

magicgod(2240529) 10:38:41

然后实际上的软件开发核心让用户来开发,哈哈,完美啊

LOP文章就是这么鼓吹的。:-)

magicgod 10:39:25

把需求变更的事转嫁到用户上去,干脆我也不用了解业务了,你自己玩去吧,

江南白衣 10:39:26

to buaawhl:哈哈,得找些语言学家和你聊聊天了:)

即使目前是关键字==API,也只是现状,明天会更好

magicgod 10:39:53

在一个小范围的功能中让客户来方便定制,象家电一样

庄表伟 10:39:59

这是需要长期的经验积累的

buaawhl 10:40:15

:-) 明天,当然。我只是力图破除 商业概念的 迷信。

江南白衣 10:40:22

微软那个work beach,又有人试了没有?

magicgod 10:40:39

其实DSL也不是什么先进的概念,只是老调重弹而已

magicgod 10:41:02

IT界需要这样的东西,快被用户逼疯了,项目已经成为人际关系的产物

buaawhl 10:41:02

不要被误导了。这些厂家 的成功决不是因为什么DSL。完全是行业经验的积累。 DSL只是他们炮制出来的壁垒和规则。

buaawhl 10:41:34

用户的培训也是一大笔费用呢

magicgod 10:41:57

那是,DSL是帮助厂家来专注到业务上的

江南白衣 10:42:11

Domain Specific Tools CTP Released for Visual Studio 2005 Beta 2

http://www.theserverside.net/news/thread.tss?thread_id=34253

buaawhl 10:42:20

就说那个电信的例子。不经过培训,MM怎么懂 DSL?

magicgod 10:42:28

用不着再追新技术,到此为止了,框架也不需要了,干脆,咱们上DSL吧,哈哈

buaawhl 10:42:51

而且,那些DSL的逻辑语法极其简单,其实是起着 数据的作用

magicgod 10:42:51

只要培训成本与原来持平即可

江南白衣 10:43:13

微软不是傻子,如果别人是学院派的乱试,微软的加入至少说明点问题。

buaawhl 10:43:41

不可能啊。DSL只有 MS, iLog这样的大公司才搞得起。那属于规则制定啊

buaawhl 10:44:02

小公司 不要想着 定义自己的 DSL

magicgod 10:44:03

行不行的拉出来溜溜,目前成功的DSL已经有了,就看各软件公司如何制定DSL

江南白衣 10:44:22

MS提供的是工具噢.....

magicgod 10:45:00

术语,规则都可以直接制定,那么支持DSL开发的厂商显然是成本更低了

buaawhl 10:45:08

白衣再把那个ms dsl发来,我仔细看看

magicgod 10:45:18

各行业应该都会干这事的

buaawhl 10:45:40

我先详细了解一下 MS DSL的用法

江南白衣 10:47:05

那要先装vs2005b2,我机上只有vs2003,一直没试呢。

江南白衣 10:47:20

http://www.theserverside.net/news/thread.tss?thread_id=34253

buaawhl 10:49:11

这就是刚才那个连接,我还有。我是说,你前几天发来的新闻。 是啊,我也没有2005。没办法试验。也看不到 demo

江南白衣 10:49:31

what新闻?

江南白衣 10:49:47

今天另一个比较好的发布信息是

Backport175 1.0 released: Annotations for Java 1.3 & 1.4 ,codehaus出的。

buaawhl 10:50:08

MS DSL Tool 发布的新闻。好像有用户体验

庄表伟 10:50:10

有没有Flash这样的动态演示呢?

江南白衣 10:51:01

俺那个针对旧项目的ORM,可以用annotation了:)

之前要包含一个meta class,像groovy那样。

buaawhl 10:50:59

其实,从我内心的感觉,DSL Tool = Javacc

江南白衣 10:51:28

是超级加强版的javacc

buaawhl 10:51:32

iLog 那套简单的 if ... then .... 我用javacc也能做出来。

buaawhl 10:52:05

当然有IDE支持

风之子 10:52:10

iLOG的关键是动作语义

风之子 10:52:19

不是if..then

江南白衣 10:52:25

看hibernate里用antlr翻译Hql,用EBNF语法慢慢表示,累死了,而且还有很多不如意的地方,他自己注释起来很多todo...

风之子 10:52:48

Action Semantics

buaawhl 10:53:03

但你这里看到,DSL IDE里面,关键字都在下拉框里面。这里的关键字 就相当于 数据了。

buaawhl 10:53:09

Action Semantics?

江南白衣 10:56:24

Quality-focused Groovy 1.0 pre-release 2 is out

http://www.theserverside.com/news/thread.tss?thread_id=34587

这篇文章的讨论很搞笑...大部分人都在讲

i use groovy for

1. ...

2. ...

很像枪手们在旺场

buaawhl 10:56:42

风之子(17256936) 10:52:10

iLOG的关键是动作语义

啥叫动作语义?for example? 我将来的一个主要理想,就是肃清 buzz word的迷信。

江南白衣 10:56:54

不过的确列举了动态语言一些可用的地方。

庄表伟 10:57:01

是啊是啊,新词太多,晕

buaawhl 10:57:10

http://www.brics.dk/Projects/AS/ Action Semantics

Home Page

庄表伟 10:57:16

buaawhl 11:03:16

3.2 ILog的BAL(Business Action Language)--最完美的王者?

没有实际用过,只能看文档过过瘾。从文档来看,配合Ilog的编辑器,的确就是最完美的规则语言了。

If the call destination number is the preferred numberThen apply the preferred number rate

江南白衣 11:05:12

to buaawhl:

关键字==API,我觉得你抓得很对,很快抓住了Ilog的本质.

但是,抓得太快会忽略了语言的中间过程.

江南白衣 11:05:28

请看下面这段:

江南白衣 11:06:00

如果我们有一辆购物车

并且购物车里面至少有两件物品

并且购物车里面的物品不超过四件

并且如果购物车里面的商品价值至少是100美元

并且如果客户是黄金客户

那么就为该客户打八五折

并且显示信息“我们为您黄金客户打了八五折”

buaawhl 11:06:46

这是一个 and 逻辑

buaawhl 11:07:02

没有 or , 很简单。

江南白衣 11:07:04

这就是一段规则语言.

如果我们先不抓ilog,而是自己也做一次语言分析的练习,那你分析出这门语言有什么要素呢?

庄表伟 11:07:39

这样的规则语言?

buaawhl 11:07:47

要素?what do you mean ?

庄表伟 11:07:49

我编一个,你看看算不算:

庄表伟 11:07:57

我们给他100块

庄表伟 11:08:10

如果他觉得够了,我们就不再给了

庄表伟 11:08:21

如果他觉得不够,我们就再给100

庄表伟 11:08:33

如果他觉得够了,我们就不再给了

庄表伟 11:08:41

如果他觉得不够,我们就再给100

femto 11:08:42

。。。。

庄表伟 11:08:46

如果他觉得够了,我们就不再给了

庄表伟 11:08:47

如果他觉得不够,我们就再给100

femto 11:08:49

他觉得够不够的标准是什么

femto 11:08:51

。。。。

femto 11:08:59

老庄绕口令阿。。

庄表伟 11:09:06

够不够是一个用户输入呀

femto 11:09:10

呵呵

buaawhl 11:09:19

condtions to meet = { 我们有一辆购物车

购物车里面至少有两件物品

购物车里面的物品不超过四件

如果购物车里面的商品价值至少是100美元

客户是黄金客户

}

就为该客户打八五折

显示信息“我们为您黄金客户打了八五折”

江南白衣 11:09:45

我的分析上面那段规则语言的要素有

if ,then, and ,or

> ,=,>=,<=, is ,数值,一些关键字,如黄金客户, 单位(美金),购物车,物品...

buaawhl 11:09:58

where is Or ?

femto 11:10:03

以规则语言为中心的应用应该是

femto 11:10:07

一对逻辑

江南白衣 11:10:07

好,这段没有.

femto 11:10:14

一堆逻辑

femto 11:10:16

经常修改

femto 11:10:28

这样使用才有必要

femto 11:10:39

否则传统的编程足够解决了

庄表伟 11:10:42

白衣,那我刚才的那段,算不算规则语言?

buaawhl 11:11:03

算,简单的条件循环

phalanger 11:11:19

可以用数理逻辑证明一组规则是否完备,问题是所谓的完备的逻辑系统,就是现在目前大多数语言所拥有的那样子了

江南白衣 11:11:47

so,ilog的语言就是 这些if,then,and ,>,<,is加上一些关键字的支持,这就是ilog的DSL了。

你可以说它简单,但他就需要这样。

然后,我们还可以分析用这个思路,其他的领域的DSL

庄表伟 11:12:04

还要正常的取款机逻辑中,还要包括(三次以内,金额足够,每次取款限制)

庄表伟 11:12:41

要表达这种“复杂逻辑”,while语句是很自然需要的

庄表伟 11:12:46

ilog里有没有?

buaawhl 11:12:51

是的。我同意,iLog的语法很清楚。:-)

buaawhl 11:13:40

我的意思是说,VB等,一样可以这么清楚

buaawhl 11:13:51

或者,我用 Javacc也可以作出这么清楚地。

phalanger 11:14:09

很多语言一开始的时候都是很清楚的,慢慢发展越来越不清楚而已

magicgod 11:14:30

我怀疑DSL的走向会不会象普通语言一样

buaawhl 11:15:02

我怀疑DSL有没有必要。简单的东西,用什么表达都是简单的。

江南白衣 11:15:14

不要只抓着ilog不放嘛,从ilog看DSL的整个思路,从java,VB这些通用语言中分离出来,只有自己最关键的关键字,还有行业特有的关键字.....

buaawhl 11:15:29

行业特有的关键字

buaawhl 11:15:42

对。这才是关键

庄表伟 11:15:45

是不是还会有项目特有的关键字?

phalanger 11:15:53

一开始大家都只会有条件,循环,布尔逻辑,基本四则运算几个简单东西。但慢慢什么函数,子过程什么乱七八糟的东西就会因需求而产生,慢慢就会变得庞大

buaawhl 11:16:15

最重要的积累就在这里。一个行业的业务规则变化很小。

buaawhl 11:16:41

iLog的成功,完全是 行业关键字(行业API)的积累。

magicgod 11:17:00

DSL是要用客户熟悉的关键字而不是程序员

buaawhl 11:17:14

和DSL关系不大。DSL是用来圈地的。但是,给人一种印象,DSL是成功的关键。

magicgod 11:17:28

这就是区别吧,DSL要让业务专家来设计的,而不是程序员

magicgod 11:17:43

实现估计还是用传统程序来实现

buaawhl 11:18:31

magicgod(2240529) 11:17:28

这就是区别吧,DSL要让业务专家来设计的,

你的意思是说,业务专家来定义 业务关键字?

buaawhl 11:18:52

还是说,业务专家 用DSL 输入那些规则?

phalanger 11:19:10

业务专家的思维方式也会慢慢遵循程序员的发展过程慢慢变化的。例如某天他们会发现某着业务逻辑几个地方都会用到,于是函数/子过程的需求就会应运而生

magicgod 11:19:16

是业务专家来描述DSL

magicgod 11:19:28

所以业务专家必须保证纯正的业务专家

buaawhl 11:19:40

你是说,业务专家来定义DSL?

magicgod 11:19:43

业务专家要贴近的是最终用户而不是程序员

phalanger 11:19:55

不能因为别人是业务专家就扼杀别人的逻辑能力的

magicgod 11:19:55

是的,其实这就是一种定义业务标准的过程

一剑倾心 11:19:59

庄表伟,关于OO的哲学

http://canonical.blogdriver.com/canonical/761080.html

庄表伟 11:20:05

不懂编程的业务专家,也定义不好DSL的吧

magicgod 11:20:16

不是的,业务专家不应该懂编程

magicgod 11:20:44

编程是一种附加,业务专家就象定义需求一样,根本不考虑实现的问题

magicgod 11:21:03

而只提出要什么,并且用什么来描述对行业内某部分客户是最适合的

buaawhl 11:21:10

DSL Tool 就是给 业务专家用来定义DSL的?

phalanger 11:21:19

例如没有函数,业务专家会发现有些东西改了,他就会很辛苦的逐个去该每一个逻辑。虽然他不一定会提出“函数”这么抽象的东西,但实际上它还是有这样的需求

magicgod 11:21:48

估计还得找人翻译一把,dsl tool还没这么强

buaawhl 11:21:58

yes. 如果逻辑复杂到一定程度,那么dsl就失去了用武之地。

phalanger 11:22:00

慢慢得当函数不能满足需求的时候,业务专家同样会提出很多很多类似于程序员需要的东西,慢慢得OO也就会出来了

magicgod 11:22:08

实际上业务内的逻辑并没有相象得这么复杂

庄表伟 11:22:09

突然联想到Hibernate的数据库冬眠理想,事实上是,如果不能深刻理解数据库,根本用不好Hibernate

江南白衣 11:22:12

我已经决定try一把之前先不讨论了:)

magicgod 11:22:25

DSL的目的就是为了让逻辑简单下来

buaawhl 11:22:41

而简单的情况,一般的脚本描述起来也很简单。 yes. support 白衣' try. thanks.

magicgod 11:22:44

阿飞给我看一下某牛人分析的WEB,其实是一张大图,象非常简单

一剑倾心 11:22:53

谁先举一个现实的例子出来,认为DSL好的人拿出一个实际的例子

phalanger 11:23:05

事务是会发展的,java出来的时候也没有想过后来会这么复杂

magicgod 11:23:17

java出来的时候已经是一个复杂的类库了

magicgod 11:23:36

因为计算机语言出来大多是解决所有问题的,而不是解决小范围问题

magicgod 11:23:50

现在的DSL就是为了解决小范围问题,而省去OO,甚至省去函数

江南白衣 11:24:02

DSL现在一直以SQL做例子.....这是对API论最好的打击

buaawhl 11:24:08

to zhuang : O R 的目的,是为了把 relation db 作为OODB来用。

magicgod 11:24:23

程序员以为自己的计算机语言可以解决所有的问题,但是实际上仅仅是理论上可以解决

buaawhl 11:24:33

SQL里面还有函数呢?:-)

magicgod 11:24:42

实际上外部限制太多了,根本无法解决所有问题

江南白衣 11:24:53

但它是基于sql语言框架下的函数

buaawhl 11:24:56

decode(), to_chart() sql需要这些API做什么?

magicgod 11:24:57

所以DSL提出就解决少数问题来创建一种语言

江南白衣 11:25:12

但它是基于sql语言框架下的函数

magicgod 11:25:18

实际上整个SQL定义是非常简单的,相比于JDK来说

buaawhl 11:25:20

java function 也是基于 java语言框架下的函数

buaawhl 11:25:39

sql能表达的东西也很简单:-)

magicgod 11:25:39

我觉得应该把SQL与整个JDK相比吧

magicgod 11:25:51

是的,就是用简单的东西来解决简单的事

buaawhl 11:26:05

比较一下功能好了。SQL可以实现 刚才 白衣给出的 规则吗?

magicgod 11:26:08

因为计算机语言面向所有问题,但是客户只面向子集

庄表伟 11:26:10

乱了,乱了,我们在缕一缕

江南白衣 11:26:18

但java语言本身没有办法很直观的表达 select xxx from的语言。问问你喜欢用hibernate的Critera APi还是用hql?

magicgod 11:26:21

我们需要非常方便的子集来面向客户的子集

庄表伟 11:26:24

SQL与JDK是一回事

庄表伟 11:26:37

数据库与领域又是另外一回事

庄表伟 11:26:52

从概念来说,我支持magicgod的我们需要非常方便的子集来面向客户的子集

magicgod 11:26:55

DSL并不是什么创新, 其实很象HTML

江南白衣 11:26:58

数据库查询就是一个领域阿

buaawhl 11:27:03

DSL如何表达 select ... where ?

庄表伟 11:27:14

但是从实际的语法来说,我认为ilog这样的语法,是cobol的复辟

magicgod 11:27:19

有没有觉得?HTML是XML的一个子集,用来解决浏览的问题

江南白衣 11:27:36

SQL语言啊, select where是SQL DSL的关键字和特定语法。

庄表伟 11:27:37

吃饭去了

buaawhl 11:27:50

filter( collection, { a = 1;} )

buaawhl 11:28:18

这个 STL-like 就是 select ... where

magicgod 11:28:25

所以HTML流行了

江南白衣 11:28:34

对阿,但是怎么大部分程序员习惯 where a=1多于

filter(collection,{a=1})呢

magicgod 11:28:40

但后来人们要让HTML来解决所有问题,所以XML流行了

magicgod 11:29:15

感觉还是要从客户和低水平人员的角度来考虑

magicgod 11:29:27

idea会过期?

江南白衣 11:29:39

是阿,html,sql, DSL其实早就无处不在了。

只是现在明确提出了,制造 DSL的工具。

buaawhl 11:29:42

I c your point. 你是说,某个特定领域,就是某种语言才适合

magicgod 11:30:02

应该是这个意思

buaawhl 11:30:12

问题是我说的,那些规则表达的领域,DSL并没有表现出SQL这样的优势

buaawhl 11:30:27

并没有显示出来他们特有的 适合度

buaawhl 11:30:42

因为这些DSL在表达 if , then, else.

magicgod 11:30:42

应该说DSL总是适合的

magicgod 11:31:13

因为DSL非常狡猾,如果领域扩大了,那么DSL就可以扩大为某种计算机语言,比如JAVA

buaawhl 11:31:12

比如,VB, pascal 等,优势不是很明显。

magicgod 11:31:24

这也是DSL,只不过用来解决的领域扩大了

buaawhl 11:31:34

不觉得,DSL 有表达 if, else, then 的优势。

江南白衣 11:31:32

有可能, ilog的关键字太少,语法太贴近通用语言,所以优势不明显:0

magicgod 11:31:50

DSL就是贴近用户来描述啊,让用户的学习成本下降

buaawhl 11:32:00

yes. :-)

buaawhl 11:32:23

业务用语 成为 DSL关键字。

magicgod 11:32:24

毕竟出发点不同,所以在细节使用方面,DSL就显示出优势

magicgod 11:32:37

更重要的是DSL是业务专家来设计的,而不是计算机专家

magicgod 11:32:43

我希望的是这样...

buaawhl 11:32:53

业务用语 成为 DSL关键字。 这才是 真正的优势。

共筑佳话 11:33:04

业务专家来设计DSL,估计也贼费尽

共筑佳话 11:33:09

够呛

江南白衣 11:33:14

但总有语法不贴近通用语言的领域的,SQL是其一,我们平时的领域就更加了。V

magicgod 11:34:13

只能由业务专家来设计,因为领域内的语言由业务专家最熟

magicgod 11:34:23

就象SQL是数据库领域内一样

buaawhl 11:34:27

yes. 有些理解了。 同样,这些领域的特点就是 逻辑足够简单。而业务用词足够特殊

magicgod 11:34:58

是的,因为就是要解决特殊的问题,没必要用解决所有问题的语言啊

magicgod 11:35:13

实际上根本不存在要解决所有问题的客户

magicgod 11:35:36

其实客户是不需要JAVA和JDK,只需要DSL类似描述

buaawhl 11:36:22

DSL Tool能够提供这样的定义能力?不同领域的用户,都可以用同一个DSL tool 创建自己的 DSL?

magicgod 11:36:32

就是看清楚了这种事,才提交DSL,并且每一个项目来创建一种DSL

buaawhl 11:36:38

还是说,每个行业一套 DSL?

magicgod 11:37:09

都可以,看你实施了

江南白衣 11:37:09

DSL Tool,就是GP,JetBrains, MS努力的梦想。

buaawhl 11:37:24

每个项目?这太可怕了吧? 学习成本再低,也不能这么折腾啊

magicgod 11:37:28

而DSL总是业务专家这个角色来设计了

magicgod 11:37:57

其实也是这样,第一个项目设计一个DSL,第二个项目改一把就行了

buaawhl 11:38:19

DSL Tool的关键还是要深入 各业务领域的通用方面。

江南白衣 11:38:43

内里的实现还是java,c#的lib

magicgod 11:38:56

是的,现在就是将真正的业务应用上去的时候了

magicgod 11:39:10

抛开乱七八糟的框架和平台,用户和专家不关心这些

magicgod 11:39:36

谁能直接面向需求,谁就有主动权

buaawhl 11:39:38

用户和专家本来就不关心这些 ,:-)

magicgod 11:39:51

IBM的随需而动是有点道理的

buaawhl 11:40:04

不用DSL, 他们也从来不关心这些。:-)

magicgod 11:40:06

但是现在程序员限制了用户和专家,必须来考虑这些问题了

buaawhl 11:40:27

用了DSL,他们反而要关心这些,

buaawhl 11:40:45

江南白衣(228013) 11:38:43

内里的实现还是java,c#的lib

magicgod 11:40:55

不会吧,DSL本来是没有这些细节的

buaawhl 11:41:12

如果以前要关心java, c#,那么现在不仅要关心java, c#,还要关心 DSL.

buaawhl 11:41:41

那你说,以前业务专家为什么要关系 java, c# ?

buaawhl 11:42:01

他们只是做业务分析。

magicgod 11:43:07

因为程序员要关心

magicgod 11:43:31

程序员反馈给业务专家说这个java不支持

magicgod 11:44:00

而现在DSL希望能完全解决行业问题吧

buaawhl 11:44:40

DSL下面的实现不还是java吗?程序员反馈给业务专家说这个java不支持

江南白衣 11:44:42

DSL是需要转译成Java,C# lib的,天上暂时还没馅饼下来

magicgod 11:44:55

本来也就是这样的

magicgod 11:45:17

就算编译了,也是要转成硬件代码的嘛

buaawhl 11:45:26

所以,专家定义DSL的同时,还要考虑java是否支持

江南白衣 11:46:20

有直接翻译成机器码和翻译成java,c#的选择,

显然直接翻译成机器码的难度大NN倍。

magicgod 11:46:36

估计是假定java全支持了吧

magicgod 11:46:37

因为毕竟DSL是子集

buaawhl 11:47:08

yes. :-)

magicgod 11:47:09

正在试用mps

buaawhl 11:47:49

如果DSL Tool考虑了Java支持。那么专家就不用考虑了。

magicgod 11:48:29

是的,估计是这样想的

magicgod 11:48:53

DSL是朴素的经验主义向理论发展的产物

magicgod 11:49:51

定义一个DSL真是复杂啊,非得有人辅助不可啊

共筑佳话 11:50:12

专家应该知道些什么呢,达到了什么层次的知识?

buaawhl 11:50:45

DSL可以看作是一种数据格式,一种配置文件的格式定义。

magicgod 11:50:47

这个概念定义跟类定义不是一样啊?ft

magicgod 11:51:07

专家角色应该只知道业务知识,其他不懂,假定,哈哈

buaawhl 11:51:35

一开始,DSL还是摆脱不了 Programm Languange的框子,明天会更好!!!!

共筑佳话 11:51:51

什么层次的知识?是元层次?元元层次?

magicgod 11:52:29

见鬼了,这东西一定是给程序员用的

magicgod 11:52:34

干脆定义类算了

buaawhl 11:52:46

一开始,DSL还是摆脱不了 Programm Languange的框子,明天会更好!!!!

江南白衣 11:54:27

另外magic god可以留意一下MPS同时定制IDE方面的功能,这是以前yacc没有的

buaawhl 11:55:37

我们还是要忙着写API, 到时候,用DSL包装成关键字 就行了

江南白衣 11:56:54

magic god可以上班时间试mps,太爽了

江南白衣 11:57:02

一定是PM以上级别:)

江南白衣 11:57:59

还有那些11点就喊着去吃饭的.....

magicgod 12:03:58

恐怖,这个操作太可怕了

magicgod 12:05:32

rubyWeb?

magicgod 12:08:41

代码生成居然有错?!

江南白衣 12:15:47

加油

magicgod(2240529) 12:49:15

更象一个代码生成器

magicgod(2240529) 12:49:46

还把我的ctrl+space给废了

magicgod(2240529) 12:50:19

这个生成器好象有点太直接了一点

magicgod(2240529) 12:50:53

举的例子实在不恰当啊,这回JETBRAINS有点乱了

magicgod(2240529) 12:51:49

BUG也太多了一点,需要写一些行业例子,这样就有代表性了

magicgod(2240529) 12:56:28

至少比PETSTORE更高一级的案例,然后用这个案例来套各种方案和工具比较好一点

magicgod(2240529) 12:56:52

这个HELLOWORLD 最后生成了JAVA代码,有点恐怖

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有