Questions tagged «dynamic-typing»

动态键入是编程语言的一种属性,其中,类型检查主要在运行时执行。

20
静态类型值得权衡吗?
我主要是在没有类型安全性的地方开始使用Python进行编码,然后转移到存在C#和Java的地方。我发现我可以用Python更快地工作并且减轻头痛,但是再说一次,我的C#和Java应用程序的复杂性要高得多,所以我从未想过要对Python进行真正的压力测试。 Java和C#阵营听起来好像没有适当的类型安全性,大多数人会碰到各种可怕的错误,这比它的价值还要麻烦。 这不是语言比较,因此请不要解决编译与解释之类的问题。类型安全是否值得在开发速度和灵活性方面受到打击?为什么? 对于想要一个例子的人来说,动态打字速度更快: “在开发过程中使用动态类型的语言。它可以为您提供更快的反馈,周转时间和开发速度。” - http://blog.jayway.com/2010/04/14/static-typing-is-the-root-of-all-evil/

7
动态类型允许哪些功能?[关闭]
我已经使用python几天了,我想我了解动态和静态类型之间的区别。我不了解的是在什么情况下会首选。它是灵活且易读的,但是要付出更多的运行时检查和其他必需的单元测试的代价。 除了灵活性和可读性之类的非功能性标准之外,还有什么理由选择动态类型?使用动态类型我该怎么办呢?您能想到什么特定的代码示例来说明动态类型的具体优势?

9
动态打字的生产率预期提高了多少?[关闭]
我经常听到这样的说法:动态类型的语言比静态类型的语言更具生产力。提出索赔的原因是什么?难道不只是使用现代概念进行工具处理,例如约定优于配置,使用功能编程,高级编程模型以及使用一致的抽象吗?公认的是,由于不需要(例如在Java中)通常多余的类型声明,因此混乱程度较小,但是您也可以在使用类型推断的静态类型语言中省略大多数类型声明,而不会失去静态类型的其他优点。所有这些都可用于现代静态类型的语言,例如Scala。 那么:对于动态类型的生产力来说,这到底是类型模型本身的优势呢? 澄清:我对大型/中型项目比对快速黑客更感兴趣。:-)

5
项目规模和语言的严格程度之间是否存在关联?
我向我的一位同事解释了语言严格性和范式之间的区别,最后我断言: 诸如动​​态语言和解释语言之类的宽容语言最适合用于原型和小型项目或中型Web应用程序。当选择带有Node.js的优雅动态语言(例如Python或JavaScript)时,其好处是: 快速发展, 减少样板代码, 能够吸引年轻的,有创造力的程序员,他们逃离 Java之类的“企业语言”。 静态类型化/编译语言最适合要求更高严格性的应用程序,例如业务关键型应用程序或中型到大型应用程序。 数十年来发展起来的著名范例和模式, 易于进行静态检查, 能够找到许多具有数十年经验的专业开发人员。 严格的语言(例如Haskell,Ada)或技术(例如C#中的代码合同)更适合于优先考虑安全性而不是灵活性(即使Haskell可以非常灵活)的系统,例如生命攸关的系统和预计非常稳定的系统。好处是: 能够在编译时捕获尽可能多的错误, 易于进行静态检查, 易于形式证明。 但是,通过查看大型公司用于大型项目的语言和技术,看来我的主张是错误的。例如,Python已成功用于大型系统,例如YouTube或其他需要大量严格性的Google应用程序。 项目规模与应使用的语言/范例的严格程度之间是否仍然存在关联? 我忘记了要考虑的第三个因素吗? 我哪里错了?


14
以动态类型的语言从单个函数返回不同的数据类型不是一个好主意吗?
我的主要语言是静态类型(Java)。在Java中,您必须从每个方法返回单个类型。例如,您不能使用有条件返回a String或有条件返回a的方法Integer。但是例如在JavaScript中,这是很有可能的。 用静态类型的语言,我明白了为什么这是一个坏主意。如果返回Object了每个方法(所有类都继承自该方法的公共父级),那么您和编译器将不知道您在处理什么。您必须在运行时发现所有错误。 但是在动态类型语言中,甚至可能没有编译器。在动态类型的语言中,对于我来说,为什么返回多个类型的函数不是一个好主意并不为人所知。我在静态语言方面的背景使我避免编写此类函数,但是我担心自己会紧盯着一种功能,该功能可以使我的代码更清晰一些,从而无法看到。 编辑:我将删除我的示例(直到我可以想到一个更好的示例)。我认为这引导人们回答我不想提出的观点。

5
如何避免典型的“动态语言错误”?
我最近在JavaScript中投入了几个小时,因为我想从庞大的用户群中受益。这样做时,我注意到大多数人都将其归因于动态语言。您可以使事情真正快速地工作,但是一旦代码达到一定的大小,通常会浪费大量时间进行类型,拼写和重构错误。错误通常会使我免于编译器的困扰。当我在另一个模块中输入错字时,不必让我寻找逻辑错误。 考虑到以下令人难以置信的JavaScript和其他动态类型语言使我相信我的方法有问题。还是这仅仅是您必须支付的价格? 简而言之: 您如何使用〜2000 LOC处理JavaScript(或其他动态语言)项目? 有没有工具可以防止我犯这些错误?我已经尝试了Facebook和JSHint的流程,这对您有所帮助,但请不要输入错字。

9
动态类型语言是否值得所有批评?[关闭]
我已经在Internet上阅读了几篇有关企业中编程语言选择的文章。最近,许多动态类型的语言已经流行,例如Ruby,Python,PHP和Erlang。但是许多企业仍然使用静态类型的语言,例如C,C ++,C#和Java。 是的,静态类型语言的好处之一是可以在编译时而不是运行时更早地发现编程错误。但是动态类型语言也有优势。(更多关于维基百科) 企业之所以开始不使用Erlang,Ruby和Python之类的语言的主要原因,似乎是因为它们是动态类型的。这似乎也是StackOverflow上的人决定反对Erlang的主要原因。请参阅您为什么决定“反对” Erlang。 但是,对于企业中的动态类型,似乎存在强烈的批评,但是我真的不明白为什么它如此强大。 真的,为什么在企业中对动态类型的批评如此之多?它对项目成本的影响真的很大吗?但是也许我错了。

9
是否只有在动态类型化语言(如Python)中才有可能的设计模式?
我读过一个相关的问题,在动态语言(如Python)中是否有不需要的设计模式?并记得Wikiquote.org上的这句话 动态类型的妙处在于它使您可以表达任何可计算的内容。而类型系统则不是-类型系统通常是可决定的,它们将您限制为一个子集。支持静态类型系统的人说:“很好,足够好;您要编写的所有有趣程序都将作为类型使用。” 但这很荒谬—一旦有了类型系统,您甚至都不知道那里有什么有趣的程序。 ---软件工程电台第140集:Gilad Bracha的Newspeak和可插拔类型 我想知道,是否有有用的设计模式或策略使用引号的表述“不能作为类型工作”?

3
动态语言有真正的优势吗?[关闭]
首先,我想说Java是我曾经使用过的唯一语言,所以请原谅我对此主题的无知。 动态类型的语言允许您将任何值放在任何变量中。因此,例如,您可以编写以下函数(伪代码): void makeItBark(dog){ dog.bark(); } 您可以在其中传递任何值。只要该值具有bark()方法,代码就会运行。否则,将引发运行时异常或类似情况。(如果我对此有误,请纠正我)。 貌似,这为您提供了灵活性。 但是,我阅读了一些有关动态语言的文章,人们说的是,在以动态语言设计或编写代码时,您会考虑类型并将其考虑在内,就像使用静态类型语言一样。 因此,例如,在编写makeItBark()函数时,您打算让它只接受“可能吠叫的东西”,而您仍然需要确保仅将这些东西传递给它。唯一的区别是,当您犯错时,编译器现在不会告诉您。 当然,此方法有一个优点,那就是在静态语言中,要实现“此函数接受任何可能吠叫的东西”,您需要实现一个显式Barker接口。不过,这似乎是次要的优势。 我想念什么吗?通过使用动态类型的语言,我实际上可以获得什么?

2
Python(和其他动态语言)的哪些语义特征导致其缓慢?
我不太了解Python。我试图更精确地了解动态语言(如Python,Lua,Scheme,Perl,Ruby等)的确切功能正迫使他们的实现变慢。 作为一个例子,Lua 5.3的可继承机制会直观地使Lua变得很慢,但实际上有传言说Lua相当快(并且比Python快)。 另外,我有直觉(可能是错误的),由于目前的处理器内存大于原始计算慢得多(与高速缓存未命中的存储器访问需要的同时,数以百计的算术运算),动态类型检查(点菜if (value->type != INTEGER_TAG) return;的C语言)可以运行得很快。 当然,随着翻译程序的快速运行,整个程序分析(例如Stalin Scheme实现的工作)可以使动态语言实现成为可能,但是让我们假设我没有时间先设计整个程序分析器。 (我在MELT监视器中设计了一种动态语言,其中有些会翻译成C语言)

4
动态和静态语言之间的架构差异
在设计将基于静态语言(例如C#或Java)和动态语言(例如Ruby或Python)构建的应用程序时,在体系结构上是否存在重大差异? 哪一种设计可能对某一种类型是好的选择而对另一种却是不好的呢?一种类型可以实现任何其他类型都不能实现的有用功能(当然在设计和体系结构上)? 另外,是否有任何动态特定的设计模式?


2
从运行时获取的类型动态生成类
是否可以用C#(或任何其他语言)执行以下操作? 我正在从数据库中获取数据。在运行时,我可以计算获取的列数和数据类型。 接下来,我想使用这些数据类型作为字段“生成”一个类。我还想存储我在集合中获取的所有记录。 问题是我想在运行时同时执行步骤1和2 这可能吗?我目前正在使用C#,但如果需要的话,可以改用其他软件。

3
是否有关于不同语言对软件质量影响的经验研究?
支持功能性编程语言的人断言,功能性编程使代码推理变得更容易。那些支持静态类型语言的人说,他们的编译器捕获了足够的错误以弥补类型系统的额外复杂性。但是,我在这些主题上阅读的所有内容均基于理性的论据,而不是基于经验数据。 是否有任何关于不同种类的编程语言对缺陷率或其他质量指标产生什么影响的经验研究? (对这个问题的回答似乎表明,没有这样的研究,至少对于动态与静态的辩论没有。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.