(强烈与弱)键入AND(静态与动态)类型语言和摩尔定律

时间:2009-10-10 03:37:53

标签: strong-typing moores-law weakly-typed

我不知道有多少人面临这个问题。如果我用python,php,javascript之类的弱/动态类型语言编程几天,我会失去与c ++,Java,.net等强类型语言的联系。我最近听过人们喜欢编程的python和ruby等语言。

在弱/动态类型语言中进行编程非常容易,但存在与c ++,Java等语言失去联系的危险。处理器现在变得非常强大,根据Moore's law它将随着时间呈指数增长速度。因此,当我们从嵌入式语言转换为高级语言(如c ++,java)时,效率可能不会出现问题。

  • 世界是否正在向弱/动态类型语言转变?
  • 弱/动态类型的语言将来会取代强类型语言吗?
  • 是否有必须使用强类型语言且不能在当前及以后更换的字段?

6 个答案:

答案 0 :(得分:9)

首先,摩尔定律只是一种经验观察。迟早,物理定律意味着不再可能继续增加单处理器速度。摩尔定律不是中长期未来的有用预测指标,甚至可能在短期内也不是。

其次,弱和弱类型的语言受到摩尔定律的正当影响。

第三,摩尔定律是关于单处理器的。我们已经进入了一个通过多处理来提高原始计算能力的世界,但是还没有软件工具(例如语言)可以帮助普通的Joe程序员编写利用多处理的程序。但是,功能语言在这方面比程序语言更有希望。

第四,我认为你真的在比较静态类型语言和动态类型语言。 (“强类型”和“弱类型”这两个术语由于定义冲突而变得如此混乱,以至于它们不再有意义。)

我想你的观点是,摩尔定律意味着效率更低,所以我们可以使用效率较低的计算范式“逃脱”;例如动态类型语言。 (如果我们谈论的是交互式任务,那么计算机只需要跟上用户提出要求并精神处理答案的速度。)

这个论点的另一面是人们想要他们的计算机做更多计算密集型的事情;例如每一代电脑游戏都需要更多的电力才能完成图形处理。在线业务希望使用运行成本更低的硬件更快地完成更多工作(例如,提供更多Web请求)。简而言之,在很多情况下效率确实很重要,而且情况总是如此。

所以你发现在速度很重要的地方,我们倾向于使用高效的计算技术,而且在不重要的地方我们使用的技术可以最大限度地降低软件开发和维护成本。


<强>更新

重读我的回答,我错过了什么。如果我们认为摩尔定律正在破裂,并且计算“能力”的未来增长将以更多核心等形式出现,那么函数式语言将会有越来越大的作用。

任何试图在命令式或OO语言中利用并行性的人都会认识到这是一个棘手的问题,充满了陷阱。相比之下,在纯函数式语言中,并行性要简单得多。由于数据结构的状态不会发生变化,因此您无需担心线程在使用数据结构时进行同步。此外,语言的编译器或运行时系统更容易发现程序的特定部分可以并行完成......而且只是这样做。或者在更高级别,FP语言IDE(或其他)可以找到/建议大规模转换的机会,以帮助并行执行。

国际海事组织,这正是功能语言普及(缓慢)增长的原因......

答案 1 :(得分:6)

摩尔定律存在危险,因为处理器速度目前无法加速,因此他们只需在每个芯片上放置更多内核(更多处理器/处理器芯片)。

这就是函数式编程再次流行的原因。

如果您在核电站等关键环境或飞机上的航空电子设备上工作,则不会使用弱类型语言,因为它无法满足这些区域的要求。

世界继续朝着最能解决问题的语言或框架迈进。有些人可能会试图强制使用特定的语言,但是,随着时间的推移,如果发现该问题有更好的语言,那么迁移将转向更好的语言。

我认为,重要的是要理解两者,因为有些领域的弱类型语言效果最好,例如,使用javascript应用程序,您可以将代码作为数据发送,然后执行它。这可能非常强大。

强类型语言仍将是企业应用程序的主要语言,因为编译器可以帮助确定是否存在由于在弱类型语言中难以排除故障的数据类型不匹配而导致的错误。

答案 2 :(得分:3)

对于静态类型语言的编译器可以执行优化以更快地执行,这是正确的。但是,执行软件的效率并不是静态与动态类型语言的唯一关注点。

编译器在静态类型语言中为您进行了大量检查,您必须使用动态类型语言中的单元测试(或其他运行时技术)。

因为必须始终知道对象的类型,所以IDE可以提供强大的重构和“自动完成”功能。这节省了大量开发人员在重构或导航更大代码库时的时间。

目前尚不清楚秤的倾斜方式。为了使事情更有趣,有一些静态类型的语言(看看scala)进行类型推理。这使得静态类型语言变得几乎与动态类型兄弟一样简洁。

静态语言可能不会被动态语言“替换”。根据域名会有混合。

答案 3 :(得分:1)

Python is actually not weakly typed,它只是动态输入。计算机编程语言将继续发展并具有各种风格。我认为总是需要强打字,但也需要动态打字。

答案 4 :(得分:1)

摩尔定律不是公理。即你不能确定它是否会在下周成立。

此外,我不认为您选择强弱/弱类型语言应该取决于摩尔定律或处理器速度。我认为你应该考虑在哪里应用你所学到的知识。

更好地考虑一些这些因素,这些因素对你来说比摩尔定律更重要:

  • 您是否会找到以您选择的语言工作的有报酬的工作。
  • 增长前景如何。
  • 你能用你选择的语言制作你想要/想做的东西。
  • 有多少文档/社区帮助。

处理器已经足够快,无论你选择Ruby还是Java,都很重要。

那说我认为在分界线的每一边保持一条腿可能是一个好主意。对于一个程序员来说,确实可以并且建议学习多种语言。 :)

答案 5 :(得分:1)

只是一点点注意,我注意到了同样的事情。我来自C ++背景,所以进入Python是非常不同的。但是,我开始意识到虽然强/静态类型语言有很多好处,但它们的开发速度要慢于动态语言。有些情况下静态&amp;面向性能的语言仍然是可取的,但对于大多数项目来说,目标是解决问题。

如果你有一个问题可以在很短的时间内用Python充分和适当地解决,如果你花费更少的时间在Python中创建该解决方案,那么有一些令人信服的论据可以坚持下去。作为程序员,我们倾向于尝试优化并担心每一步的性能。但是,使用80/20规则使得某些东西更有意义,然后调整最需要它的部分,直到性能良好。

如果我正在为嵌入式设备编写软件,那么我会坚持使用低级别的性能导向语言。但是,如果我正在编写一个将在Web服务器上谨慎运行的图像大小调整服务,我会用最高级别的语言编写它,直到我有一个令人信服的理由来优化它。我所意识到的是,虽然我已经关于如何优化代码以获得更好性能的想法,但通常这项工作将完全无法察觉,因此浪费时间。唯一的区别是我的代码在无关紧要的地方会稍微快一些,而且我的雇主(或客户)的账单会快得多。简化就是cpu很便宜,但程序员时间很贵。

所以是的,我认为推广RAD式开发的语言将比旧的低级语言更受欢迎和有用,这是有充分理由的。并非适用于所有情况,但绝对适用于其中很多情况。