在Haskell中没有显式声明类型有多少会影响编译速度?
例如:
f x y = x + y
-- versus
f :: Int -> Int -> Int
f x y = x + y
编辑:看来我的问题的措词听起来好像是我在问删除类型是否会使它更快。我的意思是说它是否变慢了。这是因为编译器现在必须弄清楚在没有开发人员帮助的情况下它将使用哪种类型。
答案 0 :(得分:1)
如评论中所述,添加类型签名不允许编译器跳过类型检查。仍然会检查您的类型签名是否与代码匹配。
删除类型签名也不会关闭类型检查。编译器会仍然检查您的代码是否存在类型错误。
因此,实际上,是否编写类型签名通常 对编译时间几乎没有影响。 (它可能对运行时性能有重大影响,但通常根本不会影响编译时间。)
无论如何,通常类型检查在编译时间中可忽略不计。通常,解析,加载模块接口和链接花费的时间更长。
(当然,有些人会对类型系统进行真正疯狂的操作,这可能会使编译速度大大降低。但是对于初学者Haskell来说,这不太可能。)
答案 1 :(得分:-3)
如果必须推断类型,编译器会花费更长的时间吗? 是的。
您能轻易说出延迟的幅度是多少? 否,但这肯定不小。
推理引擎非常复杂,很少有人接触它。您可以问这个问题的世界上最好的人是西蒙·佩顿·琼斯博士。