H******7 发帖数: 1728 | 1 好的語言,一定要精简,好学。
特点也要突出
scala haskell都太复杂 太难驾驭
lisp 小巧 容易学 以後会大有施展拳脚的地方
clojure 配合jvm一定是利器。 |
p*****2 发帖数: 21240 | 2 clojure是不错,但是貌似发展很缓慢呀。storm也被spark整的够呛
说起来fp,真是个矛盾体 |
n*w 发帖数: 3393 | 3 强调real time的话现在还是要storm?
动态的clojure和静态类型的语言在应用上侧重有所不同吧
【在 p*****2 的大作中提到】 : clojure是不错,但是貌似发展很缓慢呀。storm也被spark整的够呛 : 说起来fp,真是个矛盾体
|
p*****2 发帖数: 21240 | 4 spark streaming
【在 n*w 的大作中提到】 : 强调real time的话现在还是要storm? : 动态的clojure和静态类型的语言在应用上侧重有所不同吧
|
s*i 发帖数: 5025 | 5 怎么不提爪哇死个锐普特?
[发表自未名空间手机版 - m.mitbbs.com] |
n*w 发帖数: 3393 | 6 听一个 stream用户说spark 只是 micro batch. clojurestream更加 real-time.
【在 p*****2 的大作中提到】 : spark streaming
|
p*****2 发帖数: 21240 | 7 是 但是绝大部分应用micro就够了 甚至更合适
【在 n*w 的大作中提到】 : 听一个 stream用户说spark 只是 micro batch. clojurestream更加 real-time.
|
h*i 发帖数: 3446 | 8 我觉得Clojure发展算很快的了,已经算进入半主流了。现在公司做新项目用Clojure已
经很平常了, 纯用Clojure的公司也多起来了,特别是作数据分析类的公司。
Clojure去年已经在Gartner PL index排15位了,作为这么年轻的语言,这个上升速度
是蛮可以的了,更何况还是一个LISP。
Language Gartner 2014 Programming Language Index Rating
Java 1
JavaScript 2
Python 3
C 4
PHP 5
C++ 6
Ruby 7
C# 8
Perl 9
Objective-C 10
Scala 11
Haskell 12
Matlab 13
R 13
Clojure 15
Lua 16
CoffeeScript 17
Shell 18
D 19
Groovy 20
F# 21
Dart 22
Erlang 23
Go 24
Visual Basic .NET 24
ColdFusion 26
Delphi 27
FORTRAN 28
Swift 29
Smalltalk 30
PL/SQL 31
TypeScript 32
RPG 33
COBOL 34
PL1 35
http://blogs.gartner.com/mark_driver/2014/10/02/gartner-program
【在 p*****2 的大作中提到】 : clojure是不错,但是貌似发展很缓慢呀。storm也被spark整的够呛 : 说起来fp,真是个矛盾体
|
f*******t 发帖数: 7549 | |
n*****3 发帖数: 1584 | 10 请教一下· CLOJURE DataManipulation/Data munging 好写吗? 我觉得 CLOJURE
没 dataframe 这东西啊。。。
我们组 要 用 CLOJURE 把 R 写 的 Data munging/FEATURE ENGINEERING code
重写, move everything to JVM
【在 h*i 的大作中提到】 : 我觉得Clojure发展算很快的了,已经算进入半主流了。现在公司做新项目用Clojure已 : 经很平常了, 纯用Clojure的公司也多起来了,特别是作数据分析类的公司。 : Clojure去年已经在Gartner PL index排15位了,作为这么年轻的语言,这个上升速度 : 是蛮可以的了,更何况还是一个LISP。 : Language Gartner 2014 Programming Language Index Rating : Java 1 : JavaScript 2 : Python 3 : C 4 : PHP 5
|
|
|
h*i 发帖数: 3446 | 11 是的,LISP好学。语法简单,就没有什么语法。
在过去只有单色显示器的时候,括号太多可能是个可读性问题。现代的编辑器都是彩色
的,每层括号都有不同的颜色,就不存在这个问题了。而且LISP程序员读LISP代码的时
候是看不见括号的,代码的缩进更重要,这个和其他语言没有什么区别(python?)。
而在写代码的时候,有括号是有很大的帮助的,用paredit这种类型的工具,感觉不是
在编辑一串文本符号,而是在操作一个个代码的语义单位。总的来说,感觉更接近人的
高层思维一些。
我个人觉得Clojure最大的好处是对数据的处理非常的直观,不像其他编程语言,数据
的模型是放在程序员的脑袋里的,需要自己去想象数据长啥样,而在Clojure里面,所
有数据结构都是可视化的,和JSON差不多:
比如()是表,和其他LISP不同,Clojure里面很少直接用表来作数据结构,一般用
vector和map, 也就是[]和 {}。比如在代码里面直接就写
[{:id "hci" :work nil :location "CA"}
{:id "goodbug" :work "netflix" :location "CA"}]
加上一堆常用的函数,map, reduce, filter,等等,处理数据很爽,很适合数据处理
类的应用。
总的说来,Clojure的哲学是能用数据的地方就不用逻辑,能用函数来表达的逻辑就不
用宏来表达,Data > Function > Macro, 这些都很合我意。Clojrue程序感觉很灵活很
直白,改起来很容易。代码短,作一个事情总有一个idiomatic的写法,不鼓励人乱写,
这样读别人的代码也很容易。
【在 f*******t 的大作中提到】 : lisp容易学???
|
t**r 发帖数: 3428 | 12 总结的好。
例子也好。
古德罢躺枪
【在 h*i 的大作中提到】 : 是的,LISP好学。语法简单,就没有什么语法。 : 在过去只有单色显示器的时候,括号太多可能是个可读性问题。现代的编辑器都是彩色 : 的,每层括号都有不同的颜色,就不存在这个问题了。而且LISP程序员读LISP代码的时 : 候是看不见括号的,代码的缩进更重要,这个和其他语言没有什么区别(python?)。 : 而在写代码的时候,有括号是有很大的帮助的,用paredit这种类型的工具,感觉不是 : 在编辑一串文本符号,而是在操作一个个代码的语义单位。总的来说,感觉更接近人的 : 高层思维一些。 : 我个人觉得Clojure最大的好处是对数据的处理非常的直观,不像其他编程语言,数据 : 的模型是放在程序员的脑袋里的,需要自己去想象数据长啥样,而在Clojure里面,所 : 有数据结构都是可视化的,和JSON差不多:
|
h*i 发帖数: 3446 | 13 Clojure就是适合做lightweight数据处理,vectors, maps, 等等,很适合做data
munging/feature engineering.
如果你是要作numerical analysis,那还得go native and distributed.
类似R的,Clojure的incanter有dataframe。
【在 n*****3 的大作中提到】 : 请教一下· CLOJURE DataManipulation/Data munging 好写吗? 我觉得 CLOJURE : 没 dataframe 这东西啊。。。 : : 我们组 要 用 CLOJURE 把 R 写 的 Data munging/FEATURE ENGINEERING code : 重写, move everything to JVM
|
n*****3 发帖数: 1584 | 14 thanks. about the statistical/numerical analysis part, we plan to use java
or use clojure to call java library.
I have checked out the incanter DSL, not too impressive so far,
thanks!!!!
【在 h*i 的大作中提到】 : Clojure就是适合做lightweight数据处理,vectors, maps, 等等,很适合做data : munging/feature engineering. : 如果你是要作numerical analysis,那还得go native and distributed. : 类似R的,Clojure的incanter有dataframe。
|
d*******r 发帖数: 3299 | 15 赞,以前也看到王垠blog里推荐过paredit
【在 h*i 的大作中提到】 : 是的,LISP好学。语法简单,就没有什么语法。 : 在过去只有单色显示器的时候,括号太多可能是个可读性问题。现代的编辑器都是彩色 : 的,每层括号都有不同的颜色,就不存在这个问题了。而且LISP程序员读LISP代码的时 : 候是看不见括号的,代码的缩进更重要,这个和其他语言没有什么区别(python?)。 : 而在写代码的时候,有括号是有很大的帮助的,用paredit这种类型的工具,感觉不是 : 在编辑一串文本符号,而是在操作一个个代码的语义单位。总的来说,感觉更接近人的 : 高层思维一些。 : 我个人觉得Clojure最大的好处是对数据的处理非常的直观,不像其他编程语言,数据 : 的模型是放在程序员的脑袋里的,需要自己去想象数据长啥样,而在Clojure里面,所 : 有数据结构都是可视化的,和JSON差不多:
|
n******7 发帖数: 12463 | 16 可以讲讲Clojure下做数据分析有啥好处吗?特别对比R?
R 3.0以后提升了data.frame大小的上限
有很多包也优化了大数据处理(最近用data.table读取大文件,比原生的read.table快
一个数量级)
还有一些人在搞R compiler,据说可以10x performance
【在 h*i 的大作中提到】 : 我觉得Clojure发展算很快的了,已经算进入半主流了。现在公司做新项目用Clojure已 : 经很平常了, 纯用Clojure的公司也多起来了,特别是作数据分析类的公司。 : Clojure去年已经在Gartner PL index排15位了,作为这么年轻的语言,这个上升速度 : 是蛮可以的了,更何况还是一个LISP。 : Language Gartner 2014 Programming Language Index Rating : Java 1 : JavaScript 2 : Python 3 : C 4 : PHP 5
|
g****v 发帖数: 971 | |
h*i 发帖数: 3446 | 18 看你说的数据分析是指产品中的还是产品前的。
R太慢,一般不用在产品里面跑,而且,产品中很少会跑复杂的算法,R包全的优势不明
显.
我一般是用R建模,训练参数,产品里面用,用的代码用clojure 写,事实上,我们产
品全是用clojure 写的,前后端都是。
★ 发自iPhone App: ChineseWeb 8.7
【在 n******7 的大作中提到】 : 可以讲讲Clojure下做数据分析有啥好处吗?特别对比R? : R 3.0以后提升了data.frame大小的上限 : 有很多包也优化了大数据处理(最近用data.table读取大文件,比原生的read.table快 : 一个数量级) : 还有一些人在搞R compiler,据说可以10x performance
|
h*i 发帖数: 3446 | 19 理论上讲,用lisp语法的好处,R的作者自己有一篇文章,back to future,讲得清楚
,后悔一开始没用lisp来写R,这也是incanter的起因
★ 发自iPhone App: ChineseWeb 8.7
【在 n******7 的大作中提到】 : 可以讲讲Clojure下做数据分析有啥好处吗?特别对比R? : R 3.0以后提升了data.frame大小的上限 : 有很多包也优化了大数据处理(最近用data.table读取大文件,比原生的read.table快 : 一个数量级) : 还有一些人在搞R compiler,据说可以10x performance
|
z****e 发帖数: 54598 | 20 那些括号放在js里面就是callback hell
金字塔形状的东西,java里面就是try catch
所以现在都提倡flat,要扁平化,但是clj要flat,好像有很大难度
唯一可以聊以自慰的就是说clj是括号,只占一个字符位置
缩紧的话要4-8个字符,所以很快就消耗掉了空间
fp这个其实是大问题,用observer pattern就没这个问题
【在 h*i 的大作中提到】 : 是的,LISP好学。语法简单,就没有什么语法。 : 在过去只有单色显示器的时候,括号太多可能是个可读性问题。现代的编辑器都是彩色 : 的,每层括号都有不同的颜色,就不存在这个问题了。而且LISP程序员读LISP代码的时 : 候是看不见括号的,代码的缩进更重要,这个和其他语言没有什么区别(python?)。 : 而在写代码的时候,有括号是有很大的帮助的,用paredit这种类型的工具,感觉不是 : 在编辑一串文本符号,而是在操作一个个代码的语义单位。总的来说,感觉更接近人的 : 高层思维一些。 : 我个人觉得Clojure最大的好处是对数据的处理非常的直观,不像其他编程语言,数据 : 的模型是放在程序员的脑袋里的,需要自己去想象数据长啥样,而在Clojure里面,所 : 有数据结构都是可视化的,和JSON差不多:
|
|
|
z****e 发帖数: 54598 | 21 jvm就是最大的好处
你不用jvm迟早会吃亏
就跟wdong不用ide一样
jvm的performance的提升岂止是10x
还有就是r经常会把数据整个读入内存
很快内存就爆了,如果不这么做的话,你需要修改c源代码,怎么滴怎么滴
麻烦,用jvm上的语言可以很容易控制这些东西
所以适合用r建模,然后翻译成jvm语言再编译,以后最好就是干脆不要翻译
直接让jvm跑r脚本,当然这里面还有很长的路要走
【在 n******7 的大作中提到】 : 可以讲讲Clojure下做数据分析有啥好处吗?特别对比R? : R 3.0以后提升了data.frame大小的上限 : 有很多包也优化了大数据处理(最近用data.table读取大文件,比原生的read.table快 : 一个数量级) : 还有一些人在搞R compiler,据说可以10x performance
|
z****e 发帖数: 54598 | 22 []
{}
我都用过
json
xml
我也都用过
其实严格说来
你说这些是在程序员脑袋中
这个是不对的
java的map, set这些
你直接print出来,其实也都是[],{}这些
如果不打印,写在程序里面
那就是用字符来替代符号
你喜欢看map.put(key,value)还是{key:value}的区别
我觉得前者更为直观,我当初弄clj时候,经常为了查询一些特殊符号啥意思而苦恼半天
因为特殊符号在搜索引擎里面,往往有其他意思
相比之下,map.put只要iq没问题,都能看懂,{:}可不一定
主要是你想的跟作者想的,未必是一回事
符号多未必是好事
【在 h*i 的大作中提到】 : 是的,LISP好学。语法简单,就没有什么语法。 : 在过去只有单色显示器的时候,括号太多可能是个可读性问题。现代的编辑器都是彩色 : 的,每层括号都有不同的颜色,就不存在这个问题了。而且LISP程序员读LISP代码的时 : 候是看不见括号的,代码的缩进更重要,这个和其他语言没有什么区别(python?)。 : 而在写代码的时候,有括号是有很大的帮助的,用paredit这种类型的工具,感觉不是 : 在编辑一串文本符号,而是在操作一个个代码的语义单位。总的来说,感觉更接近人的 : 高层思维一些。 : 我个人觉得Clojure最大的好处是对数据的处理非常的直观,不像其他编程语言,数据 : 的模型是放在程序员的脑袋里的,需要自己去想象数据长啥样,而在Clojure里面,所 : 有数据结构都是可视化的,和JSON差不多:
|
z****e 发帖数: 54598 | 23 很多人喜欢用符号
但是符号本身可能有很多意思
比如
*可以表示乘,也可以是通配符
那你看代码时候,一眼看过去,看到这个就会害怕
到底啥意思呀?
oop多半要求你写出来
.multiply虽然繁琐
但是你iq正常的话,还是能看得懂
错误率就下降很多
实际上java7出来之前,用[]和{}表示list&map也是一个新增feature
oracle甚至都放到了官方文件上去了
但是后来被拿掉了,为啥呢?
我估计就是担心这种符号的滥用导致的问题
数学系的人应该都知道数学上有各种鸟蛋的符号
但是真正教数学时候,极少有老师要求你记住所有符号
因为真正的核心不在这里,这个不重要,只是形式而已 |
h*i 发帖数: 3446 | 24 很多Clojure书的第一章会比较clojure和java的括号层数,结论是一样多,无非是括号
位置不同,Java其实是把同样的金字塔拉长。而增加代码行数会减少代码可读性。实验
研究表明只有代码行数是和可读性直接成负相关的,和语法无关。这是为什么理解一个
Clojure包的最简单办法是读代码,而理解Java包的最简单办法不是读代码,而是读文
档。
Clojure一般用2个字符缩进,没有人用4个字符缩进。
Clojure可以用->, ->>, as->宏来把代码搞平,比如下面的代码:
(defn bag-of-words
[docs]
(->> (r/map remove-hashtag-screenname docs)
(r/map tokenize)
r/flatten
(r/remove #(= "" %))
(r/map s/lower-case)
r/foldcat))
这是我们产品里面的代码,干什么的一眼就看明白了吧。r/xyz是Clojure reducer包里
面的函数版本,用来并发提速的。
OOP patterns = workarounds
http://c2.com/cgi/wiki?AreDesignPatternsMissingLanguageFeatures
【在 z****e 的大作中提到】 : 那些括号放在js里面就是callback hell : 金字塔形状的东西,java里面就是try catch : 所以现在都提倡flat,要扁平化,但是clj要flat,好像有很大难度 : 唯一可以聊以自慰的就是说clj是括号,只占一个字符位置 : 缩紧的话要4-8个字符,所以很快就消耗掉了空间 : fp这个其实是大问题,用observer pattern就没这个问题
|
p*****2 发帖数: 21240 | 25 java跟clojure比就是一坨吧
【在 h*i 的大作中提到】 : 很多Clojure书的第一章会比较clojure和java的括号层数,结论是一样多,无非是括号 : 位置不同,Java其实是把同样的金字塔拉长。而增加代码行数会减少代码可读性。实验 : 研究表明只有代码行数是和可读性直接成负相关的,和语法无关。这是为什么理解一个 : Clojure包的最简单办法是读代码,而理解Java包的最简单办法不是读代码,而是读文 : 档。 : Clojure一般用2个字符缩进,没有人用4个字符缩进。 : Clojure可以用->, ->>, as->宏来把代码搞平,比如下面的代码: : (defn bag-of-words : [docs] : (->> (r/map remove-hashtag-screenname docs)
|
z****e 发帖数: 54598 | 26 谁告诉你理解java代码的最好方法是读文档的?
java程序员n年前就是读代码了
从来没听说过谁去读文档的
我都不记得文档长啥模样了
括号层次不是一回事
fp的括号来自函数的嵌套
具体到实践中就是各种callback
java要写成这样也可以,但是一般人不这样写
因为本身oop就不是以func为基本单位
你让oop的人去嵌套函数,他会觉得很恶心
比如
goodbug.go(sun.rise());
这种写法是极少的,不是没有,也不是不可以
但是天生他不会这么写
而是
Place place = sun.rise();
goodbug.go(place);
这种扁平化就很直接,清晰,简单明了
但是fp不是哦,(- (+ 1 3) 2)这种写法太正常不过了
例子到处都是,说到底还是一般人还是不会遵守你制定的规则
所以需要在缩进上压缩空间,4格压缩到2格
最后ide还会很痛苦,因为一般都是行数设置断点
列数设置断点的我好像还没见过
【在 h*i 的大作中提到】 : 很多Clojure书的第一章会比较clojure和java的括号层数,结论是一样多,无非是括号 : 位置不同,Java其实是把同样的金字塔拉长。而增加代码行数会减少代码可读性。实验 : 研究表明只有代码行数是和可读性直接成负相关的,和语法无关。这是为什么理解一个 : Clojure包的最简单办法是读代码,而理解Java包的最简单办法不是读代码,而是读文 : 档。 : Clojure一般用2个字符缩进,没有人用4个字符缩进。 : Clojure可以用->, ->>, as->宏来把代码搞平,比如下面的代码: : (defn bag-of-words : [docs] : (->> (r/map remove-hashtag-screenname docs)
|
z****e 发帖数: 54598 | 27 js那坨更大呀
【在 p*****2 的大作中提到】 : java跟clojure比就是一坨吧
|
z****e 发帖数: 54598 | 28 java的try catch金字塔我比较少见过超过3层的
leiss说他那有30层的callback,这个太牛了,五体投地
你自己说,clj你的嵌套最多多少层
flat对于oop来说很容易,反正都是object
抓出来丢给一个object,然后单独切割成一行
搞定,而且大多数人也都是这么搞
func你这么写的不多吧?多数人还是给你一层一层套下去
形成一个金字塔一样的形状,不得不在缩进上做割舍
对比java那个非常misleading,因为java要写成这样不是不可以
但是一般人不这么写
【在 h*i 的大作中提到】 : 很多Clojure书的第一章会比较clojure和java的括号层数,结论是一样多,无非是括号 : 位置不同,Java其实是把同样的金字塔拉长。而增加代码行数会减少代码可读性。实验 : 研究表明只有代码行数是和可读性直接成负相关的,和语法无关。这是为什么理解一个 : Clojure包的最简单办法是读代码,而理解Java包的最简单办法不是读代码,而是读文 : 档。 : Clojure一般用2个字符缩进,没有人用4个字符缩进。 : Clojure可以用->, ->>, as->宏来把代码搞平,比如下面的代码: : (defn bag-of-words : [docs] : (->> (r/map remove-hashtag-screenname docs)
|
z****e 发帖数: 54598 | 29 还有就是你这段代码
是你手工flat的吧?
因为有些行数是)),有些行是)
不太像是机器做的
一般oop是通过ide来format的
不需要手工处理
你多嵌套一层函数
ide就会提示你换行
【在 h*i 的大作中提到】 : 很多Clojure书的第一章会比较clojure和java的括号层数,结论是一样多,无非是括号 : 位置不同,Java其实是把同样的金字塔拉长。而增加代码行数会减少代码可读性。实验 : 研究表明只有代码行数是和可读性直接成负相关的,和语法无关。这是为什么理解一个 : Clojure包的最简单办法是读代码,而理解Java包的最简单办法不是读代码,而是读文 : 档。 : Clojure一般用2个字符缩进,没有人用4个字符缩进。 : Clojure可以用->, ->>, as->宏来把代码搞平,比如下面的代码: : (defn bag-of-words : [docs] : (->> (r/map remove-hashtag-screenname docs)
|
h*i 发帖数: 3446 | 30 问题是这样的,Java每个东西都必须取个名字,这个名字指代的复杂数据结构必须装在
程序员脑袋里面: map.put(BattleOrganizer.getBattleParticipant())
http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of
Clojure一切都是直白的,也不用给一切东西取名字,相当于直接在JSON上面操作。{:
battle-orgnaizer {:name "zhaoce" :id 1}}, 这整个东西不需要名字,是什么意思是
直白的。
Clojure里面,如果不写宏的话,特殊符号不多,(), [], {}, #{}, #(%),这是有限的
,而且特殊符号的意思是公共的,学会了就行;而给数据结构可以取的名字是无限的,
名字的意思只有写程序的人自己知道,然后再把每个东西用一个类包起来,放到一个单
独文件里面,这完全就是不想让别人理解了,非用IDE工具不可。
【在 z****e 的大作中提到】 : [] : {} : 我都用过 : json : xml : 我也都用过 : 其实严格说来 : 你说这些是在程序员脑袋中 : 这个是不对的 : java的map, set这些
|
|
|
z****e 发帖数: 54598 | 31 不用
我们实践中经常遇到不懂是什么的变量
怎么办?
这个时候static type的优势就体现出来了
直接按住cmd,然后让ide找这个东西的声明
你说的不懂是dynamic type,也就是脚本程序员经常遇到的问题
这个批判你可以直接抛向js, ruby的程序员,当然也有万恶的python
王垠那个东西不就是打算解决这个问题么?
名字还好了,人跟人交流还是名字交流方便点
java里面官方就有三种map,还有无数人自己实现的各种map
你要是不用名字加以区分的话,一个符号怕是不够用
【在 h*i 的大作中提到】 : 问题是这样的,Java每个东西都必须取个名字,这个名字指代的复杂数据结构必须装在 : 程序员脑袋里面: map.put(BattleOrganizer.getBattleParticipant()) : http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of : Clojure一切都是直白的,也不用给一切东西取名字,相当于直接在JSON上面操作。{: : battle-orgnaizer {:name "zhaoce" :id 1}}, 这整个东西不需要名字,是什么意思是 : 直白的。 : Clojure里面,如果不写宏的话,特殊符号不多,(), [], {}, #{}, #(%),这是有限的 : ,而且特殊符号的意思是公共的,学会了就行;而给数据结构可以取的名字是无限的, : 名字的意思只有写程序的人自己知道,然后再把每个东西用一个类包起来,放到一个单 : 独文件里面,这完全就是不想让别人理解了,非用IDE工具不可。
|
z****e 发帖数: 54598 | 32 map.put(BattleOrganizer.getBattleParticipant())
在我眼里只是
map.put(b****************.getB***********());
不过这里应该是set吧?没有key
变量名要小写,要加;
没怎么写过java吧,对oop尤其是java的批判就显得有些空中楼阁了 |
h*i 发帖数: 3446 | 33 你说的flat无非就是给一个东西一个名字,这个方式在小范围是有效的,在Clojure里
面,一般用let来实现:
(let [place (.rise sun)]
(.go goodbug place))
问题是如果只有这么一种flat的办法,用在一切地方,就过分的,成了kingdom of
nouns.
clojure的办法就多一些,一是数据的直白化,二是用常用的宏来扁平化,三是在合适
的地方用名字。
不同的人喜欢不同的风格吧,比如我写Java的时候也是从来不用debugger的,从来不设
断点,喜欢打印式debug。我喜欢clojure也不奇怪。
【在 z****e 的大作中提到】 : java的try catch金字塔我比较少见过超过3层的 : leiss说他那有30层的callback,这个太牛了,五体投地 : 你自己说,clj你的嵌套最多多少层 : flat对于oop来说很容易,反正都是object : 抓出来丢给一个object,然后单独切割成一行 : 搞定,而且大多数人也都是这么搞 : func你这么写的不多吧?多数人还是给你一层一层套下去 : 形成一个金字塔一样的形状,不得不在缩进上做割舍 : 对比java那个非常misleading,因为java要写成这样不是不可以 : 但是一般人不这么写
|
h*i 发帖数: 3446 | 34 机器做也容易,->>是个宏,本来就会被机器变回成嵌套式去执行。
机器操作LISP当然容易多了,括号帮机器很多。
【在 z****e 的大作中提到】 : 还有就是你这段代码 : 是你手工flat的吧? : 因为有些行数是)),有些行是) : 不太像是机器做的 : 一般oop是通过ide来format的 : 不需要手工处理 : 你多嵌套一层函数 : ide就会提示你换行
|
z****e 发帖数: 54598 | 35 不用debugger效率太低,不设断点不看内存,print出来的话
每次都要执行一次,如果是游戏呢?如果是app呢?
执行一次大概10分钟甚至更长,你不设断点能行吗?
说到底就是遇到同样一个问题
你选择了避开,而我选择了工具
另外我说的flat还真不是命名那么简单呵呵
比如rxjava
goodbugs.go(BEIJING) //虫子是复数
.flyBackTo(CA)
.map(goodbug -> addMiles(10000))
.feel(goodbug::happy);
这种写法很常见了以后
ide再配合一下自动format,就可以躲开层层嵌套的那一坨坨了
你想想js可是有着30层的callback哦
【在 h*i 的大作中提到】 : 你说的flat无非就是给一个东西一个名字,这个方式在小范围是有效的,在Clojure里 : 面,一般用let来实现: : (let [place (.rise sun)] : (.go goodbug place)) : 问题是如果只有这么一种flat的办法,用在一切地方,就过分的,成了kingdom of : nouns. : clojure的办法就多一些,一是数据的直白化,二是用常用的宏来扁平化,三是在合适 : 的地方用名字。 : 不同的人喜欢不同的风格吧,比如我写Java的时候也是从来不用debugger的,从来不设 : 断点,喜欢打印式debug。我喜欢clojure也不奇怪。
|
h*i 发帖数: 3446 | 36 typo。
我从1997年开始主要用Java写程序, 写到2013年换成主要用Clojure为止。我当年写3D
VR都是用Java写的,我写的Java Web应用被我的前雇主卖了几千万美刀:-)
【在 z****e 的大作中提到】 : map.put(BattleOrganizer.getBattleParticipant()) : 在我眼里只是 : map.put(b****************.getB***********()); : 不过这里应该是set吧?没有key : 变量名要小写,要加; : 没怎么写过java吧,对oop尤其是java的批判就显得有些空中楼阁了
|
z****e 发帖数: 54598 | 37 我说的flat是摆脱嵌套
从((((...)))变成.().().()....的形式
【在 h*i 的大作中提到】 : 机器做也容易,->>是个宏,本来就会被机器变回成嵌套式去执行。 : 机器操作LISP当然容易多了,括号帮机器很多。
|
p*****2 发帖数: 21240 | 38
所以要用coffee
【在 z****e 的大作中提到】 : js那坨更大呀
|
h*i 发帖数: 3446 | 39 你这个.().().()
比-> () () () () 还要多一些dot
没有本质区别。
【在 z****e 的大作中提到】 : 不用debugger效率太低,不设断点不看内存,print出来的话 : 每次都要执行一次,如果是游戏呢?如果是app呢? : 执行一次大概10分钟甚至更长,你不设断点能行吗? : 说到底就是遇到同样一个问题 : 你选择了避开,而我选择了工具 : 另外我说的flat还真不是命名那么简单呵呵 : 比如rxjava : goodbugs.go(BEIJING) //虫子是复数 : .flyBackTo(CA) : .map(goodbug -> addMiles(10000))
|
z****e 发帖数: 54598 | 40 多.多好啊
ide的作用就可以发挥出来了
否则ide怎么弹出提示呀?
【在 h*i 的大作中提到】 : 你这个.().().() : 比-> () () () () 还要多一些dot : 没有本质区别。
|
|
|
z****e 发帖数: 54598 | 41 debug
【在 p*****2 的大作中提到】 : : 所以要用coffee
|
z****e 发帖数: 54598 | 42 打印式debug的话,到处都是没有擦干净的console.log
甭提多恶心了
【在 h*i 的大作中提到】 : 你说的flat无非就是给一个东西一个名字,这个方式在小范围是有效的,在Clojure里 : 面,一般用let来实现: : (let [place (.rise sun)] : (.go goodbug place)) : 问题是如果只有这么一种flat的办法,用在一切地方,就过分的,成了kingdom of : nouns. : clojure的办法就多一些,一是数据的直白化,二是用常用的宏来扁平化,三是在合适 : 的地方用名字。 : 不同的人喜欢不同的风格吧,比如我写Java的时候也是从来不用debugger的,从来不设 : 断点,喜欢打印式debug。我喜欢clojure也不奇怪。
|
h*i 发帖数: 3446 | 43 :不是语法里面的,是约定俗成. :xyz是一个keyword, Clojure程序员约定俗成用
keyword来做map key而已。{"abc" 2} 和 {:abc 2}的区别不大吧?
约定是有限的,而名字是无限的。
【在 z****e 的大作中提到】 : [] : {} : 我都用过 : json : xml : 我也都用过 : 其实严格说来 : 你说这些是在程序员脑袋中 : 这个是不对的 : java的map, set这些
|
p*****2 发帖数: 21240 | 44
没啥问题。
【在 z****e 的大作中提到】 : debug
|
z****e 发帖数: 54598 | 45 否认是没用的
就看具体细节
比如30层的callback
在zealot嘴里,这些东西都不存在
如果不是无意中说出来,问了估计也会否认
【在 p*****2 的大作中提到】 : : 没啥问题。
|
h*i 发帖数: 3446 | 46 说实话,我写程序其实基本就不debug, 程序除了问题,看症状我一般马上知道哪里出
了问题,很少需要设断点来发现哪里出错了。我写程序不debug的习惯也是逼出来的,
当年在VAX终端上的上机时间一周只有一个小时,呵呵。
【在 z****e 的大作中提到】 : 打印式debug的话,到处都是没有擦干净的console.log : 甭提多恶心了
|
z****e 发帖数: 54598 | 47 我说的是{key:value}的{:}
不是:tag,好吧,这是java7
我例子说得不好,就是{}吧
clj应该是{key value, anotherKey anotherValue}
这个其实不直观,因为{}可以有很多意思
[]等价于list也不直观
【在 h*i 的大作中提到】 : 说实话,我写程序其实基本就不debug, 程序除了问题,看症状我一般马上知道哪里出 : 了问题,很少需要设断点来发现哪里出错了。我写程序不debug的习惯也是逼出来的, : 当年在VAX终端上的上机时间一周只有一个小时,呵呵。
|
z****e 发帖数: 54598 | 48 写web时候我用得也不多
但是不写web的时候,我用得越来越多
还有就是,项目越大,历史越久,就越需要debug
否则很难接盘
【在 h*i 的大作中提到】 : 说实话,我写程序其实基本就不debug, 程序除了问题,看症状我一般马上知道哪里出 : 了问题,很少需要设断点来发现哪里出错了。我写程序不debug的习惯也是逼出来的, : 当年在VAX终端上的上机时间一周只有一个小时,呵呵。
|
h*i 发帖数: 3446 | 49 -> () () () IDE也能做。
Java离了IDE就没法用,这说明语言有问题。我写Java也用IDE,这是没办法的事,不值
得炫耀,逼得我这个vim guy去花钱买vim plugin.
【在 z****e 的大作中提到】 : 多.多好啊 : ide的作用就可以发挥出来了 : 否则ide怎么弹出提示呀?
|
z****e 发帖数: 54598 | 50 你怕你的ide电脑跑不起来吗?
还是ide太贵?
ide就跟os一样
是必需品,os倒是不少要钱的,你不是一样给的很开心?
fp的嵌套不用ide才可怕
空格因为有其他意思,如果空格prompt的话,会导致你有时候思维被打断
因为命名输入参数等也都会用到空格
prompt还是在我需要它时候再弹出来比较好,比如.就在呼叫它,空格显然不是
【在 h*i 的大作中提到】 : -> () () () IDE也能做。 : Java离了IDE就没法用,这说明语言有问题。我写Java也用IDE,这是没办法的事,不值 : 得炫耀,逼得我这个vim guy去花钱买vim plugin.
|
|
|
z****e 发帖数: 54598 | 51 不过你对java ide是如此不熟悉,以至于我都怀疑你到底写没写过java
白板也做得一般般,短短一句出了三个语法错误
你说你写过十多年的java,我不太信,当然从例子上看,3d什么叉叉
可能java的应用领域不一样
【在 h*i 的大作中提到】 : -> () () () IDE也能做。 : Java离了IDE就没法用,这说明语言有问题。我写Java也用IDE,这是没办法的事,不值 : 得炫耀,逼得我这个vim guy去花钱买vim plugin.
|
h*i 发帖数: 3446 | 52 如果{key value anotherKey anotherValue}都不直观,我不知道还有什么更直观的办
法?[]不是list, 是vector (类似于array)
这些和JSON不是一样么?JSON不直观?大部分程序员都觉得JSON直观吧。
【在 z****e 的大作中提到】 : 我说的是{key:value}的{:} : 不是:tag,好吧,这是java7 : 我例子说得不好,就是{}吧 : clj应该是{key value, anotherKey anotherValue} : 这个其实不直观,因为{}可以有很多意思 : []等价于list也不直观
|
h*i 发帖数: 3446 | 53 我从来没有被人白板interview过,从来都是我白板interview别人,你就放我一马:-)
【在 z****e 的大作中提到】 : 不过你对java ide是如此不熟悉,以至于我都怀疑你到底写没写过java : 白板也做得一般般,短短一句出了三个语法错误 : 你说你写过十多年的java,我不太信,当然从例子上看,3d什么叉叉 : 可能java的应用领域不一样
|
z****e 发帖数: 54598 | 54 ruby的{key=>value}或者{key:value}
比{key value,key value}要直观吧?
你小心,有些语言{key value key value}其实是{key value}的set
{}可以表示set和map,你还觉得直观吗?
直观只是你适应了之后的错觉,json当然不直观
{}[],都需要字符填充,xml只有<>需要字符填充
你说哪个更直观?太直观的也有问题,xml就是太直观,太自由
所以控制起来很痛苦,所以才有了json
【在 h*i 的大作中提到】 : 如果{key value anotherKey anotherValue}都不直观,我不知道还有什么更直观的办 : 法?[]不是list, 是vector (类似于array) : 这些和JSON不是一样么?JSON不直观?大部分程序员都觉得JSON直观吧。
|
n*****3 发帖数: 1584 | 55 clojure 这 里是可以用任意 function 的,
不像java 是一个 类的方法, IDE can help a lot
R 的 dplyr 写法狠类似, 是一种high level
abstract, which java I guess does not
have yet? java8 有吗?
【在 z****e 的大作中提到】 : 多.多好啊 : ide的作用就可以发挥出来了 : 否则ide怎么弹出提示呀?
|
z****e 发帖数: 54598 | 56
help a lot难道不是我们需要的?
java8未必有,rxjava搭配上去就有不少了
但是完全替代r,只能指望renjin了
或者其他啥东东,现阶段是没办法直接跑r脚本的
还有就是全堆到内存里,这个恐怕吃不消
还是要一点一点弄出来处理,map reduce那些东西
还有些你需要借助于ql,比如select这种
sql和cql这些比较顶用,这个问题clj应该也是一样的吧?
clj有完全替代dplyr的东西?好像没听说
【在 n*****3 的大作中提到】 : clojure 这 里是可以用任意 function 的, : 不像java 是一个 类的方法, IDE can help a lot : R 的 dplyr 写法狠类似, 是一种high level : abstract, which java I guess does not : have yet? java8 有吗?
|
z****e 发帖数: 54598 | 57 把前文看了看
至少hci说的map, reduce, filter这几个rxjava都有 |
h*i 发帖数: 3446 | 58 IDE太重,复杂的项目还真跑不起来, 笔记本上已经需要跑一堆服务器了。
喜欢IDE的,Clojure也有很好的IDE:lighttable, cursive, etc, 据说都很好,我没
用过而已。
【在 z****e 的大作中提到】 : 你怕你的ide电脑跑不起来吗? : 还是ide太贵? : ide就跟os一样 : 是必需品,os倒是不少要钱的,你不是一样给的很开心? : fp的嵌套不用ide才可怕 : 空格因为有其他意思,如果空格prompt的话,会导致你有时候思维被打断 : 因为命名输入参数等也都会用到空格 : prompt还是在我需要它时候再弹出来比较好,比如.就在呼叫它,空格显然不是
|
z****e 发帖数: 54598 | 59 买台server放地下室吧
【在 h*i 的大作中提到】 : IDE太重,复杂的项目还真跑不起来, 笔记本上已经需要跑一堆服务器了。 : 喜欢IDE的,Clojure也有很好的IDE:lighttable, cursive, etc, 据说都很好,我没 : 用过而已。
|
h*i 发帖数: 3446 | 60 不觉得更直观。
搞那些不必要的syntax也是没有办法的事,因为会有歧义,对不对?
{}出现在clojure里面就只有两种可能,一个是map, 一个是出现在#{}里面,是set,
这是不会混淆的。
[]就只有一个意思,就是vector, 也没有歧义。
xml当然不直观,一堆名字,名字(type)是无限的,而符号是有限的。
JSON把不必要的名字(type)都去掉了,程序员们都很喜欢,所以取代了xml.
【在 z****e 的大作中提到】 : ruby的{key=>value}或者{key:value} : 比{key value,key value}要直观吧? : 你小心,有些语言{key value key value}其实是{key value}的set : {}可以表示set和map,你还觉得直观吗? : 直观只是你适应了之后的错觉,json当然不直观 : {}[],都需要字符填充,xml只有<>需要字符填充 : 你说哪个更直观?太直观的也有问题,xml就是太直观,太自由 : 所以控制起来很痛苦,所以才有了json
|
|
|
z****e 发帖数: 54598 | 61 map -> {key:value}
list -> [value]
json不就是这样的?
你觉得json直观还是clj定义的结构直观?
我觉得json更清晰一点
name多没办法,key怎样不都是一个名字?
clj用;代替//表示注释比较神奇
,
【在 h*i 的大作中提到】 : 不觉得更直观。 : 搞那些不必要的syntax也是没有办法的事,因为会有歧义,对不对? : {}出现在clojure里面就只有两种可能,一个是map, 一个是出现在#{}里面,是set, : 这是不会混淆的。 : []就只有一个意思,就是vector, 也没有歧义。 : xml当然不直观,一堆名字,名字(type)是无限的,而符号是有限的。 : JSON把不必要的名字(type)都去掉了,程序员们都很喜欢,所以取代了xml.
|
h*i 发帖数: 3446 | 62 现在讲究的是dev和ops一样的环境. dev的时候一群servers都是跑在笔记本上的docker
containers里面的,你要跟上潮流。呵呵。
【在 z****e 的大作中提到】 : 买台server放地下室吧
|
n******7 发帖数: 12463 | 63 哦,明白了。我以为你们用incanter完全代替R了
我们是杀老鼠的,就没有产品
不过现在要转型做服务了
决定试试用clojure来做这个杀老鼠2.0
【在 h*i 的大作中提到】 : 看你说的数据分析是指产品中的还是产品前的。 : R太慢,一般不用在产品里面跑,而且,产品中很少会跑复杂的算法,R包全的优势不明 : 显. : 我一般是用R建模,训练参数,产品里面用,用的代码用clojure 写,事实上,我们产 : 品全是用clojure 写的,前后端都是。 : : ★ 发自iPhone App: ChineseWeb 8.7
|
z****e 发帖数: 54598 | 64 一个虚拟node也就开10g内存
我macbook还12g内存呢
够了,当然我娱乐时候会关不少东西
docker container放上去也不用多少内存
ide都不舍得开,这个开发也够苦逼的
docker
【在 h*i 的大作中提到】 : 现在讲究的是dev和ops一样的环境. dev的时候一群servers都是跑在笔记本上的docker : containers里面的,你要跟上潮流。呵呵。
|
h*i 发帖数: 3446 | 65 map -> {key value key value}
vector -> [value value value]
和JSON比就是少了一些:和, 而这些:,往往是JSON validation出错的原因。“oops, 多
写了个,”,是不是经常发生?
字符能省就省,都能提高可读性,只要不会出歧义。
【在 z****e 的大作中提到】 : map -> {key:value} : list -> [value] : json不就是这样的? : 你觉得json直观还是clj定义的结构直观? : 我觉得json更清晰一点 : name多没办法,key怎样不都是一个名字? : clj用;代替//表示注释比较神奇 : : ,
|
h*i 发帖数: 3446 | 66 搞startup是挺苦逼的,前端后端啥都得自己干, 就一个笔记本,开一堆containters,
16G内存不够用啊。
【在 z****e 的大作中提到】 : 一个虚拟node也就开10g内存 : 我macbook还12g内存呢 : 够了,当然我娱乐时候会关不少东西 : docker container放上去也不用多少内存 : ide都不舍得开,这个开发也够苦逼的 : : docker
|
z****e 发帖数: 54598 | 67 我的json都是自动生成的
没有自己手写过撒,所以不会出现少写多写,这种错误
其实声称xml也无所谓,对我来说
顺便,你还是写个,好,否则你这个key value key value
如果数量多了,弄错一个就麻烦了,尤其是不少时候key和value本身就很难区分
都是类似的type的时候
其实clj通过:key value加多一个:tag来标示tag,:和,有啥本质区别?
逗号会漏,:一样会漏
【在 h*i 的大作中提到】 : map -> {key value key value} : vector -> [value value value] : 和JSON比就是少了一些:和, 而这些:,往往是JSON validation出错的原因。“oops, 多 : 写了个,”,是不是经常发生? : 字符能省就省,都能提高可读性,只要不会出歧义。
|
h*i 发帖数: 3446 | 68 你从来不写JSON config files?
Clojure约定俗成,尽量用:keywords来作key, 现实中,一般见到的clojure map都是这
种样子的:
{:key value
:another-key another-value
:key2 value3}
缩进,空格都有用。
:keywords自己也是函数, 所以可以用来从map中取值:(:a-key a-map)
而不用写 (get a-map :a-key),一个意思,更简略而已。
【在 z****e 的大作中提到】 : 我的json都是自动生成的 : 没有自己手写过撒,所以不会出现少写多写,这种错误 : 其实声称xml也无所谓,对我来说 : 顺便,你还是写个,好,否则你这个key value key value : 如果数量多了,弄错一个就麻烦了,尤其是不少时候key和value本身就很难区分 : 都是类似的type的时候 : 其实clj通过:key value加多一个:tag来标示tag,:和,有啥本质区别? : 逗号会漏,:一样会漏
|
n*****3 发帖数: 1584 | 69 nb ah..
BTW why you guys did not use scala instead of clojure ? clojure really
looks bad
since spark gets more and more popular nowdays..
containters,
【在 h*i 的大作中提到】 : 搞startup是挺苦逼的,前端后端啥都得自己干, 就一个笔记本,开一堆containters, : 16G内存不够用啊。
|
z****e 发帖数: 54598 | 70 写过,但是config能有多少写的?
那点东西你不说我都想不起来
jvm的config东西多了
xml, json, properties,没啥太大区别
我觉得我眼睛看xml还更舒服点
你人工对齐和缩进这种写法太痛苦了
【在 h*i 的大作中提到】 : 你从来不写JSON config files? : Clojure约定俗成,尽量用:keywords来作key, 现实中,一般见到的clojure map都是这 : 种样子的: : {:key value : :another-key another-value : :key2 value3} : 缩进,空格都有用。 : :keywords自己也是函数, 所以可以用来从map中取值:(:a-key a-map) : 而不用写 (get a-map :a-key),一个意思,更简略而已。
|
|
|
h*i 发帖数: 3446 | 71 to me:
Scala : Java :: C++ : C
我15年前放弃C++选了Java, 和今天不用Scala用Clojure的道理是一样的。我只对写应
用感兴趣,对语言本身的特性没有丝毫的兴趣,不想在语言本身上化时间,Clojure让
我把时间用在创造我的应用上,而不是学别人创造的语法上。JVM上的东西我都能用,
包括Spark,我为啥要跟自己过不去?
【在 n*****3 的大作中提到】 : nb ah.. : BTW why you guys did not use scala instead of clojure ? clojure really : looks bad : since spark gets more and more popular nowdays.. : : containters,
|
h*i 发帖数: 3446 | 72 Editors take care of that.
各花入各眼吧,你要觉得XML比JSON舒服是你的事,大部分人的想法相反也是事实。
【在 z****e 的大作中提到】 : 写过,但是config能有多少写的? : 那点东西你不说我都想不起来 : jvm的config东西多了 : xml, json, properties,没啥太大区别 : 我觉得我眼睛看xml还更舒服点 : 你人工对齐和缩进这种写法太痛苦了
|
z****e 发帖数: 54598 | 73 json少写一个,很正常对不对?
xml你少写一个>或者<试试看,会不会很别扭
xml要错太难,所以用来做config很不错
json比较容易出错,虽然我不反对json做config
但是你还是实践一下再说
【在 h*i 的大作中提到】 : Editors take care of that. : 各花入各眼吧,你要觉得XML比JSON舒服是你的事,大部分人的想法相反也是事实。
|
h*i 发帖数: 3446 | 74 我实践过了XML,一大坨字,很不喜欢。要不是后来Spring可以用annotation来config
,我还真连Spring都不爱用,呵呵。
【在 z****e 的大作中提到】 : json少写一个,很正常对不对? : xml你少写一个>或者<试试看,会不会很别扭 : xml要错太难,所以用来做config很不错 : json比较容易出错,虽然我不反对json做config : 但是你还是实践一下再说
|
z****e 发帖数: 54598 | 75 xml里面多出来的字不就是json里面的key?
一样的,这个你没法省
spring多好啊,有aop
代码里面到处留下的console.log这种垃圾很容易被清理掉
config
【在 h*i 的大作中提到】 : 我实践过了XML,一大坨字,很不喜欢。要不是后来Spring可以用annotation来config : ,我还真连Spring都不爱用,呵呵。
|
f******x 发帖数: 98 | 76 握手,海螺子。Clojure也是我的favorite。可惜incanter还是一块短板,工作环境里
还是只能用Python/R.
期待Clojure将来会有更好的数值计算库和环境。 |
h*i 发帖数: 3446 | 77 我希望最后能有什么结合native和distributed的东东出来。
【在 f******x 的大作中提到】 : 握手,海螺子。Clojure也是我的favorite。可惜incanter还是一块短板,工作环境里 : 还是只能用Python/R. : 期待Clojure将来会有更好的数值计算库和环境。
|
h*i 发帖数: 3446 | 78 static typing, dynamic type, 这是永远扯不清的。
我个人没觉得static typing对我写程序有多大帮助,从static的Java换到dynamic的
Clojure,我没有觉得缺少了什么东西。大概static typing的好处我没感受到吧。你说
的IDE的这些方便东东, dynamic语言也能做到,实现的方法不同而已,比如用王垠那种
东西。对用户来说,如何实现的不值得关心,一样的用就行了。Clojure的ligthtable,
cursive等等据说都是很好的IDE,应该也有这些自动补全的功能。
个人的编程风格不同,我没要试图说服你。我以前是Java程序员,Java对我来说是has
been,你这些说法对我没什么用,所以也不要试图来说服我。
统计表明,大部分Clojure程序员以前是Java程序员,很少有FP背景的人变为Clojure程
序员的,因为那些人都很恨JVM,哈哈。
【在 z****e 的大作中提到】 : 不用 : 我们实践中经常遇到不懂是什么的变量 : 怎么办? : 这个时候static type的优势就体现出来了 : 直接按住cmd,然后让ide找这个东西的声明 : 你说的不懂是dynamic type,也就是脚本程序员经常遇到的问题 : 这个批判你可以直接抛向js, ruby的程序员,当然也有万恶的python : 王垠那个东西不就是打算解决这个问题么? : 名字还好了,人跟人交流还是名字交流方便点 : java里面官方就有三种map,还有无数人自己实现的各种map
|
n*****3 发帖数: 1584 | 79 agree, clojure is indeed beautiful in terms of design, like c ;
scala is a mixed monster like c++
but spark's clojure wraper is not so mature, and can not always be up-to-
date .
【在 h*i 的大作中提到】 : to me: : Scala : Java :: C++ : C : 我15年前放弃C++选了Java, 和今天不用Scala用Clojure的道理是一样的。我只对写应 : 用感兴趣,对语言本身的特性没有丝毫的兴趣,不想在语言本身上化时间,Clojure让 : 我把时间用在创造我的应用上,而不是学别人创造的语法上。JVM上的东西我都能用, : 包括Spark,我为啥要跟自己过不去?
|
z****e 发帖数: 54598 | 80 能做到跟有没有人去做两回事
fp很多东西都能做到
问题是没有人去做
最后plugin无解
你就是找不到plugin
所以最后还就是不得不手工作坊式的个人英雄主义
王银想做没错,也做了东西出来
问题是你在eclipse上能下到他的东西的plugin吗?
不行吧
具体问题具体分析,我告诉你的是我是怎么解决这个问题的
你为啥对我提出解决方案这么抵触?
你是不是不喜欢看到有人解决问题?
就像vi党最不喜欢ide的种种方便一样
因为不知道,没弄过,一下子知道了,觉得落后了,就拒绝学习
当然有各种理由,比如内存不够,风格不同
ligthtable,
has
【在 h*i 的大作中提到】 : static typing, dynamic type, 这是永远扯不清的。 : 我个人没觉得static typing对我写程序有多大帮助,从static的Java换到dynamic的 : Clojure,我没有觉得缺少了什么东西。大概static typing的好处我没感受到吧。你说 : 的IDE的这些方便东东, dynamic语言也能做到,实现的方法不同而已,比如用王垠那种 : 东西。对用户来说,如何实现的不值得关心,一样的用就行了。Clojure的ligthtable, : cursive等等据说都是很好的IDE,应该也有这些自动补全的功能。 : 个人的编程风格不同,我没要试图说服你。我以前是Java程序员,Java对我来说是has : been,你这些说法对我没什么用,所以也不要试图来说服我。 : 统计表明,大部分Clojure程序员以前是Java程序员,很少有FP背景的人变为Clojure程 : 序员的,因为那些人都很恨JVM,哈哈。
|
|
|
H****S 发帖数: 1359 | 81 再不学Scala,就落在三哥后面了。不信?pied piper首席程序员dinesh就是用的Scala。
【在 H******7 的大作中提到】 : 好的語言,一定要精简,好学。 : 特点也要突出 : scala haskell都太复杂 太难驾驭 : lisp 小巧 容易学 以後会大有施展拳脚的地方 : clojure 配合jvm一定是利器。
|
h*i 发帖数: 3446 | 82 spark clojure wrapper最新的叫sparkling:
https://github.com/gorillalabs/sparkling
【在 n*****3 的大作中提到】 : agree, clojure is indeed beautiful in terms of design, like c ; : scala is a mixed monster like c++ : but spark's clojure wraper is not so mature, and can not always be up-to- : date .
|
h*i 发帖数: 3446 | 83 其他的FP语言我不知道。在Clojure这个生态环境里面,目前我还没有发现有啥缺了没
人作的东东。JVM上啥没有?Clojure只是JVM上薄薄的一层。想用一个FooClass类上的
method1和方法method2?
(doto (FooClass. "bar" 1)
(.method1 arg1)
(.method2 arg2))
就这么简单。
我不用IDE而已,我看那些用IDE的Clojure程序员也很高兴,没觉得缺了啥。我是从IDE
党转成vi党的,这又怎么说?
【在 z****e 的大作中提到】 : 能做到跟有没有人去做两回事 : fp很多东西都能做到 : 问题是没有人去做 : 最后plugin无解 : 你就是找不到plugin : 所以最后还就是不得不手工作坊式的个人英雄主义 : 王银想做没错,也做了东西出来 : 问题是你在eclipse上能下到他的东西的plugin吗? : 不行吧 : 具体问题具体分析,我告诉你的是我是怎么解决这个问题的
|
z****e 发帖数: 54598 | 84 例子已经给你了呀
plugin啊
eclipse这种ide的plugin可不是那么容易找
傻瓜化的开发工具,这个很少好不好,往往是最后一块拼图
vert.x到今天我还在vi,不是我不想用eclipse
是没有合适的plugin啊,你以为我爱用vi
我讨厌死vi了,垃圾,破烂,但是木有办法呀
你说的都只是prod上的,dev环境下的提升效率的工具你用得不多
IDE
【在 h*i 的大作中提到】 : 其他的FP语言我不知道。在Clojure这个生态环境里面,目前我还没有发现有啥缺了没 : 人作的东东。JVM上啥没有?Clojure只是JVM上薄薄的一层。想用一个FooClass类上的 : method1和方法method2? : (doto (FooClass. "bar" 1) : (.method1 arg1) : (.method2 arg2)) : 就这么简单。 : 我不用IDE而已,我看那些用IDE的Clojure程序员也很高兴,没觉得缺了啥。我是从IDE : 党转成vi党的,这又怎么说?
|
n*****3 发帖数: 1584 | 85 这个我们也才用, 还不坏...
但这不可能和spark update 同步的
【在 h*i 的大作中提到】 : spark clojure wrapper最新的叫sparkling: : https://github.com/gorillalabs/sparkling
|
z****e 发帖数: 54598 | 86 慢慢慢慢python的那些东西就会被人遗忘了
嘿嘿
【在 n*****3 的大作中提到】 : 这个我们也才用, 还不坏... : 但这不可能和spark update 同步的
|
d*******r 发帖数: 3299 | 87 我觉得用打印log来调试不是正符合server端的习惯吗?
online 跑着的 server xx 时间之前出了问题,只有 log 可以看呀,
哪能用 debugger 停住看变量值?
【在 h*i 的大作中提到】 : 说实话,我写程序其实基本就不debug, 程序除了问题,看症状我一般马上知道哪里出 : 了问题,很少需要设断点来发现哪里出错了。我写程序不debug的习惯也是逼出来的, : 当年在VAX终端上的上机时间一周只有一个小时,呵呵。
|
z****e 发帖数: 54598 | 88 手工作坊式的开发连log都是五花八门的
因为console.log的piece太多
每个人自己写自己的,导致没有一个统一的格式
每个方法的变量都是片段,因为太懒,程序员懒得把所有变量都print到log中去
用aop直接拦截,因为方法源只有一个,所以格式统一
打印出来的log异常工整简洁,便于查询归类和整理
debug是便于开发用的,开发时候就需要测试,这个时候有简单的工具
为什么不?
【在 d*******r 的大作中提到】 : 我觉得用打印log来调试不是正符合server端的习惯吗? : online 跑着的 server xx 时间之前出了问题,只有 log 可以看呀, : 哪能用 debugger 停住看变量值?
|
h*i 发帖数: 3446 | 89 Clojure的eclipse plugin叫作counterclockwise啥的,都出来好几年了。
vert.x还没有eclipse plugin? 说明什么?
【在 z****e 的大作中提到】 : 例子已经给你了呀 : plugin啊 : eclipse这种ide的plugin可不是那么容易找 : 傻瓜化的开发工具,这个很少好不好,往往是最后一块拼图 : vert.x到今天我还在vi,不是我不想用eclipse : 是没有合适的plugin啊,你以为我爱用vi : 我讨厌死vi了,垃圾,破烂,但是木有办法呀 : 你说的都只是prod上的,dev环境下的提升效率的工具你用得不多 : : IDE
|
z****e 发帖数: 54598 | 90 STABLE RELEASE 0.31.1
老样子,把版本号好好观赏下,第一个数字是啥?
vert.x的plugin太难做了
因为兼容一堆语言,clj的plugin都没搞好
vert.x只能继续等下去
不过如果坚持用 java的话,vert.x倒是很容易搞定
【在 h*i 的大作中提到】 : Clojure的eclipse plugin叫作counterclockwise啥的,都出来好几年了。 : vert.x还没有eclipse plugin? 说明什么?
|
|
|
h*i 发帖数: 3446 | 91 Clojure的production server可以自带REPL的,我现在都直接连上remote production
server change live code的,更他妈拽。呵呵。
【在 d*******r 的大作中提到】 : 我觉得用打印log来调试不是正符合server端的习惯吗? : online 跑着的 server xx 时间之前出了问题,只有 log 可以看呀, : 哪能用 debugger 停住看变量值?
|
d*******r 发帖数: 3299 | 92 大牛用 dynamic typing 难道没有错误地 access 某个变量,然后程序 crash 掉的吗?
比如我看你 clojure sample 里还有 access java class 的 data member 的代码,如
果那个 data member 不存在会如何?
我觉得 static typing 确实更 robust,不会run起来再 crash 掉。
还有,clojure 需要处理 validate remote message 这类的问题吗?
ligthtable,
has
【在 h*i 的大作中提到】 : static typing, dynamic type, 这是永远扯不清的。 : 我个人没觉得static typing对我写程序有多大帮助,从static的Java换到dynamic的 : Clojure,我没有觉得缺少了什么东西。大概static typing的好处我没感受到吧。你说 : 的IDE的这些方便东东, dynamic语言也能做到,实现的方法不同而已,比如用王垠那种 : 东西。对用户来说,如何实现的不值得关心,一样的用就行了。Clojure的ligthtable, : cursive等等据说都是很好的IDE,应该也有这些自动补全的功能。 : 个人的编程风格不同,我没要试图说服你。我以前是Java程序员,Java对我来说是has : been,你这些说法对我没什么用,所以也不要试图来说服我。 : 统计表明,大部分Clojure程序员以前是Java程序员,很少有FP背景的人变为Clojure程 : 序员的,因为那些人都很恨JVM,哈哈。
|
d*******r 发帖数: 3299 | 93 这个叼...
我是想学 Clojure 的,不过工作上没机会用...
大牛说说 Clojure 跟 Scheme 用起来主要区别是啥
production
【在 h*i 的大作中提到】 : Clojure的production server可以自带REPL的,我现在都直接连上remote production : server change live code的,更他妈拽。呵呵。
|
z****e 发帖数: 54598 | 94 jvm要crash没那么容易
cast exception可以搞定
不存在就是null pointer exception咯
都不是致命的,而且是常见的exception
包括除以0这种异常,例子看这个
http://stackoverflow.com/questions/5459865/how-can-i-throw-an-e
吗?
【在 d*******r 的大作中提到】 : 大牛用 dynamic typing 难道没有错误地 access 某个变量,然后程序 crash 掉的吗? : 比如我看你 clojure sample 里还有 access java class 的 data member 的代码,如 : 果那个 data member 不存在会如何? : 我觉得 static typing 确实更 robust,不会run起来再 crash 掉。 : 还有,clojure 需要处理 validate remote message 这类的问题吗? : : ligthtable, : has
|
h*i 发帖数: 3446 | 95 不是大牛,我学Clojure以前没有接触过任何LISP。所以不懂scheme, 据我听说,
Clojure不是很纯粹的LISP, 除了list之外,还引入了其他核心数据结构,map, vector
, set,就是{}, [], #{}, 不像其他LISP只用(),所以把数据弄来弄去的倒腾很容易,
很直观;没有reader macro, 社区也不鼓励用macro, macro主要是高手们用来作轮子用
的,一般应用程序猿基本不用宏,所以有些LISP程序员不喜欢Clojure。不过Clojure的
用户也不是他们,而是我们这种本来用Java的人。
其他的,主要就是Clojure的数据缺省是强制性immutable的,没有变量的存在,scheme
应该不是这样的。这样的话,一般程序员学Clojure一开始,可能会觉得自己都不会编
程了,因为不能用for loop啥的。Clojure的for是list comprehension, 和for loop
完全不同, Clojure的loop recur倒是有点像for loop, 不过也是被皱眉头的。
当然Clojure用熟了,核心的那些map,reduce,filter之类的函数都用熟练了,觉得也没
啥magical的,这个语言真是他妈的简单,没有什么陷阱和机关。无非是更productive
一点,少写点code而已,也不用学别人的乱七八糟的语法规则啥的。编程还是编程,
tedious shit还是要人来写,哈哈。
【在 d*******r 的大作中提到】 : 这个叼... : 我是想学 Clojure 的,不过工作上没机会用... : 大牛说说 Clojure 跟 Scheme 用起来主要区别是啥 : : production
|
h*i 发帖数: 3446 | 96 如果不调用Java,全用Clojure数据结构的话,不会出null pointer exception crash.
Clojure handle it for you.
如果调Java的数据的话,还是和写Java程序一样的,要自己make sure it's not null
。Java's syntax check does not help with such runtime exceptions. Unless it
has a type system like that of Haskell, but Java does not have that.
吗?
【在 d*******r 的大作中提到】 : 大牛用 dynamic typing 难道没有错误地 access 某个变量,然后程序 crash 掉的吗? : 比如我看你 clojure sample 里还有 access java class 的 data member 的代码,如 : 果那个 data member 不存在会如何? : 我觉得 static typing 确实更 robust,不会run起来再 crash 掉。 : 还有,clojure 需要处理 validate remote message 这类的问题吗? : : ligthtable, : has
|
d*******r 发帖数: 3299 | 97 不鼓励自己写macro是干活的样子呀
vector
scheme
loop
【在 h*i 的大作中提到】 : 不是大牛,我学Clojure以前没有接触过任何LISP。所以不懂scheme, 据我听说, : Clojure不是很纯粹的LISP, 除了list之外,还引入了其他核心数据结构,map, vector : , set,就是{}, [], #{}, 不像其他LISP只用(),所以把数据弄来弄去的倒腾很容易, : 很直观;没有reader macro, 社区也不鼓励用macro, macro主要是高手们用来作轮子用 : 的,一般应用程序猿基本不用宏,所以有些LISP程序员不喜欢Clojure。不过Clojure的 : 用户也不是他们,而是我们这种本来用Java的人。 : 其他的,主要就是Clojure的数据缺省是强制性immutable的,没有变量的存在,scheme : 应该不是这样的。这样的话,一般程序员学Clojure一开始,可能会觉得自己都不会编 : 程了,因为不能用for loop啥的。Clojure的for是list comprehension, 和for loop : 完全不同, Clojure的loop recur倒是有点像for loop, 不过也是被皱眉头的。
|
d*******r 发帖数: 3299 | 98 多谢你们关于 JVM handle exception 的解释 |
h*i 发帖数: 3446 | 99 是啊,Clojure的哲学就是实用主义,能简单就简单。 simplicity >> power
【在 d*******r 的大作中提到】 : 不鼓励自己写macro是干活的样子呀 : : vector : scheme : loop
|
h*i 发帖数: 3446 | 100 Clojure的社区很好,人都比较友好,有问题可以随便问,写了code可以让人给你
review, 不少人很热衷于review别人的code.
4clojure很好,可以follow别人,一个题自己作完了以后,去看看同样的问题高手怎么
解决的,这样进步很快。
【在 n******7 的大作中提到】 : 哦,明白了。我以为你们用incanter完全代替R了 : 我们是杀老鼠的,就没有产品 : 不过现在要转型做服务了 : 决定试试用clojure来做这个杀老鼠2.0
|
|
|
f******x 发帖数: 98 | 101 完全同意,我也是在做完4clojure上的题目后才真正理解和认同Clojure的philosophy。
编程不学LISP,纵写亿行也枉然
Clojure,Clojure,不用赋值最牛逼, |
n******7 发帖数: 12463 | 102 谢谢建议
今天看了一个比较scala和clojure的blog也说这个community的问题
The Community
Ok, so Scala gets a 3.5 star rating. I deducted 1 star from Scala because
Martin Odensky doesn’t attend it. I asked how people got in touch with him
and I got comments like “He contacted me on Skype once”, “He uses white
rats as messengers” etc. He’s not involved and interacting with the
community in the same way Rich Hickey (author of Clojure) is and that really
makes all the difference. The last 0.5 star I deducted was because I
actually got really unfriendly messages from some of the members – not
Common Lisp style evil – but getting there. In all the time I’ve spent on
#clojure I remember 1 single instance where somebody dropped a rude childish
remark and that person was immediately corrected by Rich Hickey – So the
modesty and etiquette which Rich nurtures is not found on #scala in the same
scale – and that’s a real shame.
Why does Clojure then get the full 5 stars? People are as friendly there as
on #scala. I’ve often joked saying we have no FAQ we have Chouser (Chris
Houser), but there’s some truth to it. Almost every question gets answered,
everyone gets help regardless of the level on which you ask. Secondly Rich
Hickey attends daily, taking debates, giving advice, educating the people. I
’ve even seen him do a public code-review on the Google group which was
just an amazing piece of consultant assistance that we got for free. And
lastly – Never ever, does the language/tone/etiquette drop below common
decency and friendliness.
【在 h*i 的大作中提到】 : Clojure的社区很好,人都比较友好,有问题可以随便问,写了code可以让人给你 : review, 不少人很热衷于review别人的code. : 4clojure很好,可以follow别人,一个题自己作完了以后,去看看同样的问题高手怎么 : 解决的,这样进步很快。
|
T*******x 发帖数: 8565 | 103 这个有道理啊。
,
【在 h*i 的大作中提到】 : 不觉得更直观。 : 搞那些不必要的syntax也是没有办法的事,因为会有歧义,对不对? : {}出现在clojure里面就只有两种可能,一个是map, 一个是出现在#{}里面,是set, : 这是不会混淆的。 : []就只有一个意思,就是vector, 也没有歧义。 : xml当然不直观,一堆名字,名字(type)是无限的,而符号是有限的。 : JSON把不必要的名字(type)都去掉了,程序员们都很喜欢,所以取代了xml.
|
l*********s 发帖数: 5409 | 104 re, I really enjoy Rich Hickey's talks. In comparison, Martin is way too
serious.
him
really
【在 n******7 的大作中提到】 : 谢谢建议 : 今天看了一个比较scala和clojure的blog也说这个community的问题 : The Community : Ok, so Scala gets a 3.5 star rating. I deducted 1 star from Scala because : Martin Odensky doesn’t attend it. I asked how people got in touch with him : and I got comments like “He contacted me on Skype once”, “He uses white : rats as messengers” etc. He’s not involved and interacting with the : community in the same way Rich Hickey (author of Clojure) is and that really : makes all the difference. The last 0.5 star I deducted was because I : actually got really unfriendly messages from some of the members – not
|