0

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

使用弱/动态类型的语言进行编程非常容易,但存在与 c++、Java 等语言失去联系的危险。处理器现在变得非常强大,根据摩尔定律,它会随着时间成倍增加速度。所以效率可能不是问题,因为当我们从嵌入式转向高级语言(如 c++、java)时会发生类似的事情。

  • 那么世界是否正在转向弱/动态类型的语言?
  • 弱/动态类型语言将来会取代强类型语言吗?
  • 是否有任何领域必须使用强类型语言并且不能在当前时间以及不久的将来替换?
4

6 回答 6

9

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

其次,强类型语言和弱类型语言同样受到摩尔定律的影响。

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

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

我想您的论点是摩尔定律意味着效率不那么重要,因此我们可以使用效率较低的计算范式“侥幸逃脱”;例如动态类型语言。(如果我们谈论的是交互式任务,计算机只需要跟上用户询问事物和心理处理答案的速度即可。)

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

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


更新

在重读我的答案时,我错过了一些东西。如果我们认为摩尔定律正在崩溃,并且未来计算“能力”的增长将以更多内核等形式出现,那么函数式语言的作用将会越来越大。

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

IMO,这就是函数式语言流行(缓慢)上升的原因......

于 2009-10-10T04:17:57.803 回答
6

摩尔定律处于危险之中,因为处理器速度目前无法加快,所以他们只是在每个芯片上放置更多内核(更多处理器/处理器芯片)。

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

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

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

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

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

于 2009-10-10T03:53:42.667 回答
3

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

编译器会在静态类型语言中为您进行大量检查,这些检查与动态类型语言中的单元测试(或其他运行时技术)有关。

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

目前尚不清楚天平将以何种方式倾斜。为了让事情变得更有趣,有一些静态类型语言(看看scala)可以进行类型推断。这使得静态类型语言变得几乎和它们的动态类型兄弟一样简洁。

静态语言可能不会被动态语言“取代”。根据域的不同,会有混合。

于 2009-10-10T03:56:46.787 回答
1

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

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

最好考虑其中一些比摩尔定律更重要的因素:

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

处理器的速度已经足够快,无论您选择 Ruby 还是 Java,都变得无关紧要。

话虽如此,我认为将一条腿放在鸿沟的每一侧可能是一个好主意。确实有可能并建议一名程序员学习多种语言。:)

于 2009-10-10T05:07:54.273 回答
1

Python实际上不是弱类型,它只是动态类型。计算机编程语言将继续发展并以各种形式出现。我认为总会有对强类型的需求,但也有动态类型的需求。

于 2009-10-10T03:55:36.890 回答
1

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

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

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

所以是的,我认为促进 RAD 风格开发的语言将比旧的低级语言更受欢迎和有用,这是有充分理由的。并非适用于所有情况,但肯定适用于很多情况。

于 2009-10-10T06:42:27.240 回答