免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: OwnWaterloo
打印 上一主题 下一主题

函数式编程语言急先锋:Haskell(获奖名单已公布-2014-3-28) [复制链接]

论坛徽章:
0
41 [报告]
发表于 2014-03-13 10:04 |只看该作者
本帖最后由 Okelani 于 2014-08-14 15:56 编辑

好多没见过的呢!

论坛徽章:
1
亥猪
日期:2013-12-07 17:52:11
42 [报告]
发表于 2014-03-13 14:37 |只看该作者
回复 41# Monox

牛人啊,我凭印象说的,受教了。
   

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
43 [报告]
发表于 2014-03-15 12:40 |只看该作者
老是把书给那些言之有物的。。。言之有物的都会了,为了普及应该给不懂的!

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
44 [报告]
发表于 2014-03-15 17:04 |只看该作者
回复 21# Monox

我也并没有说Haskell一定得这样,而是大部分Haskell程序库倾向于这样。

就xml来说,我不觉得前面提到的Text.XML.Light.Types会比

  1. ["pre" {"class" : "json"} subnodes...]
复制代码
更简单。

并且一旦定义一个新的类型,就丢掉了统一处理数据的方式。它需要特定于该类型的一个小语言。
Why have both deftype and defrecord?
It has always been an unfortunate characteristic of using classes for application domain information that it resulted in information being hidden behind class-specific micro-languages, e.g. even the seemingly harmless employee.getName() is a custom interface to data.

虽然上面是在说OO,但对Text.XML.Light.Types同样适用。
比如它就需要 http://hackage.haskell.org/packa ... XML-Light-Proc.html 里面的一堆特定于这些类型的操作方式, 不能继续使用统一的操作线性结构或关联结构的函数。

当然,在Haskell里还可以继续实现一些type class来回归到统一的处理方式,不过Text.XML.Light没有这样做。

总之,我前面想说的是,Haskell达到编译成功就可以排除很多运行时错误并不是凭空得来的,是通过写额外代码换来的。
定义特定的类型,定义该类型上的操作方式或实现特定的type class或两者兼有。
Haskell的优势只是提供了写额外代码的机制,即带类型推到的静态类型。而很多其他语言可能想写这样的额外代码都没机会。。。

关于Pugs。。。 因为我不会perl。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
45 [报告]
发表于 2014-03-15 17:15 |只看该作者
回复 44# cokeboL

没能普及的原因是缺少书吗?

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
46 [报告]
发表于 2014-03-15 21:12 |只看该作者
回复 45# OwnWaterloo

你在这楼的观点我基本认同,事实上,我上面回你帖的时候就想提OO的,事实上,根据我的理解,在Haskell里之所以有必要自己定义一堆的类型就像面向对象语言里需要定义一大堆的类是一样的。在很多面向对象语言中类都不是必须定义的,但是大多数人还是倾向于定义更多的类来处理特定的数据类型。当然面向对象的编程技术也是倍受争议的领域。不过另一方面,我之所以之前没有拿面向对象来类比,是因为Haskell的自定义类型在我看来比类更强大灵活,因此显得更有必要。这个特性确实是Haskell写出来的程序只要编译通过就几乎没有bug的一个很重要的方面。事实上这种特性对于避免bug进最终的程序是如此的重要,像Ada这种(可能)比Haskell更有名的语言虽然不是函数式编程语言但是也提供这种特性。而Ada就是为了开发安全的军用软件而开发的。
    另一方面,我这里就不评论Haskell的代码简单与否了,这个是多方面的问题不太好说,很多事不能说要么是0要么是1,世界是多元的。我对Text.XML.Light.Types并不熟悉,这个库也并不一定是Haskell里解析XML的代表库,并不一定写得很好。我倒是用过HXT这个库,这个库用了很多Haskell里比较高级的概念和技术,比如Arrow之类的,接口啊什么的就设计得很简洁很有Haskell的味道,而且不同的解析结果可以很好的统一处理,统一处理这个并没有使用type class的技术。在Haskell里type class虽然很强大,但是并不是唯一的技术,而且很多时候并不是最好的技术。
Haskell达到编译成功就可以排除很多运行时错误确实需要通过写额外代码来换,但是这并不表示Haskell会增加代码的复杂性和长度。有三个方面的原因,首先,这些额外的代码并不仅仅是为了达到编译成功就可以排除运行时bug,很多都是为了和Haskell的其他子系统进行整合。而这些整合的代码恰恰可以用来降低整体代码的复杂性和长度。另外,正如前面提到的,写C++之类的,也要写类啊什么的很多额外的代码,而这些额外的代码常常会导致代码过于复杂,并且降低可扩展性,从而在需要扩展的时候又要增加更多的代码。第三,我忘了我要说的第三点了,算了。
唉,其实我也不是不想说Haskell也有很多问题了,并不想说Haskell就是最好的语言,更何况我自己对Haskell的了解也很有限。不过,我觉得只有自己真真去体会Haskell的设计思想和决策并真正的爱上那些特性才能体会那些特性到底有多好,而另一方面其他人坚持说那些特性没有说的那么好什么的我觉得这些也无所谓,任何试图把自己的想法强加给别人的尝试总是会以失败告终。所以,是不是别人说的那么回事还是自己去判断要好点。
结论是我很喜欢Haskell,不在意其他人不喜欢Haskell,更不在意其他人试图让我相信Haskell没有传说的那么好。

或者,再多加一句话吧(其实我写这帖是让自己不去思考,让文字跑到我的指尖的时候按下键盘写成的),像Lua只有一种数据结构,叫做列表,它一样工作得很好,我觉得拿一种语言和另一种语言比并没有什么太大的好处。在Haskell里到底要不要自己定义类型也是写代码的人自己决定。写C++的人也一样可以一个类也不写,不过,什么是好代码,什么不是好代码那是另一回事了,更何况这个Text.XML.Light.Types也并不一定是好代码。好吧,我真不知道我都写了些啥,为什么写这些内容,唉。

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
47 [报告]
发表于 2014-03-16 19:27 |只看该作者
刚看了下,维基百科
  1. 唐龙(1477年-1546年),字虞佐,浙江承宣布政使司金华府兰溪县(今浙江省兰溪市)人,明朝政治人物,官明朝吏部尚书、刑部尚书、兵部尚书,同进士出身。
复制代码
你还真敢说

回复 40# xcltapestry


   

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
48 [报告]
发表于 2014-03-18 09:25 |只看该作者
哈哈,ow主持的啊,一直没看到。


得反省下自己,除c外,有过了解common lisp, scheme,haskell,erlang
最近在看golang。
cl买过实战编程,看了不少章,但写的都是书上的例子。
scheme的用ikarus或者chez 学sicp,好像是两章半。
haskell也是看real world和主贴里的这本书,rwh也是前两章。。。
erlang有买 erlang otp并发实践,看了几章。。。

这是我最大最大的问题,不能坚持,
内容简单的时候还可以,稍微有难度,需要有突破点的时候,往往突破不了就会放下,然后就慢慢健忘,转移了。
需要改变。

最近在用golang写个很小的blog程序,还是先坚持这个吧。

评分

参与人数 1可用积分 +5 收起 理由
OwnWaterloo + 5 赞一个!

查看全部评分

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
49 [报告]
发表于 2014-03-19 02:15 |只看该作者
回复 49# pandaiam

感觉Go的函数式风格不如你提到的另外几门语言那么强啊。。。
有空多分享分享经验呗。。。
我也想弄一个blog。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
50 [报告]
发表于 2014-03-19 03:11 |只看该作者
回复 47# Monox

其实自己相比动态类型更喜欢静态类型一些。学Haskell的原因之一也是动态类型语言用多了总感觉有点心虚于是想找一个静态类型的语言来学。。。

而前面对Haskell静态类型的那些言论主要是为了避免自己盲从一些新技术。
除了它本身是什么之外,还包括它意图解决的问题、适合的领域、和其他解决方案的比较等等。
可能是C++留下的习惯吧,如果总想把学到的东西尽可能地用上,一般来说最终是会倒霉的。。。

关于选择Text.XML.Light。
因为当时需要解析darcs的输出,于是根据这里的推荐:
I would recommend:
    xml, if your task is simple
    haxml, if your task is complex
    hxt, if you like arrows
    hexpat if you need high performance

没有多余的时间一个一个尝试而选了(他说的)最简单的那个。。。

关于统一处理,我的意思这样的。
如果有一套函数能统一地将[(k,v)],Map k v,以及xml里的attributes等等当作关联性容器处理而不是分别使用Prelude.lookup, Data.Map.lookup或者Text.XML.Light.Proc.findAttr各自一套,那么根据问题领域定义不同的类型也没什么问题。
所以才提到type class。
而Arrow不是解决这个问题的吧? 还是我理解错了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP