几天前,有几个关于缓冲区溢出漏洞的问题(例如Java是否有缓冲区溢出?,Secure C和大学 - 经过缓冲区溢出训练,仅举几例),这些问题可能发生在C等命令式编程语言中.
在函数式编程中,(从我尝试Haskell的非常有限的曝光),我可以看到缓冲区溢出等漏洞不会发生,因为这些问题是由于改变程序状态或某个区域而导致的.记忆.(如果我错了,请纠正我.)
如果不考虑编译器,解释器或执行环境中存在的漏洞的可能性,功能编程范例中是否存在任何类型的安全漏洞?功能编程中是否存在任何特定类型的漏洞,而不是命令式编程中存在哪些漏洞?
这是我计算行数和单词的代码:
import System.IO
import Data.List
main = do
hSetBinaryMode stdin True
interact $ (\(w,l)->"line:"++(show l)++"\nwords:"++(show w)++"\n")
. foldl' (\(w,l) r-> w `seq` l `seq` (w+length r ,succ l) ) (0,0)
. lines
Run Code Online (Sandbox Code Playgroud)
这大约需要10秒才能在大约100兆字节的文件上运行.我将它与Lua(9s),awk(20s)和wc -l -c(0.6s)中的类似程序进行了比较.
为什么这段代码这么慢?可能是什么问题呢?