Tag: scala

厌倦了非语义测试以弥补动态类型 – 建议?

在我开始学习计算机工程之前,我曾经在Rails(之前的PHP)中做过很多Web编程。 从那时起,我在C中完成了大量的学习工作,并在Objective-C(Mac的东西)中完成了一些个人工作。 我学会了喜欢静态打字。 但现在我不得不做一些专业的网页开发(自由职业),并再次获得了Rails。 我发现编写非语义类型检查测试真的很烦人。 我从C和Objective-C编译器中免费获得这些。 我喜欢点击Build并让系统检查我的所有代码,看A可以调用B,B可以调用一些模糊的库C等等。我所要做的只是测试语义。 但是对于Rails,我是编译器。 🙁 有人走过同样的道路吗? 我是使用C#和Java + x框架进行Web MVC的唯一选择吗? 寻找一些建议,甚至是一些同情……:P 顺便说一句,我特别提到了Rails而不是Ruby,因为我不介意Ruby的动态特性,比如脚本或其他简单的东西。 但由于Rails依赖于如此多的gem,并且由于通常会添加许多其他gem,因此动态类型成为一个问题。 谢谢! 编辑: 我跟进了pst的建议并调查了Scala。 在阅读由Scala创作者Martin Odersky撰写的“Scala编程”一书时,我发现了这一段文本,它在很多方面表达了我的关注和更多。 非常有趣的阅读。 摘自Martin Odersky的Scala编程第52页: Scala是静态类型的 静态类型系统根据它们保存和计算的值的类型对变量和表达式进行分类。 Scala是一种具有非常先进的静态类型系统的语言。 从类似Java的嵌套类类型系统开始,它允许您使用generics参数化类型,使用交叉组合类型,以及使用抽象类型隐藏类型的详细信息。 这些为构建和组合您自己的类型奠定了坚实的基础,因此您可以设计同时安全且灵活使用的界面。 如果您喜欢Perl,Python,Ruby或Groovy等动态语言,您可能会发现Scala的静态类型系统被列为其优势之一有点奇怪。 毕竟,有些人认为缺少静态类型系统是动态语言的主要优势。 反对静态类型的最常见的论点是它们使程序过于冗长,阻止程序员按照自己的意愿表达自己,并且使得软件系统的某些动态修改模式变得不可能。 但是,这些参数通常不会违反静态类型的概念,而是针对特定类型系统,这些系统被认为过于冗长或过于僵化。 例如,Smalltalk语言的发明者Alan Kay曾经说过:“我不反对类型,但我不知道任何类型的系统并不是一个完全痛苦,所以我仍然喜欢动态打字。” 我们希望在本书中说服Scala的类型系统远非“完全痛苦”。事实上,它很好地解决了静态类型的两个常见问题:通过类型推断避免了冗长,通过模式匹配获得了灵活性以及编写和撰写类型的几种新方法。 有了这些障碍,可以更好地理解静态类型系统的经典优势。 其中最重要的好处是程序抽象,安全重构和更好的文档的可validation属性。 可validation的属性 静态类型系统可以certificate没有某些运行时错误。 例如,他们可以certificate以下属性:布尔值永远不会被添加到整数; 私有变量不能从他们的课外访问; 函数应用于正确数量的参数; 只有字符串被添加到一组字符串中。 今天的静态类型系统没有检测到其他类型的错误。 例如,它们通常不会检测非终止函数,数组边界违规或除零。 他们也不会检测到你的程序不符合其规范(假设有一个规范,那就是!)。 因此,一些人认为静态类型系统不是很有用。 该论点认为,由于此类型系统只能检测简单错误,而unit testing提供更广泛的覆盖范围,为什么还要使用静态类型呢? 我们认为这些论点忽视了这一点。 虽然静态类型系统当然不能取代unit testing,但它可以通过处理一些本来需要测试的属性来减少所需的unit testing数量。 […]

编程语言独立模型validation

假设您在基础架构中使用多种不同的编程语言和框架来处理大量流量等。 示例堆栈: 事件驱动的API服务器(使用Scala,node.js,Ruby EM) 标准的完整堆栈webapp(例如Rails) (也许更多的技术) 当使用不同的语言和框架时,我通常最终会复制大多数模型validation,因为每个“客户入口点”都需要validation其输入。 保持同步当然是一种痛苦。 没有像CORBA这样的东西你会如何处理?

为什么要在框架Web服务器前使用http服务器?

Web应用程序框架(如sinatra(ruby),play(scala),lift(scala))生成一个侦听特定端口的Web服务器。 我知道有一些原因,如安全性,群集以及在某些情况下的性能,可能会导致我在我的Web应用程序前使用Apache Web服务器。 根据您的经验,您有任何理由吗?