由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 两个我永远都不想碰的语言
相关主题
珍惜生命,远离 R 和 GoPython Q: function pass in struct pointer, come back with data filled
a simple design question最近学了一下 Go
以下两个C 代码是不是完全等价?用c怎么实现generic stack (转载)
有什么语言能取代python作数据处理? R?typedef 的一个问题
python有什么类似Rstudio或者matlab的IDE吗?http://golang.org/ 你们都是hello 世界吗?
没有比Visual Studio更好的IDE了吧?感觉控制反转是印度人发明出来忽悠人的
请教一个c++ 里functor的问题go 怎么 disable这个
写惯了C++ code,再写C code真不习惯go这个首字母大小写代表public或者private是个很噁心的feature吧?
相关话题的讨论汇总
话题: go话题: nil话题: 语言话题: foob话题: struct
进入Programming版参与讨论
1 (共1页)
c*****t
发帖数: 1879
1
最近无聊,稍微研究了下两个语言,彻底被雷了。
第一是 R 。可以说是世界上最 fucked up 的语言之一(COBOL 是另外一个)。
你看一下这篇文章就明白了:
https://xianblog.wordpress.com/2010/09/13/simply-start-over-and-build-
something-better/
如果你非要写 R 代码。建议你把所有的 variable 都弄个 prefix 。免得你
不小心碰到这种麻烦事。
第二就是 Go 。整个一傻逼语言。
1) 如果该语言有 pointer,但是其速度比 Java 还慢点,谁 TMD 有病才用它。
再不用说,Go 里面需要知道很多很多 low level 的东西,但是搞了半天比 Java
还慢?!!
2) Stupid copies 。好吧,你有 pointer 不用,非得 pass by value (i.e.
struct copy),真是脑袋抽筋了。copy 大部分情况下比 reference 慢。
reference 是可以放在 register 里的,而 struct 一旦比 register 大,
就会占内存。然后 Go idiots 说 cache 很 precious,那你还搞那么多 copy
干嘛?这么多 copy,debug 成了问题。C/C++ debugging 常用的 watch r/w
办法彻底被废了。到目前为止,Go 的 debug 也是主要靠 printf 。
好吧,Go 大概是为了避免产生太多的 object on heap,但是你看看下一步:
3) 为了保证 pass by reference ,有些代码还特意就是
type dumb struct {
wtf * pointer
}
真是什么样的傻逼语言才产生这种怪胎。如果该 struct 是 pass by reference,
该 struct 又得放在 heap 上。真是有够无聊。
4) 傻逼的 error handling 。Exception 是慢,但是 Go 的 error handling
整个一个失败。如果某人大意了没读 error return,该 error 就彻底消失,
这就是一个大 bug,而且是很难 trace 的一个问题。你如果每一个 function
call 都读一下 error,整个屏幕上 50-75% 的代码都是 error handling 。
更不用说,return multiple value 也不快。
写 Java 的人都知道,Java 的 exception 对 debugging 帮助很大。Go lang
有 panic / recover,但是太原始了。Go 语言对 debugging 的不重视本身就
是一个致命伤。
5) 没有 generics 。一个没有 generics 的语言根本没资格谈论 type safety 。
6) 傻逼的 map, array, slice, range 。这个语言搞了那么多 syntax sugar,
然后这些不支持 user 的 container 。更因为没有 generics ,user container
根本没法提供 type safety 。然后 map / array / slice somehow 有 type
safety 。都 1.5 版本了,连最基本的东西都没有。
7) 傻逼的 typed nil != nil 。Go 语言是可以产生 typed nil 。这玩意还不能
简单的 nil check 。玩玩下面的代码。想吐了么?
package main
type A struct{}
func foo (a interface{}) {
if (a == nil) {
println ("is nil")
}
if (a == (*A)(nil)) {
println ("is type A nil")
}
}
func main() {
var p *A // p is initiated to typed nil
foo (p)
println ("==========")
foo (nil)
}
当你写个程序以为 a == nil 是 nil check 却发现不工作,会不会吐血?
8) 傻逼的 syntax 。居然强制性的要求 { 必须在 function / if 的那一行末尾。
事实上,{ 在下一行一般来说查找起来更方便。就算你喜欢在行末尾,也没必要
强制性搞成这样吧。
9) 傻逼的 instance method / composition / inheritance 。这方面 Go 彻彻
底底是个烂摊子。随便给你个例子:
package main
import "fmt"
type A struct{ string }
type C struct {
A
s1 A
}
func (a *A) fooA () {
fmt.Printf ("fooA: %v\n", a)
}
func fooB (a *A) {
fmt.Printf ("fooB: %v\n", a)
}
func main() {
c := C{ A{ "a" }, A{ "b" } }
c.s1.fooA ()
c.fooA ()
fooB (&c.s1)
fooB (&c) // prog.go:27: cannot use &c (type *C) as type *A in argument
to fooB
}
看看 fooA 和 fooB 的区别。再看看 compiler error 。Go 语言这里的问题太多
了。
同学们,珍惜生命,远离 R 和 Go 。
b***e
发帖数: 1419
2
这个还算是定向的喷,有着力点。

【在 c*****t 的大作中提到】
: 最近无聊,稍微研究了下两个语言,彻底被雷了。
: 第一是 R 。可以说是世界上最 fucked up 的语言之一(COBOL 是另外一个)。
: 你看一下这篇文章就明白了:
: https://xianblog.wordpress.com/2010/09/13/simply-start-over-and-build-
: something-better/
: 如果你非要写 R 代码。建议你把所有的 variable 都弄个 prefix 。免得你
: 不小心碰到这种麻烦事。
: 第二就是 Go 。整个一傻逼语言。
: 1) 如果该语言有 pointer,但是其速度比 Java 还慢点,谁 TMD 有病才用它。
: 再不用说,Go 里面需要知道很多很多 low level 的东西,但是搞了半天比 Java

w**z
发帖数: 8232
3
问题是这两个语言用的人懂的人本来就少,没人会和他辩。

【在 b***e 的大作中提到】
: 这个还算是定向的喷,有着力点。
p****e
发帖数: 3548
4
R 特点就是快粗猛,用来验证各种模型
非得跟java之类一样才是没道理

【在 w**z 的大作中提到】
: 问题是这两个语言用的人懂的人本来就少,没人会和他辩。
p*****2
发帖数: 21240
5
go确实很烂呀
只是优势不在语言

【在 w**z 的大作中提到】
: 问题是这两个语言用的人懂的人本来就少,没人会和他辩。
t**r
发帖数: 3428
6
太同意了
d*******r
发帖数: 3299
7
优势在生态?
或者只在用 Go 的并行特性?

【在 p*****2 的大作中提到】
: go确实很烂呀
: 只是优势不在语言

c******n
发帖数: 16666
8
并发?

【在 d*******r 的大作中提到】
: 优势在生态?
: 或者只在用 Go 的并行特性?

n******7
发帖数: 12463
9
断续用了9年的R了,一直不太喜欢
写点简单的东西还好,一旦复杂一点,就麻烦了
首先是debug很头疼
有很多没有documented的东西,需要往往搜来搜去
跑着跑着出错了,看看出错信息也往往不知所谓
R界一统江湖的IDE,Rstudio,直到最近才支持设置断点
之前发过一个帖子,有个分析数据的R脚本本来好好的
加了点功能,就会在有些sample上有问题,但是有些sample又是好的
后来发现,在中间的某一步,如果matrix变成了一行的,会自动转化成vector
纯坑爹
而且各种矢量化操作,比如apply家族,让debug更加困难
其次是performance太差,特别是不得不用loop的情况
基本上比python之类的还要慢一个数量级
数据稍微大点,你就可以先干别的去了
还有就是学习曲线很不友好
我起码算中位数智商吧,用了这么多年R,还是经常要上网搜解决方案
身边的人,除了统计专业的,可能还不如我
加上很多统计的东西在里面,光是一个character <-> factor
估计都困扰了很多初学者
这点最近几年可能好点,因为突然冒出来很多R的书,加上Rstudio的出现
很多R的包也是这样。比如ggplot2,官方文档根本不够。每次要画点fancy的,就是不
断google。我也买过ggplot的书,遇到问题还不如google方便。而且这个玩意语法一直
在变,之前版本work的,后来就不行了。开始以为自己学的不系统,后来我发现别人也
是这样感觉的。一哥们儿说每次几个月不用,就得重新学习一遍
R主要的优点:
1. 基本上任何统计的分析,都有R的实现。R最初就是作为一个统计工具,而不是编程
语言设计的。dataframe做统计分析非常方便
2. 生成的2D静态图质量非常好
我现在基本只用R画图。python的numpy+scipy+pandas+matplotlib可以替代大部分R的
功能,而学习起来容易太多了。最近还在研究scala,这个语言其实很适合做统计分析
,就是各种工具还需要假以时日。
如果不是统计专业的,实在没必要折腾一门DSL。
l******n
发帖数: 9344
10
R本身就是作为统计工具诞生的,所以你遇到的问题很正常。r现在发展很快,所以有变
化也正常。
R的performance是最大的问题,不过现在的思路都是先做出来,至少解决有无的问题,
优化性能那是下一阶段的工作。
现在R的已经广泛被接受了,比如tabulea可以直接用r,基本所有的 analytics平台都
已经整合了r或者正在整合。r script已经可以比较容易的移植或者直接production,
这都是非常有利的。更不要说学院派都是r的fans。
所以r也没有上边说的那么差,学学用用不会吃亏。

【在 n******7 的大作中提到】
: 断续用了9年的R了,一直不太喜欢
: 写点简单的东西还好,一旦复杂一点,就麻烦了
: 首先是debug很头疼
: 有很多没有documented的东西,需要往往搜来搜去
: 跑着跑着出错了,看看出错信息也往往不知所谓
: R界一统江湖的IDE,Rstudio,直到最近才支持设置断点
: 之前发过一个帖子,有个分析数据的R脚本本来好好的
: 加了点功能,就会在有些sample上有问题,但是有些sample又是好的
: 后来发现,在中间的某一步,如果matrix变成了一行的,会自动转化成vector
: 纯坑爹

相关主题
没有比Visual Studio更好的IDE了吧?Python Q: function pass in struct pointer, come back with data filled
请教一个c++ 里functor的问题最近学了一下 Go
写惯了C++ code,再写C code真不习惯用c怎么实现generic stack (转载)
进入Programming版参与讨论
t*****d
发帖数: 525
11
go 确实是傻逼 语言

【在 c*****t 的大作中提到】
: 最近无聊,稍微研究了下两个语言,彻底被雷了。
: 第一是 R 。可以说是世界上最 fucked up 的语言之一(COBOL 是另外一个)。
: 你看一下这篇文章就明白了:
: https://xianblog.wordpress.com/2010/09/13/simply-start-over-and-build-
: something-better/
: 如果你非要写 R 代码。建议你把所有的 variable 都弄个 prefix 。免得你
: 不小心碰到这种麻烦事。
: 第二就是 Go 。整个一傻逼语言。
: 1) 如果该语言有 pointer,但是其速度比 Java 还慢点,谁 TMD 有病才用它。
: 再不用说,Go 里面需要知道很多很多 low level 的东西,但是搞了半天比 Java

n******7
发帖数: 12463
12
现在数据分析的需求大,R的需求在增长也不奇怪
但是这些事情用python也可以,所谓的data science里面用python的很多
而且python的user base要大很多
从学习成本来看,我觉得python更值得投资
更不说python是个通用语言,做统计分析之外的事情比R强太多
performance也是挺重要的,因为要test一个model,别人1小时拿结果,你10小时
最后你肯定没别人做的快
确是多学学不会吃亏,问题是时间成本

【在 l******n 的大作中提到】
: R本身就是作为统计工具诞生的,所以你遇到的问题很正常。r现在发展很快,所以有变
: 化也正常。
: R的performance是最大的问题,不过现在的思路都是先做出来,至少解决有无的问题,
: 优化性能那是下一阶段的工作。
: 现在R的已经广泛被接受了,比如tabulea可以直接用r,基本所有的 analytics平台都
: 已经整合了r或者正在整合。r script已经可以比较容易的移植或者直接production,
: 这都是非常有利的。更不要说学院派都是r的fans。
: 所以r也没有上边说的那么差,学学用用不会吃亏。

h*******u
发帖数: 15326
13
tinn-r比rstudio好吧,几年前就有断点了,但是也很屎
关键r根本就不是系统设计出来的,就一堆破烂拼在一起。看看matrix和vector关系,
一团乱麻

【在 n******7 的大作中提到】
: 断续用了9年的R了,一直不太喜欢
: 写点简单的东西还好,一旦复杂一点,就麻烦了
: 首先是debug很头疼
: 有很多没有documented的东西,需要往往搜来搜去
: 跑着跑着出错了,看看出错信息也往往不知所谓
: R界一统江湖的IDE,Rstudio,直到最近才支持设置断点
: 之前发过一个帖子,有个分析数据的R脚本本来好好的
: 加了点功能,就会在有些sample上有问题,但是有些sample又是好的
: 后来发现,在中间的某一步,如果matrix变成了一行的,会自动转化成vector
: 纯坑爹

n******7
发帖数: 12463
14
tinn-r记得就是个editor吧,老早就有了
rstudio的几个panel很适合像我这样边run边写边画图的

【在 h*******u 的大作中提到】
: tinn-r比rstudio好吧,几年前就有断点了,但是也很屎
: 关键r根本就不是系统设计出来的,就一堆破烂拼在一起。看看matrix和vector关系,
: 一团乱麻

h*******u
发帖数: 15326
15
tinn-r设置完了也是集成IDE形式
里面有按钮可以完成全套编辑运行除虫

【在 n******7 的大作中提到】
: tinn-r记得就是个editor吧,老早就有了
: rstudio的几个panel很适合像我这样边run边写边画图的

c*****t
发帖数: 1879
16
你就没看我 link 的文章。其指出,R 的 scope 是个非常大的问题。
f = function() {
if (runif(1) > .5)
x = 10
x
}
The x being returned by this function is randomly local or global.

【在 p****e 的大作中提到】
: R 特点就是快粗猛,用来验证各种模型
: 非得跟java之类一样才是没道理

j******f
发帖数: 825
17
GO就是装逼语言,但是狗贩子很多。
L****8
发帖数: 3938
18
x能变成global? r狗屎逼的

【在 c*****t 的大作中提到】
: 你就没看我 link 的文章。其指出,R 的 scope 是个非常大的问题。
: f = function() {
: if (runif(1) > .5)
: x = 10
: x
: }
: The x being returned by this function is randomly local or global.

p****e
发帖数: 3548
19
R的变量范围是在一个environment,变量查找先在函数的env,再到global,很多函数
也是只在同样的env有效
跟cmd的环境变量一样,你可以自己设置不一样的变量,但是没改变前,都是全局的值

【在 c*****t 的大作中提到】
: 你就没看我 link 的文章。其指出,R 的 scope 是个非常大的问题。
: f = function() {
: if (runif(1) > .5)
: x = 10
: x
: }
: The x being returned by this function is randomly local or global.

n******7
发帖数: 12463
20
看了一下
tinn-r今非昔比了,有了R console等panel,确实算IDE了
不过还是windows only,当年单核时代这是个很大的不足

【在 h*******u 的大作中提到】
: tinn-r设置完了也是集成IDE形式
: 里面有按钮可以完成全套编辑运行除虫

相关主题
typedef 的一个问题go 怎么 disable这个
http://golang.org/ 你们都是hello 世界吗?go这个首字母大小写代表public或者private是个很噁心的feature吧?
感觉控制反转是印度人发明出来忽悠人的做大项目的话,有两个语言features是杀手
进入Programming版参与讨论
n******7
发帖数: 12463
21
这样做是方便了随便写写code分析数据的
不需要考虑变量scope,就近找到就好
问题是debug的时候就哭了
所以R还是适合写点简单的玩意,一旦复杂度上去了
维护性和性能都是一坨

【在 p****e 的大作中提到】
: R的变量范围是在一个environment,变量查找先在函数的env,再到global,很多函数
: 也是只在同样的env有效
: 跟cmd的环境变量一样,你可以自己设置不一样的变量,但是没改变前,都是全局的值

P*******L
发帖数: 2637
22
numpy 的 array 和 matrix 也是一团乱
看来看去还是 matlab 和 julia 比较顺眼

【在 h*******u 的大作中提到】
: tinn-r比rstudio好吧,几年前就有断点了,但是也很屎
: 关键r根本就不是系统设计出来的,就一堆破烂拼在一起。看看matrix和vector关系,
: 一团乱麻

n*******y
发帖数: 453
23
像我这种起名字没有想象力的人, scope是个大问题。

【在 n******7 的大作中提到】
: 这样做是方便了随便写写code分析数据的
: 不需要考虑变量scope,就近找到就好
: 问题是debug的时候就哭了
: 所以R还是适合写点简单的玩意,一旦复杂度上去了
: 维护性和性能都是一坨

h*******u
发帖数: 15326
24
r唯一好处就是轮子多了
比较简单的算法等都有现成轮子
如果讲handy,现在python+matplotlib+pandas比r爽多了,就是轮子少

【在 n******7 的大作中提到】
: 这样做是方便了随便写写code分析数据的
: 不需要考虑变量scope,就近找到就好
: 问题是debug的时候就哭了
: 所以R还是适合写点简单的玩意,一旦复杂度上去了
: 维护性和性能都是一坨

c*****t
发帖数: 1879
25
是这样的。但是这个设计跟其它语言都很不一样。特别是习惯了 closure 的人
很容易犯这种错误。另一方面,这种设计其实是要让用户在 compile time
的时候想到 run time 的情形。有点类似 global everywhere 的感觉。
要是一天到晚只做 R 还好,如果几种语言经常换的话,太容易出错了。
解决办法不是没有,比如说所有的变量都是 pass in,然后在 function 开头
init 所有要用的 local variable 。但是,写 R 的有多少人能做到这样严格
写程序 ?甚至这语言本身的设计鼓励大家滥用这种东西。

【在 p****e 的大作中提到】
: R的变量范围是在一个environment,变量查找先在函数的env,再到global,很多函数
: 也是只在同样的env有效
: 跟cmd的环境变量一样,你可以自己设置不一样的变量,但是没改变前,都是全局的值

v*******e
发帖数: 11604
26

用R写逻辑的人是纯傻逼
R要这样用:从文件读入数据,画图,退出;或者,从文件读入数据,call统计函数分
析之,写结果到文件,退出。别的处理都用python实现。

【在 c*****t 的大作中提到】
: 是这样的。但是这个设计跟其它语言都很不一样。特别是习惯了 closure 的人
: 很容易犯这种错误。另一方面,这种设计其实是要让用户在 compile time
: 的时候想到 run time 的情形。有点类似 global everywhere 的感觉。
: 要是一天到晚只做 R 还好,如果几种语言经常换的话,太容易出错了。
: 解决办法不是没有,比如说所有的变量都是 pass in,然后在 function 开头
: init 所有要用的 local variable 。但是,写 R 的有多少人能做到这样严格
: 写程序 ?甚至这语言本身的设计鼓励大家滥用这种东西。

m******2
发帖数: 564
27

## 断续用了9年的R了,一直不太喜欢
## 写点简单的东西还好,一旦复杂一点,就麻烦了
同意,括号很烦人
## 首先是debug很头疼
## 有很多没有documented的东西,需要往往搜来搜去
## 跑着跑着出错了,看看出错信息也往往不知所谓
## R界一统江湖的IDE,Rstudio,直到最近才支持设置断点
这点似乎Python也不太好吧?很多的包依靠贡献者的自觉。R的包至少强制规定有pdf的
说明,还有用法,但是Python的包呢?似乎Python自己更甩手不管了
## 之前发过一个帖子,有个分析数据的R脚本本来好好的
## 加了点功能,就会在有些sample上有问题,但是有些sample又是好的
## 后来发现,在中间的某一步,如果matrix变成了一行的,会自动转化成vector
## 纯坑爹
这个是挺讨厌的,横向量还是纵向量的信息被直接忽略了,真是统计学家的模糊思维
## 而且各种矢量化操作,比如apply家族,让debug更加困难
人家给提供了方便功能还有错了?apply底层就是loop,你不服可以自己手工编写loop
来做
## 其次是performance太差,特别是不得不用loop的情况
## 基本上比python之类的还要慢一个数量级
## 数据稍微大点,你就可以先干别的去了
嗯,这个是讨厌,不知道并行的包好不好用。感觉R和Python都喜欢在主程序里留下最
简单最弱智的功能,然后稍微高级点的都要靠各种包来实现,这一点很不好。例如
Python写个Excel文件估计要用到N个外部包,xlrd, xlwt, xlWriter,等等。
开源软件都喜欢这么的装吗?
## 还有就是学习曲线很不友好
## 我起码算中位数智商吧,用了这么多年R,还是经常要上网搜解决方案
## 身边的人,除了统计专业的,可能还不如我
## 加上很多统计的东西在里面,光是一个character <-> factor
## 估计都困扰了很多初学者
## 这点最近几年可能好点,因为突然冒出来很多R的书,加上Rstudio的出现
真的没感觉Python在文档方面比R做的更好,尤其是各种包的说明,也许我还没找到地


【在 n******7 的大作中提到】
: 断续用了9年的R了,一直不太喜欢
: 写点简单的东西还好,一旦复杂一点,就麻烦了
: 首先是debug很头疼
: 有很多没有documented的东西,需要往往搜来搜去
: 跑着跑着出错了,看看出错信息也往往不知所谓
: R界一统江湖的IDE,Rstudio,直到最近才支持设置断点
: 之前发过一个帖子,有个分析数据的R脚本本来好好的
: 加了点功能,就会在有些sample上有问题,但是有些sample又是好的
: 后来发现,在中间的某一步,如果matrix变成了一行的,会自动转化成vector
: 纯坑爹

1 (共1页)
进入Programming版参与讨论
相关主题
go这个首字母大小写代表public或者private是个很噁心的feature吧?python有什么类似Rstudio或者matlab的IDE吗?
做大项目的话,有两个语言features是杀手没有比Visual Studio更好的IDE了吧?
Golang的promise lib哪个好?请教一个c++ 里functor的问题
C到底能走多远。。。。。。写惯了C++ code,再写C code真不习惯
珍惜生命,远离 R 和 GoPython Q: function pass in struct pointer, come back with data filled
a simple design question最近学了一下 Go
以下两个C 代码是不是完全等价?用c怎么实现generic stack (转载)
有什么语言能取代python作数据处理? R?typedef 的一个问题
相关话题的讨论汇总
话题: go话题: nil话题: 语言话题: foob话题: struct