扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:乍得·佩林
软件安全方面的一个关键问题是避免在程序源代码中就存在安全漏洞。采用函数编程技术可能会对此有所帮助。
--------------------------------------------------------------------------------------------
如果你是一位经验丰富的程序员,可能就会知道,在学习新语言的过程中可以了解编程技术方面的新发展。由于语言的基本设定是不同的,从差别中你可以学习到新的知识。在某些情况下,你遇到更多的可能是语言设计不当的限制,但几乎每一种语言都会告诉你一些正确的东西。
在很多软件开发工作室,甚至一些开发商中,函数编程技术都是完全不存在的。学习一门功能完善的函数编程技术对于开发者来说,可以改善编程技能,为你提供极大的回报。函数编程特有的一个例程甚至可以让你第一次写的代码就具有很高的安全性。
函数编程的基本知识
“函数编程”,有时间也可以简称为“FP”,指的是一种编程方式,它将电脑运算视为函数的计算。函数语言没有变量和副作用,这一点是函数语言被认为编写并发程序最理想语言的重要原因。没有了变量和副作用,就不再有竞争资源的问题存在,就不再需要锁。
函数编程最明显可见的特点就是没有了变量。在函数编程语言中,流程的控制机制通过递归来实现。这也是函数编程语言的一个特性,通过这个特性我们可以很好的理解,递归比流程控制的机制更符合数学上面的表达方式。
正如人们想象的一样,采用这种方法编程当务之急就是思维方式的重大转变。许多程序员—也许是我们大多数人—是通过形成固式的命令式的计算机语言来思考。我们必须围绕程序的这些变量,存储输入的数据,操纵它们通过反复和循环结构,并从中提取需要的输出结果。函数编程是用数学的思维来思考,有更高的效率。
函数编程语言的常识
在函数编程方面,一些语言比其它的提供的功能更多。从广义上来看,大多数语言可以被认为属于一种特定编程模式: Lisp语言是函数语言,Java是面向对象的语言,C是程序语言,Prolog是说明语言。所有这一切是一个纯粹严格的说明范例。举例来说,Haskell比所有基于Lisp的语言的函数编程功能都强,但即使是这样,Haskell也是“不纯”的。
大多数,如果不是全部的话,面向对象的功能很强的语言在命令方面也很强大。有些人可能不认同这一点,例如,共同Lisp语言提供了一个更强大的(并且有趣的)面向对象的模型,只是在命令方面有缺陷。许多面向对象的语言也包含了大量的多语言功能,象Perl和Ruby两种语言就是最好的例子。
最适合进行函数编程的语言一定是那些以函数编程功能为主而设计的语言,它们也包含了其它方面的功能,以方便提高编程的效果。包括共同Lisp语言、Erlang、Haskell、Objective Caml和Scheme在内的语言可以说是纯正的函数编程语言。而象Lua和Perl是扩展式程序设计语言,包括ECMAScript、Python和 Ruby在内的则是包含了函数编程的面向特定目的的语言。最后,还有只是非常随意的分类,或者是纯粹为了分类而分类的目的而进行的划分,象C++、Java和PHP。关于语言的分类,每个人都可以有自己的观点。
大部分拥有主流编程语言背景的程序员都可以在自己熟悉的语言中,不论它是扩展式程序设计语言还是面向对象的语言,找到函数编程的神奇所在。如上所述,包括ECMAScript、Lua、Perl、Python和Ruby都属于这种情况,依照个人的经验,我发现Perl和Ruby语言尽管差别非常大,但都有函数编程风格的部分。
函数编程怎样提高安全性
一个典型的程序中总是存在许多最危险的漏洞,因为在写代码的时间,尽管我们认真核对过,但有时也会忽视一些方面。这些方面,可能是在一些边缘情况下的一个不起眼的变量形成值,会导致意想不到的问题发生。它们可能仅仅是由于误判断造成的。一些这类的漏洞可能会导致程序无法运行或编译,但有时它们可能被忽视,直到恶意攻击者发现错误,并找到可以利用它的方法。
尽管函数编程不能保证你编写的软件是完全可靠的,但它可以消除软件可能会出现的“内存管理错误”这样的一整类潜在问题以确保安全。
当然,如果你想实际完成任何有价值的软件,仅仅凭借纯粹的函数编程代码是不可能的。你必须根据不同的要求使用不同的语言,以便达到相关的要求。函数编程不是银子弹,没有一种方法是万能的,可以单独解决软件安全方面的所有问题。
换句话说,在所有其它条件相同的前提下,在合理的限度内,你采用的函数编程的功能越多,越有可能避免内存管理错误的发生。因此,如果想编写安全的代码,它可能是符合你利益的最佳的选择。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者