Questions tagged «static-typing»


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

3
静态分析类型是否可以替代?
编程语言中的静态类型有助于在编译时强制执行某些保证,但是类型是此工作的唯一工具吗?还有其他指定不变式的方法吗? 例如,一种语言或环境可以帮助强制执行有关数组长度或函数输入之间关系的保证。我只是在类型系统之外还没有听说过这样的事情。 我想知道一个相关的事情是,如果有任何非陈述方式做静态分析(类型声明,大部分)。

2
结构分型的(缺点)
我刚刚看过Daniel Spiewak的演讲,他谈到了结构化类型与Scala的ans Java 标称类型相比的优势。这种差异的一个示例是以下Java代码 public interface Foo { public int length(); } public interface Bar { public int length(); } Foo f = ...; Bar b = f; 当然不会编译哪个,因为Foo和之间的类型兼容性Bar由名称决定。 另一方面,结构类型系统可以声明两种类型相等或兼容,因此,除其他事项外,还可以进行检查的鸭子类型。 现在,我认为我确实了解结构类型系统的大多数优点,但是我想知道它是否不会从以下示例中使类型安全失效 class Foo { class Bar { /* ... */ } def takeBar(b: Bar) = { /* ... */ } …

2
可选/也许类型在动态语言中有用吗?
Optional在静态类型的语言中以明显的方式很有用,但是我想知道它是否在动态语言中也有用。通常,没有编译器告诉您“嘿,您将其Optional<String>用作String”,因此您仍然必须在运行时发现错误。我有一个静态的打字背景,从我的角度看,我看不到Optional使用动态语言打字的好处。

3
使用静态类型检查来防止业务错误
我非常喜欢静态类型检查。它可以防止您犯以下愚蠢的错误: // java code Adult a = new Adult(); a.setAge("Roger"); //static type checker would complain a.setName(42); //and here too 但这并不能阻止您做出如下愚蠢的错误: Adult a = new Adult(); // obviously you've mixed up these fields, but type checker won't complain a.setAge(150); // nobody's ever lived this old a.setWeight(42); // a 42lb adult would …

9
网站的动态和静态类型语言[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 该语句表明,静态类型语言不适用于网站: 我将与建立网站进行对比。呈现网页时,通常您会在网页上交互许多组件。您在这里有按钮,在那儿有小部件,网页上有数十个小部件,网站上可能有数十个或数百个动态的网页。对于具有如此大的表面积的系统,使用静态类型的语言实际上是不灵活的。当我想交互地按动按钮而不是什么时,我可能会发现很难在Scala中编程并使用它渲染网页。如果整个系统必须是连贯的,就像整个系统必须进行类型检查一样,只是为了能够左右移动按钮,我认为这确实是不灵活的。 资料来源:http : //www.infoq.com/interviews/kallen-scala-twitter 它是否正确?为什么或者为什么不?

5
动态语言是否不利于敏捷开发?
从我读到的内容来看,敏捷开发通常涉及到将重构或反向工程代码重构为图表。当然还有很多,但是如果我们考虑依赖这两种方法的实践,动态类型的语言是否处于不利地位? 看来静态类型的语言会使重构和逆向工程容易得多。 如果在动态类型语言中并非不可能,那么重构或(自动化)逆向工程难吗?现实世界中的项目说明了如何将动态类型的语言用于敏捷方法?

6
静态类型在更大的项目中真的有什么帮助?
在脚本编程语言网站的首页上进行好奇时,我遇到了这段话: 当系统太大而无法控制时,可以添加静态类型。 这让我记住,在许多静态的,已编译的语言(例如Java)和动态的,解释性语言(主要是Python,因为它使用较多,但它是大多数脚本语言之间共享的“问题”)之间的宗教战争中,静态地抱怨之一打字语言对动态打字语言的拥护者认为,它们不能很好地扩展到较大的项目,因为“有一天,您会忘记函数的返回类型,而必须查找它,而使用静态打字语言时,一切被明确声明”。 我从不理解这种说法。老实说,即使您声明了函数的返回类型,在编写了许多行代码之后,您也可能会忘记它,而您仍然必须返回到使用的搜索功能声明它的行。您的文本编辑器进行检查。 另外,当函数使用声明时type funcname()...,type您将不得不在调用该函数的每一行中进行搜索,因为您只知道funcname,而在Python之类的代码中,您只会搜索def funcname或function funcname只发生一次,在声明。 而且,使用REPL可以很容易地测试一个函数是否具有不同输入的返回类型,而对于静态类型的语言,您需要添加一些代码行并重新编译所有内容才能知道所声明的类型。 因此,除了知道函数的返回类型显然不是静态类型语言的强项之外,静态类型在更大的项目中真的有什么帮助?

5
可以将静态和动态类型的语言视为用于不同类型工作的不同工具吗?
是的,曾经提出过类似的问题,但总的目的是找出“哪个更好”。 我之所以这样问是因为我最初是作为一名开发人员来使用JavaScript的,并且实际上并没有在使用静态类型语言编写方面的丰富经验。 尽管如此,我肯定会发现学习C语言在较低级别的代码上处理苛刻的操作的价值(我认为这在编译器级别与静态与动态有很大关系),但是我想尽力而为是否存在特定的项目上下文(也许是某些类型的动态数据密集型操作?)涉及性能以外的其他方面,因此与Java或C#相比,与Python之类的东西更有意义。

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.