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

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



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

10
为什么主流的强静态OOP语言阻止继承基元?
为什么这样可以正常进行并且通常可以预期: abstract type Shape { abstract number Area(); } concrete type Triangle : Shape { concrete number Area() { //... } } ...虽然这还不行,但是没有人抱怨: concrete type Name : string { } concrete type Index : int { } concrete type Quantity : int { } 我的动机是最大限度地使用类型系统进行编译时正确性验证。 PS:是的,我已经读过这篇文章,并且包装是一个棘手的解决方法。

1
为什么.Net世界似乎包含魔术字符串而不是静态类型的替代字符串?
因此,我在.Net中工作。我在.Net中制作开源项目。我最大的问题之一不是.Net的必要性,而是它周围的社区和框架。似乎到处都有神奇的命名方案和字符串被视为做所有事情的最佳方法。大胆的声明,但看看它: ASP.Net MVC: 您好世界路线: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); 这意味着ASP.Net MVC将以某种方式HomeController在您的代码中查找。以某种方式创建它的新实例,然后Index 显然使用某种id参数调用该函数。然后还有其他类似的东西: RenderView("Categories", categories); ...or.. ViewData["Foobar"]="meh"; 然后XAML也有类似的事情。DataContext被视为一个对象,您必须希望并祈祷它可以解析为所需的类型。DependencyProperties必须使用魔术字符串和魔术命名约定。像这样的事情: MyData myDataObject = new MyData(DateTime.Now); Binding myBinding = new Binding("MyDataProperty"); myBinding.Source = …


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

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

7
对于静态表达不充分的语言,匈牙利符号是否可以解决?[关闭]
在埃里克·利珀特(Eric Lippert)的文章中,匈牙利表示法是怎么回事?,他指出,匈牙利符号(一种好符号)的目的是为了 扩展“类型”的概念以涵盖除存储表示信息之外的语义信息。 一个简单的示例是,用x表示变量的前缀是x,用y表示变量的前缀是y,无论这些变量是整数还是浮点数或其他形式,这样当您不小心编写时xFoo + yBar,代码显然看起来是错误的。 但是我也一直在阅读有关Haskell的类型系统的信息,似乎在Haskell中,可以使用编译器会为您检查的实际类型来完成同一件事(即“将类型的概念扩展为包含语义信息”)。因此,在上面的示例中,xFoo + yBar如果正确设计程序,在Haskell中实际上将无法编译,因为它们将被声明为不兼容的类型。换句话说,Haskell的类型系统似乎有效地支持了相当于匈牙利表示法的编译时检查。 那么,匈牙利符号法是否只是一种编程语言的创可贴,其类型系统无法对语义信息进行编码?还是匈牙利记谱法提供的东西超出了Haskell的静态类型系统所能提供的东西? (当然,我以Haskell为例。我确定还有其他语言具有类似表现力(丰富?强?)类型系统,尽管我还没有遇到过。) 明确地说,我不是在用数据类型注释变量名,而是在程序上下文中使用有关变量含义的信息。例如,变量可以是整数,浮点数,双精度或长整数等,但变量的含义可能是它是以英寸为单位的相对x坐标。这就是我所说的通过匈牙利表示法(和通过Haskell类型)编码的信息。

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

2
类型检查和递归类型(在Haskell / Ocaml中编写Y组合器)
当在Haskell的上下文中解释Y组合器时,通常会注意到,由于Haskell的递归类型,因此直接实现不会在Haskell中进行类型检查。 例如,从Rosettacode: The obvious definition of the Y combinator in Haskell canot be used because it contains an infinite recursive type (a = a -> b). Defining a data type (Mu) allows this recursion to be broken. newtype Mu a = Roll { unroll :: Mu a -> a } …

5
使用静态类作为名称空间
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我看到其他开发人员使用静态类作为名称空间 public static class CategoryA { public class Item1 { public void DoSomething() { } } public class Item2 { public void DoSomething() { } } } public static class CategoryB { public class Item3 { public void DoSomething() { } } …

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.