由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 我老给你们指条明路吧
相关主题
FP内部比较: Haskell其实可以当脚本语言来用functional programming?
Scala又被鄙视了这么多人讨论 FP, 大牛推荐门语言吧
请问有哪位师傅知道haskell语言的?所谓FP就是 递归+pattern matching?
C++ for Java programmer?Scala有一点不好
板上的高人们能给科普比较functional programming language么玩具语言其实很容易实现的
Haskell很难学。。Facebook’s New Spam-Killer Hints at the Future of Coding - Haskell
抛砖引玉,来谈谈functional programmingDuck typing is great ...
粉FP的人是因为把电脑想象成图灵机了FP over head很高
相关话题的讨论汇总
话题: 函数话题: c++话题: 编程话题: haskell话题: 编译
进入Programming版参与讨论
1 (共1页)
w***g
发帖数: 5958
1
所谓的纯函数式程序只能运行于编译期, 其计算结果是一段可以与现实世界I/O的程序.
从这一点来说, C++的模板元语言是真正的纯函数式编程. 你们要学函数式编程, 那些
小语种要我说都不靠谱, 因为学了也没什么地方用. 要我说用C++做函数式编程有下面
几个好处:
1. abstraction overhead极低, 编译出来的程序性能非常高.
2. 同时有函数型和命令型两种编程模式, 可以按任务的需要选择合适的模式. Haskell
语言本身是纯函数的, 为了进行I/O搞出了monad这种怪胎. 但是要是去看用Haskell语
言写的程序, 大部分看起来还是命令型的. 用C++则无需这么迂腐.
3. 学了东西可以直接在工作中用.
4. 虽然模板语言本身写起来比较冗长, 但产生的库却非常优美. 比如用来做parsing的
boost::spirit, 丝毫不逊于haskell的parsec.
要说C++能毫无争议地超越java的, 怕也只有函数式编程这一块了.
w***g
发帖数: 5958
2
这版上的人平均水平太低, 估计也没什么人能理解我, 还以为我在说胡话呢.

序.
Haskell

【在 w***g 的大作中提到】
: 所谓的纯函数式程序只能运行于编译期, 其计算结果是一段可以与现实世界I/O的程序.
: 从这一点来说, C++的模板元语言是真正的纯函数式编程. 你们要学函数式编程, 那些
: 小语种要我说都不靠谱, 因为学了也没什么地方用. 要我说用C++做函数式编程有下面
: 几个好处:
: 1. abstraction overhead极低, 编译出来的程序性能非常高.
: 2. 同时有函数型和命令型两种编程模式, 可以按任务的需要选择合适的模式. Haskell
: 语言本身是纯函数的, 为了进行I/O搞出了monad这种怪胎. 但是要是去看用Haskell语
: 言写的程序, 大部分看起来还是命令型的. 用C++则无需这么迂腐.
: 3. 学了东西可以直接在工作中用.
: 4. 虽然模板语言本身写起来比较冗长, 但产生的库却非常优美. 比如用来做parsing的

d***q
发帖数: 1119
3
template 在c++是图灵完备的,利用编译期间 确实可以搞出很多花样。
不过 这样搞有两个问题
1:是编译比较慢
2:debug麻烦,如果用到模板的地方,编译器报告的错误比较晦涩,不大容易定位。
如果只用c++写应用而不是写库的话,模板并不是必用的东西。
n*w
发帖数: 3393
4
Not willing to respond the original post after read the monad part.
agree especially 2. a real headache

【在 d***q 的大作中提到】
: template 在c++是图灵完备的,利用编译期间 确实可以搞出很多花样。
: 不过 这样搞有两个问题
: 1:是编译比较慢
: 2:debug麻烦,如果用到模板的地方,编译器报告的错误比较晦涩,不大容易定位。
: 如果只用c++写应用而不是写库的话,模板并不是必用的东西。

r*g
发帖数: 3159
5
我在stackoverflow曾经问C++模板元语言是不是函数式编程,结果被人vote给关掉了。

序.
Haskell

【在 w***g 的大作中提到】
: 所谓的纯函数式程序只能运行于编译期, 其计算结果是一段可以与现实世界I/O的程序.
: 从这一点来说, C++的模板元语言是真正的纯函数式编程. 你们要学函数式编程, 那些
: 小语种要我说都不靠谱, 因为学了也没什么地方用. 要我说用C++做函数式编程有下面
: 几个好处:
: 1. abstraction overhead极低, 编译出来的程序性能非常高.
: 2. 同时有函数型和命令型两种编程模式, 可以按任务的需要选择合适的模式. Haskell
: 语言本身是纯函数的, 为了进行I/O搞出了monad这种怪胎. 但是要是去看用Haskell语
: 言写的程序, 大部分看起来还是命令型的. 用C++则无需这么迂腐.
: 3. 学了东西可以直接在工作中用.
: 4. 虽然模板语言本身写起来比较冗长, 但产生的库却非常优美. 比如用来做parsing的

a*****e
发帖数: 1700
6
你混淆了几个概念。元编程 (Meta programming) 和函数编程 (Functional
Programming),还有静态编译的优化 (static compilation optimization) 这三者是
orthogonal 的概念,不能混为一谈。
纯函数编程一样需要输入(参数值)和输出(返回值),你把这些和 I/O 搞混了。所
谓 I/O 的输入和输出是特指有副作用的,即便将一个程序的 I/O 部分和纯函数部分划
分开来,也不表示纯函数部分能够在编译期静态执行。在编译期,如果参数仅是变量而
非确定的值的话,即便是纯函数程序也无法运行。所以“所谓的纯函数式程序只能运行
于编译期”这句话是不正确的。
如果你要说的是编译期对纯函数的程序做优化比较容易,这个确实是这样,也算是函数
语言的一个小优势。
运用模板元编程在编译期也可以完成很多事情,但这不能和函数编程混为一谈。元编程
的直观理解是生成程序的程序,所以可以利用元编程在静态编译期做一些优化工作,或
者对一些抽象的模板进行展开,但是它并不能取代函数编程本身。比如 Ocaml 和
Haskell 里面同样有模板元编程的工具,它们和所有能在静态编译期使用的工具一样,
不适用于缺乏输入值的情况。
如果感兴趣,你也可以接触一下 partial evaluation,对什么能够静态执行和什么必
须动态执行,能够有更清晰的认识。

序.
Haskell

【在 w***g 的大作中提到】
: 所谓的纯函数式程序只能运行于编译期, 其计算结果是一段可以与现实世界I/O的程序.
: 从这一点来说, C++的模板元语言是真正的纯函数式编程. 你们要学函数式编程, 那些
: 小语种要我说都不靠谱, 因为学了也没什么地方用. 要我说用C++做函数式编程有下面
: 几个好处:
: 1. abstraction overhead极低, 编译出来的程序性能非常高.
: 2. 同时有函数型和命令型两种编程模式, 可以按任务的需要选择合适的模式. Haskell
: 语言本身是纯函数的, 为了进行I/O搞出了monad这种怪胎. 但是要是去看用Haskell语
: 言写的程序, 大部分看起来还是命令型的. 用C++则无需这么迂腐.
: 3. 学了东西可以直接在工作中用.
: 4. 虽然模板语言本身写起来比较冗长, 但产生的库却非常优美. 比如用来做parsing的

d**********x
发帖数: 4083
7
一般来说,C++还是相当依赖OO这个paradigm的
template虽好,但是如果不能为可维护性工作,用途就只能局限于制作程序库。
modern c++ design 给出了一个相当光明的方向,但是我不知道有多少人能掌握这些技
术并且应用到产品中。。。



【在 a*****e 的大作中提到】
: 你混淆了几个概念。元编程 (Meta programming) 和函数编程 (Functional
: Programming),还有静态编译的优化 (static compilation optimization) 这三者是
: orthogonal 的概念,不能混为一谈。
: 纯函数编程一样需要输入(参数值)和输出(返回值),你把这些和 I/O 搞混了。所
: 谓 I/O 的输入和输出是特指有副作用的,即便将一个程序的 I/O 部分和纯函数部分划
: 分开来,也不表示纯函数部分能够在编译期静态执行。在编译期,如果参数仅是变量而
: 非确定的值的话,即便是纯函数程序也无法运行。所以“所谓的纯函数式程序只能运行
: 于编译期”这句话是不正确的。
: 如果你要说的是编译期对纯函数的程序做优化比较容易,这个确实是这样,也算是函数
: 语言的一个小优势。

r*********r
发帖数: 3195
8
用 concept

【在 d***q 的大作中提到】
: template 在c++是图灵完备的,利用编译期间 确实可以搞出很多花样。
: 不过 这样搞有两个问题
: 1:是编译比较慢
: 2:debug麻烦,如果用到模板的地方,编译器报告的错误比较晦涩,不大容易定位。
: 如果只用c++写应用而不是写库的话,模板并不是必用的东西。

d**********x
发帖数: 4083
9
不是被标准委员会日了么

【在 r*********r 的大作中提到】
: 用 concept
r*g
发帖数: 3159
10
元编程 (Meta programming) 和函数编程 (Functional Programming) 不是正交的概念。
底下这个连接讲的清楚:
http://bannalia.blogspot.com/2008/05/functional-characterizatio
。。。
So, C++ template metaprogramming can be regarded as a pure, non-strict,
untyped functional language with pattern matching.



【在 a*****e 的大作中提到】
: 你混淆了几个概念。元编程 (Meta programming) 和函数编程 (Functional
: Programming),还有静态编译的优化 (static compilation optimization) 这三者是
: orthogonal 的概念,不能混为一谈。
: 纯函数编程一样需要输入(参数值)和输出(返回值),你把这些和 I/O 搞混了。所
: 谓 I/O 的输入和输出是特指有副作用的,即便将一个程序的 I/O 部分和纯函数部分划
: 分开来,也不表示纯函数部分能够在编译期静态执行。在编译期,如果参数仅是变量而
: 非确定的值的话,即便是纯函数程序也无法运行。所以“所谓的纯函数式程序只能运行
: 于编译期”这句话是不正确的。
: 如果你要说的是编译期对纯函数的程序做优化比较容易,这个确实是这样,也算是函数
: 语言的一个小优势。

r*********r
发帖数: 3195
11
with concept, c++ template is actually typed functional

【在 r*g 的大作中提到】
: 元编程 (Meta programming) 和函数编程 (Functional Programming) 不是正交的概念。
: 底下这个连接讲的清楚:
: http://bannalia.blogspot.com/2008/05/functional-characterizatio
: 。。。
: So, C++ template metaprogramming can be regarded as a pure, non-strict,
: untyped functional language with pattern matching.
:
: 是

a*****e
发帖数: 1700
12
对。元编程可以有函数语言的特性,但不代表可以取而代之,毕竟它只是编译期的工具。

念。

【在 r*g 的大作中提到】
: 元编程 (Meta programming) 和函数编程 (Functional Programming) 不是正交的概念。
: 底下这个连接讲的清楚:
: http://bannalia.blogspot.com/2008/05/functional-characterizatio
: 。。。
: So, C++ template metaprogramming can be regarded as a pure, non-strict,
: untyped functional language with pattern matching.
:
: 是

d***q
发帖数: 1119
13
如果用来写库,是个不错的选择。一般人不写库不用它也没啥大不了的。
几年前有个一段时期比较喜欢template,总觉得不用就不爽,硬套用了几个,现在发现
没必要这样较劲,如果用得不舒服,不要用就是了。

【在 d**********x 的大作中提到】
: 一般来说,C++还是相当依赖OO这个paradigm的
: template虽好,但是如果不能为可维护性工作,用途就只能局限于制作程序库。
: modern c++ design 给出了一个相当光明的方向,但是我不知道有多少人能掌握这些技
: 术并且应用到产品中。。。
:
: 是

1 (共1页)
进入Programming版参与讨论
相关主题
FP over head很高板上的高人们能给科普比较functional programming language么
fp就是Declarative ProgrammingHaskell很难学。。
有没有喜欢haskell的同学抛砖引玉,来谈谈functional programming
大家有没有觉得Scala不如Haskell美?粉FP的人是因为把电脑想象成图灵机了
FP内部比较: Haskell其实可以当脚本语言来用functional programming?
Scala又被鄙视了这么多人讨论 FP, 大牛推荐门语言吧
请问有哪位师傅知道haskell语言的?所谓FP就是 递归+pattern matching?
C++ for Java programmer?Scala有一点不好
相关话题的讨论汇总
话题: 函数话题: c++话题: 编程话题: haskell话题: 编译