论坛首页 综合技术论坛

弱弱的问一问,DSL和模式匹配对于函数式编程很重要吗?

浏览 10018 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (23)
作者 正文
   发表时间:2008-03-22  
嘿嘿,谢谢楼上的,其实直接看SICP,虽然不可能很容易,但我想也不会太摸不着边际,以前还是学习过编译原理(那本龙书),虽然总的来说一知半解的,但一些DFA和LL(1)的程序也写过,算是有个大概的认识。我看了下SICP的目录,觉得更像一本编译原理方面的书籍。
0 请登录后投票
   发表时间:2008-04-08  
simohayha 写道
上次看到一篇讲类型系统的短文,写的挺不错的,我刚好简要的翻译了一下,lz可以看下:

http://simohayha.iteye.com/blog/151653



凑个热闹,对simohayha文章的评论:

很明显,structural subtyping能够解决目前困扰大多数人的OO建模时的分类问题。

可以这么看:structural是基于行为的建模,而之前的Nominal是基于名词的建模。

基于名词更加依赖人的主观判定,虽然这个判定也是基于对模型行为的分析,只不过是在建模的早期就要决定下来(随后写死到程序里面),而往往早期的决定都是不准确的,加上需求的不断深入,这就导致了后续的对模型结构上的改动,这对程序的影响是巨大的。究其原因就是把人的不成熟的主观判定放到了程序里面。

而如果是直接基于行为的类型系统就不会有这个问题了,人的主观判定还是会不断改变,但是不会体现在程序里面(可能更多地体现在文档里),程序里面都是真确的行为,语言环境本身根据行为进行判定。。。一个清净的世界形成了!!!

在我看来,java中的interface也是为了在nominal的类型系统中解决这个问题的,只不过由于本身的限制,没有structural来的彻底。。。

所以现在的动态类型脚本语言(往往是structural)比较受人欢迎,
但是这类语言本身也有问题,它更依赖代码人员的水平和编写单元测试(没有编译期的语法检查),如果做得不好,更容易出现大量低级bug(可怕的是如果测试人员不能100%覆盖,就无法发现)。。。两难阿。
7 请登录后投票
   发表时间:2008-04-08  
引用
所以现在的动态类型脚本语言(往往是structural)比较受人欢迎,
但是这类语言本身也有问题,它更依赖代码人员的水平和编写单元测试(没有编译期的语法检查),如果做得不好,更容易出现大量低级bug(可怕的是如果测试人员不能100%覆盖,就无法发现)。。。两难阿。

stuctural未必就一定要是dynamic的,可以是static的并且是strong的,关键是要建立有一个好的类型系统.现在大部分流行的脚本语言,之所以是dynamic的,是因为强大的类型系统实在是太难编写了,type inference这种技术很是让人头疼.
0 请登录后投票
   发表时间:2008-04-15  
Trustno1 写道
引用
所以现在的动态类型脚本语言(往往是structural)比较受人欢迎,
但是这类语言本身也有问题,它更依赖代码人员的水平和编写单元测试(没有编译期的语法检查),如果做得不好,更容易出现大量低级bug(可怕的是如果测试人员不能100%覆盖,就无法发现)。。。两难阿。

stuctural未必就一定要是dynamic的,可以是static的并且是strong的,关键是要建立有一个好的类型系统.现在大部分流行的脚本语言,之所以是dynamic的,是因为强大的类型系统实在是太难编写了,type inference这种技术很是让人头疼.


弱问一下,如上所说的语言(基于属性/行为的类型系统,且支持编译/优化)现在有成熟可用的么?
0 请登录后投票
   发表时间:2008-11-19  
我来说说Lisp,FP和DSL。

说Lisp适合DSL是因为Lisp的语法结构特殊,你可以很容易地编程直接操纵AST(抽象语法树),用Lisp开发程序就是从底层开始,在开发过程中渐进地形成适合目标应用领域的DSL,而这种DSL实际上就是嵌入在Lisp里,说个不太恰当的比喻,对Lisper来说DSL就像库对其他语言开发者来说一样自然。

而说函数式编程(FP)适合DSL是因为FP特别是纯FP是声明式的(declarative),也就是让开发者在程序中说出她或他要什么而不管怎么做(What, not How),一般来说声明式也是DSL所需要的特点。

其实声明式编程除FP外还包括逻辑式编程(LP)和Constraint-base programming等等,有兴趣可以去wikipedia一下。
0 请登录后投票
   发表时间:2008-11-19   最后修改:2008-11-19
royt 写道
那个类型系统,scheme和erlang像,haskell和ocaml像,如果要学习两种,各挑出一种比较有代表性吧。。。

Prentice 写道
royt 写道
Scheme因为语法很抽象,所以在meta-programming方面很强


对我来说,scheme这种语言吸引人的地方就是,她是很小的语言核心+Macro扩展机制。Macro就是一段程序,把一棵语法树(list)转换成另一棵(list)。现代的scheme macro就是用模式匹配的方式来制定转换规则。




那个macro,不是r5rs里面才引进的么,叫什么“卫生宏”,看了一个英文文章讲述common lisp和scheme的macro系统的区别,硬是看不明白,英文水平太差了,只知道作者的意思是CL的宏实用一些。

除了SICP,市面上都买不到什么scheme的书,都说SICP比较难,自学的话最好有一点scheme/lisp基础。目前只有 The Scheme Programming Language, Third Edition 和 Teach Yourself Scheme in Fixnum Days 的电子书,好多人提到的“little scheme”,不知道哪里下得到。


推荐两个链接,不过大家可能都知道了
http://www.schemers.org/
http://www.readscheme.org/

还有HtDP可以和SICP一起看
http://www.htdp.org/

0 请登录后投票
论坛首页 综合技术版

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