许多高级开发人员说他们发现使用动态类型语言很头疼。下面的回应收集了大部分掌声。“请问,什么?动态类型语言比静态类型语言更容易出错吗?抱歉,但我21年的软件开发经验不是这样。”—RasmusSchultz根据这个答案,我决定总结让高级开发人员避免使用动态类型语言的主要原因,并在此处列出它们以消除误解。为了更好地解决这个问题,我们将以Python作为发展迅速的动态类型语言为例。动态打字是打字与击键无关的地方。这个词来源于数据类型。在编程方面,强类型、鸭子类型等多种类型的类都可以发挥作用。但是,我们将自己限制在最常见的类型上:动态类型静态类型动态类型是在运行时标记类型错误的情况。也就是说,数据类型不必像在Python、Ruby和JavaScript中那样显式声明。与动态类型相反,静态类型是在编译期间报告类型错误和显式声明数据类型。C、C++和Java就是这种情况。Python和一般编程语言的有趣之处在于它们的一些优点和缺点。设置动态类型是为了通过隐式数据类型声明删除一些代码行来简化编码过程。然而,这个特性有一个很大的缺陷。为了让您明白,请考虑以下Python代码示例:max_number=12my_list=[]foriinrange(1,5):max_number=2*(max_number*i)my_list.append(max_number)print(my_list)输出:[12,12,12,12]在上面的示例中,我们要对变量max_number执行计算并将结果存储在列表中。但是,我们可以看到这一切都没有发生,结果是错误的。这是因为在for循环中,我们拼错了max_number,导致创建了另一个名为max_number的变量。任何人都可能犯此类错误,尤其是当他们的工作压力很大时。现在假设您正在编写大量代码。您将需要更加注意您的手指接下来应该点击哪些键。否则,跟踪代码中的错误可能会变成一场噩梦,导致可维护性问题。但是,在像C++这样的静态类型语言中,变量必须在使用前声明。而且你绝对应该做一个执行前分析来确保你的变量类型是一致的。这最终提高了安全性,因为可以更好地控制变量。静态类型重要性的一个例子是2009年与三位Twitter开发人员的对话,内容涉及公司为何决定采用静态类型语言Scala。高级开发人员会对性能感到惊讶。与处理几行代码的初级人员不同,维护和编写健壮的生产代码(通常是数百或数千行代码)是由经验丰富的开发人员承担的。因此,拥有一种高效的编程语言可能变得不可能。也就是说,全局解释器锁(GIL)是Python和MRIRuby等编程语言的性能瓶颈,因为它禁止充分利用计算机资源。被GIL破坏的资源是CPU线程。然而,不使用GIL的编程语言充分利用了CPU的能力。因此,众所周知,它们支持并行计算。并行计算无非是让所有线程同时运行。由于需要处理的天文数据量巨大,因此这种类型的计算现在比以往任何时候都更加重要。下图是并行计算的示例:>所有CPU线程运行的示例。作者在diagram.net创建的图可以合理地假设在相同的CPU时钟速度下,计算机拥有的线程越多,程序运行速度越快。然而,GIL的出现终结了并行计算。GIL是一把锁,一次只允许一个线程使用GIL。线程的选择遵循排队的方法。这意味着当具有最高优先级的线程正在使用GIL时,其他线程将等待直到GIL被释放。最重要的是,用户无法控制线程选择。相反,操作系统负责线程优先级排序。下图最好地说明了这是如何发生的:>GIL对线程的影响。作者在diagram.net中创建的图表为了解决这个问题,许多程序员,或者至少是聪明的程序员,尝试使用例如线程模块手动拆分线程之间的进程,以期获得更好的性能。他们最终的表现更差。尽管结果看起来很奇怪,但这是计算机科学,而不是计算机推测。如果您更深入地研究这个问题,一切都会水到渠成。尽管Python的核心开发团队完全意识到这个问题,但很难摆脱GIL,因为它是Python的许多细节的支柱,例如内存管理和C扩展(仅举几例)。Python的官方作者GuidovanRossum表示,他并不完全相信Python会支持并行计算,因为这最终是语言的设计方式。但是,C++等静态类型语言不受GIL的限制。这使它们在比较中更有效率。空格敏感度使用一种标记由于错位和缺失空格而导致的错误的编程语言可能不是每个人的功劳。这些空格是空格、制表符、换行符、回车符或换页符。例如,与C不同,Python确实对空格敏感。我们将通过以下C和Python代码之间的比较来证明这一点。Python版本:i=50ifi%2==0:print("insideifstatement")print("iiseven")输出:print("insideifstatement")print("iiseven")^SyntaxError:语法无效C版本:#include
