C++函数式编程(一)

来源:互联网 发布:linux led灯闪烁 编辑:程序博客网 时间:2024/05/21 19:39

原文:http://www.altdevblogaday.com/2012/04/26/functional-programming-in-c/

作者:John Carmack


-潘宏 译

-2013年1月

-email: popyy@netease.com

-weibo.com/panhong101



可能大家都听说过,“函数式”编程能够给软件开发带来很多优势,甚至很多人把它当作软件开发的“银弹”。但是,随便浏览一下维基百科关于函数式编程的词条,你就会发现一大堆过于学术的东西,比如lambda表达式,形式化系统等等。好像这些和函数式编程对软件开发的帮助并没有什么直接联系。


经验告诉我:软件开发中产生的诸多问题,都在于程序员没有对程序的所有执行状态了如指掌。而在多线程开发中,这种问题及其造成的后果就更严重了,严重到足以让开发者感到项目危机。而函数式编程,则让代码的执行状态变得清晰,让程序执行状态更容易推导出来,让线程在理想环境下没有竞争。


虽然我认为学习函数式编程有价值,但让你马上放下C++编译器,然后投入Lisp,Haskell或者其它什么乱七八糟(恕我直言)的语言的怀抱,我觉得这不负责任。对于长期遭受折磨的语言设计者来说,诸多外部因素抵消了语言本身的优势,游戏开发领域更甚:除了每个公司都需要解决的代码库维护,人力资源问题,游戏开发还要解决跨平台,工具链,认证网关,许可证技术,高性能需求等等诸多问题。


如果你的工作允许你使用一种非主流的语言进行开发,那么我在替你感到高兴的同时,也提醒你:做好准备,迎接进度压力。而对于在工作中不能随便选择语言的开发者来说,不管你现在用什么语言,函数式编程会给你带来好处。你应该在它能够带来开发便利性的时候使用它,而在它无法提供便利性的时候好好想想到底该不该用。而一旦你最终选择了它,你就可以开始学习lambda、monad、currying、无限集中的复合延迟估值函数 ,以及其它所有面向函数式编程的方方面面了。


C++不提倡函数式编程,但也提供了相关方法来支持它。这使得你在使用函数式编程的同时,仍然可以使用威力巨大的底层功能来实现需求,比如用SIMD指令集来处理内存映射文件的数据布局,或者其它任何你需要实现的功能。

原创粉丝点击