orl*_*rlp 8 optimization scripting-language typing
在编写解释型语言时,弱打字或强打字会更快吗?
我想知道这一点,因为通常有更快的动态类型解释语言(Lua,Javascript),事实上大多数解释语言使用弱类型.
但另一方面,强类型可以保证弱类型不会,因此,优化技术是否可能与另一个不可能的优化技术?
对于强类型,我的意思是类型之间没有隐式转换.例如,这在强类型语言中是非法的,但在弱类型语言中可能是合法的:"5" * 2 == 10.特别是Javascript因这些类型的转换而臭名昭着.
在我看来,由于缺乏“强类型解释语言”(使用我从问题评论中理解的定义),这个问题很难用明确的例子来回答。
我想不出有任何一种语言是被解释的并且没有隐式转换的。我认为这有两个原因:
解释型语言往往不是静态类型的。我认为这是因为如果您要实现静态类型语言,那么从历史上看,编译相对容易,并且会给您带来显着的性能优势。
如果一种语言不是静态类型的,那么它就被迫进行隐式转换。另一种选择将使程序员的生活变得太困难(他们必须跟踪源代码中不可见的类型,以避免运行时错误)。
因此,实际上,所有解释语言都是弱类型的。但性能提高或降低的问题意味着与一些没有提高或降低的性能进行比较。至少,如果我们想讨论不同的现有实施策略,它确实如此。
现在你可能会回答“好吧,想象一下”。好的。因此,您需要了解在运行时检测是否需要转换的代码与程序员已显式添加转换的代码之间的性能差异。在这种情况下,您将比较动态检测转换需求与调用程序员指定的显式函数之间的差异。
从表面上看,检测总是会增加一些开销(在[后期]编译的语言中,可以通过 jit 来改善,但您正在询问解释器)。但如果您想要快速失败行为(类型错误),那么即使显式转换也必须检查类型。所以在实践中我认为差异相对较小。
这又回到了最初的观点 - 由于弱类型的性能成本很低(考虑到问题中的所有其他约束/假设),并且替代方案的可用性成本很高,因此大多数(所有?)解释语言支持隐式转换。
[抱歉,如果我还是不明白。我担心我错过了一些东西,因为这个问题 - 以及这个答案 - 似乎并不有趣......]
[编辑:也许询问相同(?)问题的更好方法是“动态(后期绑定?)语言处理类型转换的各种方式的相对优势/劣势是什么?” 因为我认为你可能会说 python 的方法特别强大(富有表现力),同时与其他解释语言具有类似的成本(并且这个问题避免了争论 python 或任何其他语言是否是“弱类型”)。]