首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弱输入是提高性能还是降低性能?

弱输入是提高性能还是降低性能?
EN

Stack Overflow用户
提问于 2012-03-10 13:09:08
回答 2查看 603关注 0票数 9

在编写解释语言时,使用弱类型还是强类型会更快?

我想知道这一点,因为更快的动态类型解释语言(Lua,Javascript),实际上大多数解释语言都使用弱类型。

但另一方面,强类型可以保证弱类型不会,那么,优化技术是否有可能在另一个不可能实现的情况下实现呢?

对于强类型,我的意思是类型之间没有隐式转换。例如,这在强类型语言中是非法的,但(可能)在弱类型语言中是合法的:"5" * 2 == 10。尤其是Javascript因为这些类型转换而臭名昭著。

EN

回答 2

Stack Overflow用户

发布于 2012-03-10 14:58:58

在我看来,这个问题很难用明确的例子来回答,因为缺乏“强类型的解释语言”(使用我从问题评论中理解的定义)。

我想不出有什么语言是被解释的,没有隐含的转换。我认为这有两个原因:

  1. 解释语言往往不是静态类型的。我认为这是因为如果您要实现静态类型语言,那么从历史上看,编译是相对容易的,并给您显着的性能优势。
  2. --如果一种语言不是静态类型的,那么它将被迫进行隐式转换。另一种方法将使程序员的生活变得太困难(他们必须跟踪源中不可见的类型,以避免运行时错误)。

因此,在实践中,所有解释语言都是弱类型的。但是,业绩增加或减少的问题意味着与一些不是的比较。至少,如果我们想要讨论不同的、现有的执行战略,就会这样做。

现在你可以回答“好吧,想象一下”。好的。因此,您将询问代码之间的性能差异,这些代码检测在运行时对转换的需求,以及程序员显式添加转换的代码。在这种情况下,您将比较动态检测转换需求和调用程序员指定的显式函数之间的区别。

从表面上看,检测总是会增加一些开销(在一种后期编译的语言中,可以通过jit来改进,但您是在询问解释器)。但是如果您想要快速失败的行为(类型错误),那么即使是显式转换也必须检查类型。因此,在实践中,我认为两者之间的差别相对较小。

这就回到了最初的观点--因为弱类型的性能成本很低(考虑到问题中的所有其他约束/假设),而且备选方案的可用性成本很高,大多数(全部?)解释语言支持隐式转换。

如果我还不理解的话很抱歉。我担心我错过了什么,因为这个问题和这个答案似乎并不有趣.

编辑:也许是问同样问题的一个更好的方法(?)比如“动态(后期绑定?)语言处理类型转换的各种方式的相对优势/劣势是什么?”因为我认为,您可以认为python的方法是特别强大的(表达性的),而与其他解释语言有类似的代价(这个问题避免了争论python或任何其他语言是否是“弱类型的”)。

票数 3
EN

Stack Overflow用户

发布于 2012-03-10 15:15:23

强类型的

--我的意思是没有类型之间的隐式转换。

"5" * 2 == 10

问题是,“弱类型”不是一个定义明确的术语,因为有两种非常不同的方式可以发生“隐式转换”,这对性能产生了几乎相反的影响:

  • The "scripting language way":值具有运行时类型,并且当操作调用不同类型时,该语言隐式地应用语义规则在类型之间进行转换(例如将二进制数格式化为十进制字符串)。这往往会降低性能,因为它( A)需要在运行时有类型信息,而b)则需要检查这些信息。这两个需求都引入了开销。
  • 使用"C方式“:在运行时,它们都只是字节。如果您可以说服编译器应用一个在字符串上使用4字节整数的操作,那么取决于您到底是如何做到的,要么将该字符串的前4个字节简单地视为一个整数(可能非常大),要么就会遇到缓冲区溢出。或者恶魔从你鼻子里飞出来。这种方法不需要开销,而且性能非常快(以及非常壮观的崩溃)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9646687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档