编译时与Hamlet模板的运行时成本

d8d*_*f42 9 haskell yesod hamlet

对于Hamlet模板机制,我理解模板在编译时被解析,导致源代码包含对blaze-html组合器的调用(以及可能因插值而导致的其他表达式).因此,插值发生的点(子树)在编译时是已知的.

在运行时,我们需要计算内插值(当然),并在树中"插入",即应用html组合器.他们都是?实际上,这些应用程序中的一些可以在编译时进行评估(那些在它们下面没有插值的应用程序).这会发生吗?

Mic*_*man 7

自从我处理代码以来已经有一段时间了,所以不要把它作为authoratative(就像Daniel提到的那样,这-ddump-simpl是一个很好的调用).但我不相信我们使用的是blaze-html组合器,只是数据类型.Hamlet本身在编译时尽可能地连接字符串,以避免运行时的成本.我知道当我上次进行基准测试(多年前授予的基准测试)时,优化确实得到了很好的回报.


Dan*_*ner 5

可能不是:你要求的声音很像部分评估(不要与部分应用混淆),这是一个编译器性能雷区,因此经常避免.但你可以自己检查一下; 使用-ddump-simpl您首选的优化级别来查看GHC生成的核心.