g****t 发帖数: 31659 | 1 多核也好,并发也好。FP语言的很多特点无疑在很多场景下是有用的。但是主要学FP完
全没必要。
FP自身就有两类,一类Lisp出来,一类ML出来。
学FP,那得先内部较劲。分出来Lisp和ML(Haskell,F#)
谁好谁不好。这个问题没个五年,就无法有自己的认识。
那你学哪个FP?
这可不像python vs C plus plus
类似的问题还有非常多。真做项目,你都给一个个解决吗?
再说了,现在java, C sharp,...都有加FP一些特点进来.
真的不够你用吗?
要主要走FP可以
但你得有足够的力量克服很多不会找到参考答案的问题
就是说你要有足够的力量
不然的话这投入是不划算的 |
w***g 发帖数: 5958 | 2 除非对FP及其实现(如何从lambda演算编译成x86指令, lazy evaluation何时
被求值)有比较深入的理解,一般人其实很难对FP代码的性能有比较准确的预期。
运算在什么时候发生在哪行代码,花了多少内存,都要绕几个弯才能想明白。
所以FP语言高性能,我觉得是个神话。
我这里的FP特指haskell。但我觉得不失一般性。
第一,haskell是一种纯FP语言。别的混合型语言,你说不好是哪个成分在起作用。
第二,haskell是编译型的。解释型语言讨论性能没有现实意义。
实际写多线程多核,C/C++或者java/C#,完全可以写const function。
我不认为这是FP特性。如果是const function,里面哪怕都是for loop实现的,
也还是可以很容易并行化,完全不需要写成lambda演算。所需要的,只是
理解const关键字怎么用而已。
【在 g****t 的大作中提到】 : 多核也好,并发也好。FP语言的很多特点无疑在很多场景下是有用的。但是主要学FP完 : 全没必要。 : FP自身就有两类,一类Lisp出来,一类ML出来。 : 学FP,那得先内部较劲。分出来Lisp和ML(Haskell,F#) : 谁好谁不好。这个问题没个五年,就无法有自己的认识。 : 那你学哪个FP? : 这可不像python vs C plus plus : 类似的问题还有非常多。真做项目,你都给一个个解决吗? : 再说了,现在java, C sharp,...都有加FP一些特点进来. : 真的不够你用吗?
|
d******c 发帖数: 2407 | 3 FP主要宣传的不是高性能把,提到性能也是因为并行带来的。
FP原则能带来的是放心,我说的不是FP语言特性,什么lamda之类,也不一定要用FP语
言实现,而是那几个FP编程原则。
每个单元的影响是可控的,在范围内,单元是可以随意组合的。有全局变量和side
effect的时候,你必须考虑这些因素,但是编程的时候这些并不是很明显
一段程序是否引用了全局变量,一眼看过去并不明显
是否有side effect,也不明显
于是你只能自己记住,或者写在comments里。
全局变量的影响可能是跨越好几个函数,分散在各个地方的,更不好记住
人的注意力只能同时考虑几件事,这样思考起来太累,过段时间以后重新捡起来很困难
,别人读也很困难。
这是程序水平的提高,当然对程序员要求高。
还有强调强类型的,那是公司老板知道招的都是一大堆新手弱人容易出错,所以有越多
检查越多约束越好,减少愚蠢错误。
【在 w***g 的大作中提到】 : 除非对FP及其实现(如何从lambda演算编译成x86指令, lazy evaluation何时 : 被求值)有比较深入的理解,一般人其实很难对FP代码的性能有比较准确的预期。 : 运算在什么时候发生在哪行代码,花了多少内存,都要绕几个弯才能想明白。 : 所以FP语言高性能,我觉得是个神话。 : 我这里的FP特指haskell。但我觉得不失一般性。 : 第一,haskell是一种纯FP语言。别的混合型语言,你说不好是哪个成分在起作用。 : 第二,haskell是编译型的。解释型语言讨论性能没有现实意义。 : 实际写多线程多核,C/C++或者java/C#,完全可以写const function。 : 我不认为这是FP特性。如果是const function,里面哪怕都是for loop实现的, : 也还是可以很容易并行化,完全不需要写成lambda演算。所需要的,只是
|
h**********c 发帖数: 4120 | 4 你说得问题我觉得更应该从建模,normal form,逻辑的优化来解决
目前我没有看到FP对于简化程序结构的任何讨论
完全是一套干儿子打法,我这东西好,你必须得有,不用躺地上打滚
比如象电路设计门电路得简化优化
【在 d******c 的大作中提到】 : FP主要宣传的不是高性能把,提到性能也是因为并行带来的。 : FP原则能带来的是放心,我说的不是FP语言特性,什么lamda之类,也不一定要用FP语 : 言实现,而是那几个FP编程原则。 : 每个单元的影响是可控的,在范围内,单元是可以随意组合的。有全局变量和side : effect的时候,你必须考虑这些因素,但是编程的时候这些并不是很明显 : 一段程序是否引用了全局变量,一眼看过去并不明显 : 是否有side effect,也不明显 : 于是你只能自己记住,或者写在comments里。 : 全局变量的影响可能是跨越好几个函数,分散在各个地方的,更不好记住 : 人的注意力只能同时考虑几件事,这样思考起来太累,过段时间以后重新捡起来很困难
|
g****t 发帖数: 31659 | 5 你说的这些东西,C等语言写起来照样无难度。以前有家公司出过
One time assignment C。为此学fp系统还不如学OO
所以你说的和scala这种不是一回事。FP函数可以改自己的上下文,这个和goto类似有
时候可以非常高效,有不少奇技淫巧。lisp半页纸就可以实现一个eval,你想想能搞出
多少花样吧
: FP主要宣传的不是高性能把,提到性能也是因为并行带来的。
: FP原则能带来的是放心,我说的不是FP语言特性,什么lamda之类,也不
一定要
用FP语
: 言实现,而是那几个FP编程原则。
: 每个单元的影响是可控的,在范围内,单元是可以随意组合的。有全局变
量和
side
: effect的时候,你必须考虑这些因素,但是编程的时候这些并不是很明显
: 一段程序是否引用了全局变量,一眼看过去并不明显
: 是否有side effect,也不明显
: 于是你只能自己记住,或者写在comments里。
: 全局变量的影响可能是跨越好几个函数,分散在各个地方的,更不好记住
: 人的注意力只能同时考虑几件事,这样思考起来太累,过段时间以后重新
捡起来
很困难
【在 d******c 的大作中提到】 : FP主要宣传的不是高性能把,提到性能也是因为并行带来的。 : FP原则能带来的是放心,我说的不是FP语言特性,什么lamda之类,也不一定要用FP语 : 言实现,而是那几个FP编程原则。 : 每个单元的影响是可控的,在范围内,单元是可以随意组合的。有全局变量和side : effect的时候,你必须考虑这些因素,但是编程的时候这些并不是很明显 : 一段程序是否引用了全局变量,一眼看过去并不明显 : 是否有side effect,也不明显 : 于是你只能自己记住,或者写在comments里。 : 全局变量的影响可能是跨越好几个函数,分散在各个地方的,更不好记住 : 人的注意力只能同时考虑几件事,这样思考起来太累,过段时间以后重新捡起来很困难
|
d******c 发帖数: 2407 | 6 用什么语言都能写到一定程度,无非是语言支持的方便程度不同。
所以我说的是functional programming, 不是functional programming language,语
言不是重点,重要的是原则。
【在 g****t 的大作中提到】 : 你说的这些东西,C等语言写起来照样无难度。以前有家公司出过 : One time assignment C。为此学fp系统还不如学OO : 所以你说的和scala这种不是一回事。FP函数可以改自己的上下文,这个和goto类似有 : 时候可以非常高效,有不少奇技淫巧。lisp半页纸就可以实现一个eval,你想想能搞出 : 多少花样吧 : : : FP主要宣传的不是高性能把,提到性能也是因为并行带来的。 : : FP原则能带来的是放心,我说的不是FP语言特性,什么lamda之类,也不 : 一定要 : 用FP语
|
c******r 发帖数: 512 | 7 确实是这样,比如简单的 quicksort 吧, 用C写, 50行, OCaml, 5 行。
看看, 我用5分钟, 基本确定 C code 是 O(log(n)). 50 分钟我也不能确定 OCaml
到底是多快。
所以两三个人的队伍,很可能 FP 更厉害, 高效。 20个,不好说。 200个,哪找
200个好手?
【在 w***g 的大作中提到】 : 除非对FP及其实现(如何从lambda演算编译成x86指令, lazy evaluation何时 : 被求值)有比较深入的理解,一般人其实很难对FP代码的性能有比较准确的预期。 : 运算在什么时候发生在哪行代码,花了多少内存,都要绕几个弯才能想明白。 : 所以FP语言高性能,我觉得是个神话。 : 我这里的FP特指haskell。但我觉得不失一般性。 : 第一,haskell是一种纯FP语言。别的混合型语言,你说不好是哪个成分在起作用。 : 第二,haskell是编译型的。解释型语言讨论性能没有现实意义。 : 实际写多线程多核,C/C++或者java/C#,完全可以写const function。 : 我不认为这是FP特性。如果是const function,里面哪怕都是for loop实现的, : 也还是可以很容易并行化,完全不需要写成lambda演算。所需要的,只是
|
g****t 发帖数: 31659 | 8 你最终是要出货的。离开具体语言谈编程原则没有什么意义, in long term.
教学可以举例子用。
【在 d******c 的大作中提到】 : 用什么语言都能写到一定程度,无非是语言支持的方便程度不同。 : 所以我说的是functional programming, 不是functional programming language,语 : 言不是重点,重要的是原则。
|
d******c 发帖数: 2407 | 9 说语言不是重点的时候是在纠正把语言纠缠在一起的讨论
具体做的时候当然要落到语言上
离开语境去否定几句话也没什么意义。
【在 g****t 的大作中提到】 : 你最终是要出货的。离开具体语言谈编程原则没有什么意义, in long term. : 教学可以举例子用。
|
g****t 发帖数: 31659 | 10 FP 函数调用有和goto一样的flexibility.
如果你只是说调用。而不是把类型论范畴论等算作FP。
【在 d******c 的大作中提到】 : 说语言不是重点的时候是在纠正把语言纠缠在一起的讨论 : 具体做的时候当然要落到语言上 : 离开语境去否定几句话也没什么意义。
|
|
|
i***h 发帖数: 12655 | 11 我对FP完全门外
是不是FP最大的问题就是和现有的诺依曼硬件框架不匹配导致不接地气?
有可能真正的FP硬件吗? |
c******o 发帖数: 1277 | 12 为什么不匹配?明明数学上上是等价的。。
oo/procedure也和诺依曼硬件框架不一样啊。。不然哪儿有那么多的编译器优化/CPU
处理指令优化 |
g****t 发帖数: 31659 | 13 没有goto的语言都不能和硬件框架一致...
: 为什么不匹配?明明数学上上是等价的。。
: oo/procedure也和诺依曼硬件框架不一样啊。。不然哪儿有那么多的编译器优化
/CPU
: 处理指令优化
【在 c******o 的大作中提到】 : 为什么不匹配?明明数学上上是等价的。。 : oo/procedure也和诺依曼硬件框架不一样啊。。不然哪儿有那么多的编译器优化/CPU : 处理指令优化
|
d******e 发帖数: 2265 | 14 语言是重点啊。java写什么都是鸟样。
最后只好用字串, 省掉类型。
【在 d******c 的大作中提到】 : 用什么语言都能写到一定程度,无非是语言支持的方便程度不同。 : 所以我说的是functional programming, 不是functional programming language,语 : 言不是重点,重要的是原则。
|
d******e 发帖数: 2265 | 15 语言是重点啊。java写什么都是鸟样。
最后只好用字串, 省掉类型。
【在 d******c 的大作中提到】 : 用什么语言都能写到一定程度,无非是语言支持的方便程度不同。 : 所以我说的是functional programming, 不是functional programming language,语 : 言不是重点,重要的是原则。
|
c******o 发帖数: 1277 | 16 这个 goto是什么?
就是一个无条件改变程序流程,到某处。
这个fp完全能实现。 有什么不能?
【在 g****t 的大作中提到】 : 没有goto的语言都不能和硬件框架一致... : : : 为什么不匹配?明明数学上上是等价的。。 : : oo/procedure也和诺依曼硬件框架不一样啊。。不然哪儿有那么多的编译器优化 : /CPU : : 处理指令优化 :
|
c********1 发帖数: 5269 | 17 不管什么高级语言
最后都是编译为cpu的机器代码...
【在 i***h 的大作中提到】 : 我对FP完全门外 : 是不是FP最大的问题就是和现有的诺依曼硬件框架不匹配导致不接地气? : 有可能真正的FP硬件吗?
|
g****t 发帖数: 31659 | 18 能用统一的办法在不同场景来实现吗?
实现能保证几十年语法不变吗?能有稳定可预测的性能吗
: 这个 goto是什么?
: 就是一个无条件改变程序流程,到某处。
: 这个fp完全能实现。 有什么不能?
【在 c******o 的大作中提到】 : 这个 goto是什么? : 就是一个无条件改变程序流程,到某处。 : 这个fp完全能实现。 有什么不能?
|
w******w 发帖数: 126 | 19 quick sort time complexity 是 O(log(n))? 竟然跟binary search 一样了? 难道
我以前的知识都学错了? 不是 nlog(n) 吗?
OCaml
【在 c******r 的大作中提到】 : 确实是这样,比如简单的 quicksort 吧, 用C写, 50行, OCaml, 5 行。 : 看看, 我用5分钟, 基本确定 C code 是 O(log(n)). 50 分钟我也不能确定 OCaml : 到底是多快。 : 所以两三个人的队伍,很可能 FP 更厉害, 高效。 20个,不好说。 200个,哪找 : 200个好手?
|