h*i 发帖数: 3446 | 1 immutable是会有存储和运行时间上的overhead,但这些都会被硬件进步和优化技术解
决。研究各种优化技术是计算机科学应该搞的正事,也是计算机科学进步的动力。
目前来说,对绝大多数应用,现有的immutable data structure的效率足够用了。以
Clojure为例,我还从来没听说过有人抱怨过Clojure运行慢的(抱怨启动速度慢的很多
,那是Clojure编译器在JVM上实现的问题,在Javascript上就没有这么明显的问题)。
存储空间的话,我的经验是Clojure程序和一般的Java程序内存消耗差不多。其实如果
仔细研究一下immutable的工作原理,就会发现, 其实它并不会占用更多内存,因为用
不到的数据都会被垃圾回收,而用到的数据immutable和mutable没有太多区别。当然
immutable对垃圾回收器的压力要大些。Clojure有transducer这类技术,可以减少计算
中间结果数据的产生。
除了函数可以被传来传去,还有就是函数都是带closure的,我觉得这很重要。 |
|
h*i 发帖数: 3446 | 2 这个不太对。
Clojure的绝大部分用户都是从Java, ruby, python这些转过来的。很少有从其他Lisp
转到Clojure的。大部分Clolurians对macro没有什么感情,用Clojure不是因为macro,
而是因为functional programming。
而FP, 要么就是haskell这派的,要么就是Clojure这派的。这是两种不同的人,前者
觉得人是不可靠的,需要工具帮忙;后者觉得,若为自由故,一切皆可抛。
这两种人,即使一开始结婚了,最后还是会分手。比如Facebook买的wit.ai, 一直是个
Clojure店,最近宣布要用Haskell重写。 |
|
t****a 发帖数: 1212 | 3 感觉就是不想用其他语言了,连python在内。所以也不谈什么对其他语言的帮助了,真
要逼着我去用其他语言,大概就想办法挑选一些support FP的语言来做。
Pros:
clojure配emacs的slime写程序太爽了阿,写几句话测试几句话,然后包裹成函数。R除
外,R还是超爽,本身就是functional programming,而且和emacs+org-mode配合的更
好。不过需要package的时候还是要用python。
现在可以天天打乒乓球了,很爽。因为reproducible research+clojure+
cascalog+R+d3很快把大数据的计算和分析报告搞定了...
Cons:
Clojure是动态语言,没有静态检查。就算自己的程序很小心,但调用的某个package里
的函数行为不对劲,也会出问题。比如incanter里头的柏松分布随机数居然有时候返回
list有时候返回int,这个坑不注意写的时候没事,真运行的时候挂了查很久才查出源
头来。
所以,还是慎重考虑学一门静态检查的FP语言,不然程序写大了没有静态检查还是蛮恐
怖的。
单打独斗,周围的人不用这种语... 阅读全帖 |
|
|
d**e 发帖数: 6098 | 5 ☆─────────────────────────────────────☆
gloomyturkey (一只郁闷的火鸡) 于 (Sun Oct 6 12:59:58 2013, 美东) 提到:
很久不来这个版,这次看见,忍不住要说说:
-好在大部分网友都是明白人,知道那是个无理取闹的帖子,从ID就明白。
-站方的态度很差劲:这样一个帖子上十大热门话题,如果号称是机器计算出来的,还
勉强可以说;放进十大推荐,就是摆明为了流量不顾一切了。这样没脑子的攻击文章,
你推荐什么?!
-leetcode是我好朋友,他是我见过的最勤奋的人之一,几乎每天写code,维护网站到
凌晨3,4点。这些无偿劳动之外,还要每个月贴钱给host server。在这里认真找CS工
作的,心里都应该明白从leetcode那里得到的是什么样的帮助。
-对于找工作的不顺利,很多人都有过,但是没有道理乱发泄。“我都把leetcode刷了
3遍了,算法题都做出来了,为什么不给offer?" leetcode既聪明也勤奋,那些题都是
想得很清楚的,都还曾经被G拒过,你杯具一次有什么好抱怨的?
-每一次失败其实都... 阅读全帖 |
|
h*i 发帖数: 3446 | 6 这个公司用Clojure,做卫星图像处理,在三番,主办每月的Bay Area Clojure Meetup
,目前在招人。
作为一个Clojure用户,我就知道这些。另,我公司也在招人,如果你会Clojure,请PM
我。 |
|
c******n 发帖数: 4965 | 7 I don't really see the point of using functional programming languages for
real production projects, though clojure is very popular now.
my point is that in a few cases you do need to operate on functions, all
languages have such features: C has function pointers, java has anonymous
inner classes, python has lambda. it's just that they do not openly
advertise them as "functional".
but even clojure itself does not recommend using non-named functions
recursive, but isn't operating on functions th... 阅读全帖 |
|
c******n 发帖数: 4965 | 8 I don't really see the point of using functional programming languages for
real production projects, though clojure is very popular now.
my point is that in a few cases you do need to operate on functions, all
languages have such features: C has function pointers, java has anonymous
inner classes, python has lambda. it's just that they do not openly
advertise them as "functional".
but even clojure itself does not recommend using non-named functions
recursive, but isn't operating on functions th... 阅读全帖 |
|
f******x 发帖数: 98 | 9 It's meaningless to invoke tenure, years of experience, market dominance or
salary in a discussion about technologies. The world is never short of
examples of stupid but highly paid people, or stupid but commercially
successful products. Commercial success does not necessarily mean
technological superiority, similarly the programmer's salary is just a
reflection of market supply and demand, nothing more. Invoking tenure or
salary is the quickest and surest way to degenerate an otherwise informat... 阅读全帖 |
|
m******t 发帖数: 635 | 10 开发用clojure的话,你用什么editor? 你的ClojureScript开发环境能介绍下么?
我年初的时候学了下Clojure,后来半年弄iOS app去了,现在想把Clojure和
ClojureScript从新拣起来,不知道现在流行的开发配置是怎样的。我那个时候是IDEA
J + La Clojure plugin
开发ClojureScript是看的ClojureScript Up and Running这本书。 |
|
z****e 发帖数: 54598 | 11 真正合理的multi-paradigm应该是要用的时候,通过一个插件或者类库来扩展
不要用的时候,不让你用,而不是让你可用可不用的选择
java这点做得很好,你想aop,那就必需弄aspect j才能用
不装就不让你用,因为程序猿习惯于装逼
它写了,往往不在乎别人的感受,只要它有装逼的空间,它就会去装
现在的工具总是尝试着做得又大又全,什么都提供
那些看上去很fancy的feature,只要有机会它就会去用,而且散落在代码的各个角落
debug都debug不出来,这是接盘时候最头疼的问题
clojure在fp上其实做得比scala好,就在于clojure它介入java空间相对少
不影响oo基础之上,你要用clojure,你得额外安装lib,而不是像scala一样
把两种不同的paradigm凑在一起,凑在一起的结果就是两不象,最后fp的人不喜欢
oo的人也不喜欢,因为喜欢oo的程序猿会讨厌代码里面fp的部分
反过来也一样,代码的耦合性增强了,大幅降低了可读性,不错我觉得clojure做得还
不够好
你看aop的aspect j对一般java的侵入就较少,几乎是强制要求aop的代码和oo... 阅读全帖 |
|
m******t 发帖数: 635 | 12 我给补充下,能够打通前后端的除了Javascript,还有Clojure/ClojureScript组合,
后者的Clojure已经比较成熟,ClojureScript还在成熟中(已经有生产系统中使用的例
子)。我个人认为后者组合更有潜力,毕竟Clojure+JVM在后端的实力不是Nodejs那套
能够比的,而且Javascript语言本身比较烂,无数坑在那里等着。希望大家都找机会尝
试Clojure/ClojureScript。 |
|
|
d*******e 发帖数: 4 | 14 Please polish your English. See parentheses below for corrections and
suggestions. Corrected those that are blatantly wrong. However, most non-
idiomatic usages are left untouched.
I don't really see the point of using functional programming languages for
real production projects, though clojure is very popular now.
my point is that in a few cases (WHERE) you do need to operate on functions,
all
languages have such features: C has function pointers, java has anonymous
inner classes, python has ... 阅读全帖 |
|
z****e 发帖数: 54598 | 15 现在vert.x上也是把clojure的进度提前到scala之前
现在不知道vert.x的scala支持要到什么时候才出来
貌似很多人贡献,但是进度远不如只有那么几个人的clojure快
clojure已经beta3了,很快了,最近几个发布都跟clojure有关 |
|
z****e 发帖数: 54598 | 16 I would say it depends on your experience and your goals. Groovy would be
the easiest transition, and if you don't already know a good dynamic
language this would be a good one. You can basically start with Java and
then "Groovify" it, and it is the only language with a joint compiler to
compile your Groovy and Java all at once. You can easily extend a Java class
with Groovy, and then extend that Groovy with Java. Try that in any other
JVM language. Given that Groovy was acquired by SpringSource... 阅读全帖 |
|
|
|
h*i 发帖数: 3446 | 19 从来没听到一个Clojure程序员抱怨别人的Clojure代码难读的。大部分开源的Clojure
库都没有配套的文档,原因正是因为Clojure代码好读,大多数作者都懒得写文档,用
户都是直接去看源代码的,一般就是两三个文件,几百行代码,扫一眼就行了,就那么
几个公开的var可以用。
dominate |
|
h*i 发帖数: 3446 | 20 如果代码也很可读呢?
我还没听说过一个Clojure程序员抱怨读不懂别人的Clojure代码的,正在学习Clojure
的人
除外。
的确是这样,我在学Clojure的时候,有两个月觉得自己都不会写代码了。 呵呵,是有
这么一个过程,我是靠做4clojure.com的题来翻过这个坎的,过了之后,觉得这个语言
真他妈简单,老子再也不想学别人创造的什么鸟语法了。Life is too short. |
|
h*i 发帖数: 3446 | 21 我的观点很清楚,那种数学抽象的变量对大部分人来说是不直观的,需要有意识的去学
习,而不是已经变成了程序员的人们想象的那么直观和不可缺少。你说来说去就是“小
学都学了的,blah blah", 这和我说的不矛盾。
Clojure当然用OOP,可以说是继承了OOP好的方面,比如只有protocol,相当于Java的
interface, 没有继承; 有record,相当于Java的class, 但只能implement protocol,
没有自己的method. 等等。 这些都是design pattern鼓励的一些做法,Clojure在语言
层面强制执行而已。 Clojure要搞大系统,鼓励用component https://github.com/
stuartsierra/component), 这玩意就是DI, 和Spring差不多。
你没用过Clojure, 认识有偏差,可以理解,大家相互学习嘛。 |
|
a*****e 发帖数: 1700 | 22 首先,没有任何 FP 语言是不支持 mutable 的!持有这种观点的,请先去补习一下基
础知识。
鉴别 FP (其实是 declarative)和 imperative 的关键是看它们对 mutability 的区分:
A. every variable is mutable. 多数 duck typed 脚本语言都是这类。
B. mutable by default, immutable by declaration. Java, C, C++ 等勉强属于这类。
C. immutable by default, mutable by declaration. SML, Clojure,
Haskell 属于这类。
然后 B 和 C 都还可以进一步细分,根据 declaration 到底是说变量,还是类型,还
是操作,以下是一些例子。但这之前,有必要先讲讲闭包歧义这个问题:
闭包(Closure)是说将一个函数体里面的非本地变量的值和当前环境(lexical scope
)变量的值做绑定。要弄清楚这里面的语义,在大多数语言里都势必牵涉到一个实现的
问题,就是如果当前环境里一个局部变量... 阅读全帖 |
|
h*i 发帖数: 3446 | 23 去年底的调查表明,78%以上的Clojure用户是在用Clojure来写Web。
Clojure的哲学是用简单小型的模块来自己组装应用,所以node, rails, djingo那种包
含一切的Web框架不是很流行,不过也是有的,比如说immutant,底层用的是undertow。
在server端的,ring是大部分Clojure Web共用的底层模块,在ring的基础上,
compojure是常见的routing模块, hiccup是很常用的html DSL,等等。其他的各种web
有关的小的库很多,几乎什么功能都有几种不同的选择,看你自己的需求。
Browser端,现在基于react.js的ClojureScript框架很火(om和reagent),原因是
clojurescrip的immutable数据可以让diffing算法比native javascript要快很多。
这样的话,基于react.js的clojurescript框架比react.js本身还要快,听起来这是很
counter-intuitive的,但理解了immutable data, 就会发现其实很自然。di... 阅读全帖 |
|
h*i 发帖数: 3446 | 24 在我看来,FP与IP语言的主要区别就是immutable data。如果缺省数据结构是
immutable的, 那就是FP,否则就是IP。所以Scala在我看来不是一个FP语言,不用拿来
给我说事。
用Clojure,想要不FP也可以,可以一切用var, atom, ref, agent, transcient, etc
,但现实项目中就没有人是这么写的。某些Clojure初学者倒是想这么写来着,但很快
就发现这是不可能的,太痛苦了。所以Clojure的真实世界的项目都是FP的。
要不你在github上找个非FP的Clojure项目来? |
|
h*i 发帖数: 3446 | 25 所以说不要误导小朋友。小朋友以为你是技术大牛,你说Clojure不行了,人家以为
Clojure有啥大问题了。
你要说工作机会多少,Java最多,what's the point?
话说回来,Clojure的工作机会是越来越多,目前的状况是Clojure工作机会比能找到的
人多,招人难得很,所以很多工作机会都写明了可以远程工作,“不行了”是咋来的? |
|
h*i 发帖数: 3446 | 26 spark streaming又不是真的straming,是micro batch。要用真的streaming的话,还是
得storm这种。
storm的问题很多,主要是不够灵活,deploy很复杂,主要原因是没有贯彻Clojure的精
髓。当然了,写storm的那几年,Clojure的精髓是啥大家都还不太清楚。
现在比较清楚了,就是以数据为中心, Data > Function > Macro。纯用Clojure 的话
,Clojur现在出了个叫onyx的平台,可以取代storm, spark之类的技术。 |
|
h*i 发帖数: 3446 | 27 哈哈,你说的就是Clojure啊。Clojure就是三种括号都用上的Lisp。三种括号意义也是
一致的:
() - 调用,定义,有顺序,第一个元素是特殊的
[] - 列, 有顺序,可按位置随机访问
{} - key-value映射,无顺序,按key访问
就比JSON多了一对()。Clojure其实就是在代码里面写JSON,不过比JSON数据类型更丰
富。我说所以说Clojure是面向数据的程序语言,Data-Oriented Programming (DOP)。
好,这词是我的发明。欢迎使用,注明是我发明的就行了:-) |
|
g****t 发帖数: 31659 | 28 括号这个emacs应该有很多的插件吧
: 哈哈,你说的就是Clojure啊。Clojure就是三种括号都用上的Lisp。三种括号意
义也是
: 一致的:
: () - 调用,定义,有顺序,第一个元素是特殊的
: [] - 列, 有顺序,可按位置随机访问
: {} - key-value映射,无顺序,按key访问
: 就比JSON多了一对()。Clojure其实就是在代码里面写JSON,不过比JSON数据类
型更丰
: 富。我说所以说Clojure是面向数据的程序语言,Data-Oriented Programming (
DOP)。
: 好,这词是我的发明。欢迎使用,注明是我发明的就行了:-)
|
|
h*i 发帖数: 3446 | 29 Clojure会一直存在下去。就算乌龟壳发疯,把java废了,clojure还是会在其他平台上
继续存在,继续作为某些类型的资深码农喜爱的武器。
现在我这小公司招人,发现资深码农反而容易招到,就是因为他们是Clojure的扇子,
宁可少拿钱,也愿意天天写Clojure。
反而是新毕业生难招到,想想也是,新毕业生,没有多少愿意去个名不见经传的小公司
的。我们当年自己何尝不是这样的呢? |
|
g****t 发帖数: 31659 | 30 新毕业生要弄绿卡,倒不一定对小公司不感兴趣。
: Clojure会一直存在下去。就算乌龟壳发疯,把java废了,clojure还是会在其他
平台上
: 继续存在,继续作为某些类型的资深码农喜爱的武器。
: 现在我这小公司招人,发现资深码农反而容易招到,就是因为他们是Clojure的
扇子,
: 宁可少拿钱,也愿意天天写Clojure。
: 反而是新毕业生难招到,想想也是,新毕业生,没有多少愿意去个名不见经传的
小公司
: 的。我们当年自己何尝不是这样的呢?
|
|
z****e 发帖数: 54598 | 31
java 9出来了
clojure升级了么?
没发现用不了么?
clojure还在用sun的那些不安全的包
jigsaw影响比较大的jvm语言就是clojure,其他都还好
kotlin已经升级到9了,最快的一个,不算java和js(nashorn)的话
这两个是oracle官方支持的,这不能算
其他的估计clojure会成为最慢的一个,就看jython是不是会更慢
用一个东西呢,是有前提的
以前用高阶函数,是没有办法
现在有了coroutine,选择多了一个
就不需要高阶函数来帮忙解决callback问题了
那自然就挑容易的搞了
应该这么说,coroutine提供了高阶函数以外的一种选择
让我们可以不需要用高阶函数了
偶尔用一用,比如
button.action = lambda{|now|
canvas.clear()
canvas.image(image, 0, 0)
}
这种可以接受,但是大量出现高阶函数
那个写起来,呵呵 |
|
h*i 发帖数: 3446 | 32 Communication of ACM(最权威计算机杂志)最新文章:
A Large-Scale Study of Programming Languages and Code Quality in GitHub
https://cacm.acm.org/magazines/2017/10/221326-a-large-scale-study-of-
programming-languages-and-code-quality-in-github/fulltext
结论:
1. FP语言代码质量最高,虫子最少。与虫子数量进行的回归分析中,统计结果显著的
最差和最好的语言如下:
最好:Clojure, -.30 ***
Haskell -.26 ***
Scala -.24 ***
Ruby -.13 **
最差:C++ .18 ***
Obj. C .15 **
C .11 **
PHP .10 *
Python .08 *
2. 编程语言的应用范... 阅读全帖 |
|
h*i 发帖数: 3446 | 33 这儿有人说要搞R的中文社区,说是要支持开源的统计分析软件的发展。如果是这样的
话,不如支持一个更年轻,更先进,更需要被支持的开源统计分析软件,这就是
incanter, http://incanter.org
incanter是基于一种Lisp语言的统计计算环境,是响应R的作者之一的号召而发展出来
的。Ross Ihaka, R的作者之一在2008年写文章说,R作为一个语言有很多缺陷,还是需
要用Lisp来作统计计算语言的基础才更好[1], 具体的论述见文章本身。
incanter用的Lisp语言叫clojure, http://clojure.org, 是运行于Java虚拟机上(也在发展运行于.NET虚拟机上的版本)的一种现代的Lisp。clojure在2007年问世,发展迅速,现在已经发布到了1.2版本。clojure的主要优势是对并行计算的天然支持,与虚拟机的宿主语言的无缝结合,当然还有Lisp的语言优势。
回到我的题目,如果要想有更多的impact,支持R不如支持incanter。别的不说,学会
lisp可以变成一个更好的programmer。未来是属于大规模的并行计算的,这儿 |
|
D**u 发帖数: 288 | 34 班门弄斧了。
clojure vs scala 直观来说我觉得clojure更像是 “javalized” LISP,scala则 是
“javalized + functionalized” Python;clojure是纯FP,scala是OO+FP。
在我眼里scala就像是python一样,可以有很多种方法解决一个问题,语法什么的不用
太讲究
,code可能写得很冗长,不过总能解决问题;clojure像是LISP(我没研究过只是接触了
一下)语法更精简,更有逻辑,也更抽象,可读性差,而且因为不是oop,扩展和重复利
用性不如scala
incanter 已经inactive 3年了,不过最近好像又有了点动静,类似的interactive 的
enviroment scala也有叫scalalab,这些东西目前只是可以用来帮助熟悉语言和data
structure,也可以不时画出几个plot来玩玩,但是可能要把eco建起来还有很多路要走。
最后说eco,我觉得写LISP的人可能真的都是些逻辑更好的,可是终究现在大多数人是C
++,JAVA,python一系列过来的,所以像bree... 阅读全帖 |
|
h*i 发帖数: 3446 | 35 Try Clojure.
As a Lisp, Clojure enforces FP better than CL and Scheme as data are
immutable in Clojure by default. Also, if you don't like parenthesis,
Clojure has less of them and has more varieties ([] for vector, {} for map,
etc.), so the code looks less dense. |
|
h*i 发帖数: 3446 | 36 Try Clojure.
As a Lisp, Clojure enforces FP better than CL and Scheme as data are
immutable in Clojure by default. Also, if you don't like parenthesis,
Clojure has less of them and has more varieties ([] for vector, {} for map,
etc.), so the code looks less dense. |
|
p*****2 发帖数: 21240 | 37 从技术上来讲,mobile的火必定会带起node的火热。mobile backend,node有着无与伦
比的巨大优势
而big data则加剧了JVM的统治地位,Java, Scala, Clojure都各显神通。data
scientist 则更加偏爱Clojure。
编程模式则往reactive programming的方向发展。看看coursera的reactive
programming的course,看看storm,看看node,也就是往async, event-driven的方向
发展。Scala和Clojure在这两个方面就会显示出比Java更加强大的优势了。 |
|
d**e 发帖数: 6098 | 38 ☆─────────────────────────────────────☆
yaotiaoshunu (pretty) 于 (Sat Dec 21 13:19:28 2013, 美东) 提到:
发信人: yaotiaoshunu (pretty), 信区: Family
标 题: “美国老土”到底是谁?
发信站: BBS 未名空间站 (Sat Dec 21 13:16:41 2013, 美东)
有人建议我上“美国老土”的课以便找到更好的工作,我动心了,做了一点研究,正准
备交钱注册。注册前想了解一下老师的真实情况,因为感觉仅凭知道一个“美国老土”
的化名就交几千甚至上万美元去上课实在有点不放心。所以作为未来的学生想了解老师
多一点,不知道过份不过份?
若有上过他的课的同学,可否跟我联系一下?我想了解一点老师的真实情况,比如真实
姓名是什么,哪一年大学毕业,现在在哪个公司上班等等。另外上完他的课找到工作的
比例到底有多大,有没有感觉上当受骗的?
因为从他自己的网站上看到的都是正面信息,很想从其它渠道了解到更加真实的情况。
交钱之前这样做过份吗?
多谢!
☆────────... 阅读全帖 |
|
r*******n 发帖数: 3020 | 39 我也推荐clojure, 语言非常简练, 表达力非常强;;
语法体系和C, Java之类很不同,所以开始学习有点难度。
确切的说, Clojure不是纯函数式的语言,但是它确实函数式语言,具备函数语言的所
有优点。
但是lz是要脚本语言, 我觉得Clojure不是脚本语言,它没有解释器,而是编译成
bytecode。
所以我觉得如果找脚本语言,我认为Jruby或者Jython最适合不过了, 楼上所说的
performance问题根本就不用担心,因为足够用了。 |
|
r*******n 发帖数: 3020 | 40 我也推荐clojure, 语言非常简练, 表达力非常强;;
语法体系和C, Java之类很不同,所以开始学习有点难度。
确切的说, Clojure不是纯函数式的语言,但是它确实函数式语言,具备函数语言的所
有优点。
但是lz是要脚本语言, 我觉得Clojure不是脚本语言,它没有解释器,而是编译成
bytecode。
所以我觉得如果找脚本语言,我认为Jruby或者Jython最适合不过了, 楼上所说的
performance问题根本就不用担心,因为足够用了。 |
|
m******t 发帖数: 635 | 41 我C#写过一般规模的async + multithreading的service,Java没有相关经验,最近打
算把这个service用Clojure重写一遍,也在考虑相关的思路,打算尝试下Core.async,
多线程方面打算学prismatic,直接用java.util.concurrent或者简单包装下。
这个是Prismatic他们的一篇博客,讲他们用的技术:
http://blog.getprismatic.com/blog/2012/4/5/software-engineering
相关部分摘要:
While we make heavy use of the core of Clojure, we don't use its concurrency
primitives (atoms, refs, STM, etc.) because a function like pmap doesn't
have enough fine grained control for our needs. We opt instead to build our
own concurrency ... 阅读全帖 |
|
t****a 发帖数: 1212 | 42 这几天板上又开始吵语言,干脆把这个顶起吧
另外求教lisp/clojure和haskell的区别。我现在主攻clojure/emacs lisp,但总是听
说haskell多么好多么好。有两种语言都熟练的朋友替我科普一下他们的长处短处么?
我自己的想法...
haskell的库不够,而且没有jvm/llvm之类支持;clojure是动态的,速度比haskell差
得多,但天生有java library support,又可以code as data自己写macro瞎搞 |
|
t****a 发帖数: 1212 | 43 谢谢好虫大牛理智的回复,这年头在mitbbs上理智倒是个稀缺的东西。
不过我看不明白你想论证什么:你是想论证FP没有继承和多态性么?你从
stackoverflow拿来的例子是haskell的,haskell这种static typed pure FP语言有内
建的多态性支持,通过type class实现:
http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%2
我不懂Haskell。版上blaze同学貌似是haskell大拿,还得请他指教。
Clojure这种动态的FP语言也有内建多态支持
http://clojure.org/runtime_polymorphism
有意思的是Clojure里对object的定义不过是一个hashmap。在我看来所有的class都可
以定义为hashmap。简单,轻便,动态,programmable,犯不着写一大堆定义。
多态并不是只有Java这样的OOP才有 :)
呵呵,如果不是goodbug提这点,我还真不知道。Now, problem solved.
"
OO |
|
|
t****a 发帖数: 1212 | 45 我看到的多数人采用->的写法,它的好处可能有
1. 减少了小括号的数目
这是Clojure比Common Lisp改进的方向。Clojure在语言设计上已经想办法减少()的数
目。
2. 提高可读性。
这种写法有点像OOP语言里访问成员的方式。联想到很多Clojure程序员是从Java语言转
过来的,很多人喜欢这样写也就很自然了。 |
|
t****a 发帖数: 1212 | 46 我看到的多数人采用->的写法,它的好处可能有
1. 减少了小括号的数目
这是Clojure比Common Lisp改进的方向。Clojure在语言设计上已经想办法减少()的数
目。
2. 提高可读性。
这种写法有点像OOP语言里访问成员的方式。联想到很多Clojure程序员是从Java语言转
过来的,很多人喜欢这样写也就很自然了。 |
|
p*****2 发帖数: 21240 | 47
是很接近。不过我在想如果现在twitter选的话,会不会选clojure。当时clojure还太
年轻,twitter根本就没有考虑。clojure是动态语言,其实跟ruby更接近。当然如果
ruby 程序员整天玩OO的话,倒是scala更容易上手。ruby的fp特性还是不行。 |
|
p*****2 发帖数: 21240 | 48
是很接近。不过我在想如果现在twitter选的话,会不会选clojure。当时clojure还太
年轻,twitter根本就没有考虑。clojure是动态语言,其实跟ruby更接近。当然如果
ruby 程序员整天玩OO的话,倒是scala更容易上手。ruby的fp特性还是不行。 |
|
p*****2 发帖数: 21240 | 49
我觉得scala FP和OO搞在一起使得理解起来很费劲。
你说clojure also define 2 functions for each type是啥意思?
clojure定义monad跟data type是分开的。而且clojure是dynamic的,定义monad根本不
需要指定type。 |
|
m******t 发帖数: 635 | 50 这次是英国的dailymail
http://www.nearform.com/nodecrunch/how-node-js-has-revolutioniz
用的是二爷一直推崇的node.js + Clojure组合,下面是亮点:
When Clifton joined the Mail Online, he inherited a classic Spring app that
had been around for almost a decade, the front-end had 155,000 lines of Java
, 30,000 lines of JSP, 50,000 lines of javascript, a 15 year old Oracle
schema that couldn’t be changed … and no tests!
In addition to the micro apps written to date, a Table also rebuilt the
entire legacy Java frontend replacing ... 阅读全帖 |
|