卡马克:用C++进行函数式编程

导读:《Quake》作者 John Carmack 认为追求函数式的程序设计有着实实在在的价值,然而,劝说所有程序员抛弃他们的C++编译器,转而启用Lisp、Haskell,或者干脆说任何其他边缘语言,都是不负责任的。

或许本文的每位读者都听说过,当初“函数式编程”(Functional Programming)肩负着为软件开发带来福祉的期望来到这个世界,大家可能还听说过有人将它奉为软件开发的银弹。然而,上维基百科查看更多信息却让人大倒胃口,一上来就引用λ演算和形式系统。很难一眼看出这跟编写更好的软件有什么关系。 我的实效性总结:软件开发中的大部分问题都缘于程序员没有完全理解程序执行中所有可能的状态。在多线程环境中,这一理解的缺失以及它所导致的问题变得更加严重,如果你留意这些问题,会发现它几乎严重到令人恐慌的地步。通过函数式的风格编写程序,可以将状态清晰地呈现给你的代码,从而使代码的逻辑更易于推理,而在纯粹的函数式系统中,这更使得线程竞争条件成为不可能的事情。 我确实相信追求函数式的程序设计有着实实在在的价值,然而劝说所有程序员抛弃C++编译器,转而启用Lisp、Haskell,或者干脆说任何其他边缘语言,那是不负责任的。让语言设计者永远懊恼的是,总会有大量的外在因素压跨一门语言的好处,相对大多数领域来说,游戏开发尤其如此。除了大家都要面对的遗留代码库和有限的人力资源问题之外,我们还有跨平台问题、私有工具链、证书网关、需要授权的技术,以及严酷的性能要求。 如果你的工作环境中可以用非主流语言完成主要开发任务,那应该为你欢呼,不过也等着打板子吧,罪名是项目进展方面的。而对所有其他人:不论你用何种语言工作,通过函数式的风格编写程序都会带来好处。任何时候,只要方便,就应当这么做;而不方便时,也应当仔细想想自己的决定。以后,只要愿意,你可以学学lambda、monad、currying、在无限集上合成懒惰式求值的函数,以及显式面向函数式语言的所有其他方面。 C++语言并不鼓励函数式程序设计,但它也不妨碍你这么做,而且为你保留了深入下层、运用SIMD内在函数基于内存映射文件直接布局数据的能力,或任何其他你发现自己用得着的精华特性。 卡马克:用C++进行函数式编程 纯函数 纯函数是这样一种函数:它只会查看传进来的参数,它的全部行为就是返回基于参数计算出的一个或多个值。它没有逻辑副作用。这当然只是一种抽象;在CPU层面,每个函数都是有副作用的,多数函数在堆的层面上就有副作用,但这一抽象仍然有价值。 纯函数不查看也不更新全局状态,不维护内部状态,不执行任何I/O操作,也不更改任何输入参数。最好不要传递任何无关的数据给它——如果传一个allMyGlobals指针进来,这一目标就基本破灭了。 纯函数有许多良好的属性。 ● 线程安全

Link URL: http://blog.jobbole.com/24372/?utm_source=rss&utm_medium=rss&utm_campaign=%25e5%258d%25a1%25e9%25a9%25ac%25e5%2585%258b%25ef%25bc%259a%25e7%2594%25a8c%25e8%25bf%259b%25e8%25a1%258c%25e5%2587%25bd%25e6%2595%25b0%25e5%25bc%258f%25e7%25bc%2596%25e7%25a8%258b

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27207730/viewspace-737972/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27207730/viewspace-737972/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值