C++函数式编程(一)

原文: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指令集来处理内存映射文件的数据布局,或者其它任何你需要实现的功能。

### 回答1: C 函数式编程是一种基于函数的软件开发方法,它强调将计算过程看作一系列数学函数的组合。这样可以避免副作用,使程序更加易于推理和测试。C 函数式编程的思想源于λ演算和数理逻辑。它可以作为一种范式被使用,也可以作为一种编程风格。C 函数式编程的实现需要一些高级语言特性,如闭包、高阶函数和延迟求值等。 使用 C 函数式编程可以使代码变得更加简洁、模块化和可重用。函数成为代码的主要构建块,可以通过组合多个函数创建更复杂的功能。由于没有副作用,程序的行为更加可预测和稳定。此外,C 函数式编程还可以提高代码的并发性和并行性。因为函数没有状态,所以多个线程可以同时调用同一个函数。 然而,C 函数式编程也存在一些缺点。比如,在处理大数据或者实时计算时,由于函数式编程的延迟求值,运行效率可能不如命令式编程。另外,函数式编程的学习曲线比较陡峭,需要花费一些时间去适应它特有的语法和方法。 总的来说,C 函数式编程是一种非常有用的编程范式,可以提高代码的可重用性、可靠性和并发性,但需要花费一些时间去掌握它的语法和方式。 ### 回答2: C语言并不是一种函数式编程语言,而是一种面向过程的语言。函数式编程语言的特点是将函数作为基本的构建模块,并且避免使用可变状态和副作用。 在C语言中,我们可以使用函数指针来实现一些函数式编程的思想,但这种方式与纯函数式编程语言有很大的区别。C语言的函数指针可以作为参数传递给其他函数,也可以作为返回值返回。这使得我们可以实现一些高阶函数,比如map、reduce等。 C语言的函数指针还可以用来实现回调函数,这在一些异步编程场景中非常常见。例如,我们可以将一个函数指针作为参数传递给一个异步函数,在异步操作完成后调用该函数指针来传递结果。 总之,虽然C语言并不是一种纯函数式编程语言,但它仍然可以借鉴一些函数式编程思想来实现一些高级的功能。C函数式编程pdf可以作为一个参考资料,帮助我们更好地理解和应用这种编程范式。 ### 回答3: C 函数式编程是使用 C 语言实现的一种函数式编程风格的方式。与传统的命令式编程不同,函数式编程强调纯函数,即没有副作用的函数,每次对相同的输入都会返回相同的输出。 C 函数式编程主要依靠函数指针和递归实现。函数指针可以将函数作为参数传递给其他函数,使得函数具有更高的灵活性。而递归则是一种重要的函数式编程技术,可以将复杂的问题分解为简单的子问题,让代码更加简洁和易懂。 C 函数式编程的优点在于可以编写更加简洁、可维护、可复用的代码,提高开发效率。特别是在并发编程方面,函数式编程可以避免常见的线程安全问题,提高程序的性能。 学习 C 函数式编程需要对函数式编程的基本概念有一定的了解,并熟悉 C 语言的函数指针和递归。可以通过阅读相关书籍或在线教程来学习和掌握这种编程方式。常用的函数式编程工具包括 Haskell、Scala、Clojure 等,在学习过程中可以结合使用这些工具来深入理解函数式编程的核心思想。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值