随着Scala开发人员在快速增长和发展的语言和生态系统中工作,每当编写新代码时,我们都将面临一个持续的难题–使用大家都在谈论的热门新Scala框架,或者坚持使用我们所知道的Java库信任?
当我们开始构建Takipi时,我们想知道开发人员今天使用的最常见的框架是什么,因此我们可以更好地对其进行优化。 由于本质上,Scala应用程序的大部分是商业应用程序或封闭源代码,因此有时很难说出要使用库的项目数量。
我们决定使用基于数据的方法,通过分析Scala开发人员在全球最大的开放项目存储库GitHub上实际使用的内容来对此进行深入了解。 GH拥有从小型到大型的各种项目,为我们提供了广泛的数据集,而且它也是最新的。
就像我们在Java中看到的结果一样,也有一些很大的惊喜。 由于Java和Scala都在JVM上运行,因此有趣的是注意到所使用的框架之间的相似之处以及一些明显的区别。 排名前100位的Java库和Scala库中总共出现了42个库 ,这再次证明了Scala不仅是一种不同的语言,而且还拥有自己的工具和库。
该方法
为了生成我们的数据集,我们查询了10,000个Scala项目,这些项目偏向于社区中最喜欢的项目,以此作为衡量其相对重要性的有力指标。
我们搜索了sbt和Maven中的依赖项, GH上的绝大多数Scala项目都使用sbt和Maven来构建其项目。 对于sbt,我们分析了build.sbt,project / Build.scala以及扩展它们的任何.scala文件。 对于Maven项目,我们扫描了pom.xml依赖项文件。
然后,我们分析了结果并将其分组。 至少可以说,结果很有趣–
结果
TDD在Scala中很大 。 经典的Java测试框架JUnit是最受欢迎的库,有2513个项目正在使用它。 Scalatest以2197个条目紧随其后。 在Java中相当流行的TestNG(在Java t op 100中排名第14)不在Scala的前100个库中。
SPECS2是用于编写软件规范的框架,目前有1331个项目使用该框架。 SPECS V1于2011年初弃用,目前仍有312个项目正在使用它。
新一代框架 。 使用Scala不仅与语言有关,而且与新一代框架有关。 当涉及Scala开发人员时,用于构建Web应用程序的Play框架将其粉碎,有18%的项目正在使用它。 Akka框架在776个条目(排名第9)上也做得很好。 Lift是另一个用于构建Scala Web应用程序的著名框架,仅被124个项目使用,这让我们感到惊讶。
但是,最初为Java构建的某些框架在Scala中得到了更大的使用。 轻量级的Web服务器Jetty在Java中有100个项目使用,在Scala中使用它的项目数量是它的4.5倍,有447个条目(第17个)。
Java的守旧派在哪里? 这与某些Java最受尊敬的语言和框架形成对比,后者在Scala中的使用率大大降低。
- 例如, Spring将15(!)库放在Java排名前100的库中,而不在Scala排名前100的板上。
- Apache Commons的使用也大大减少了。 commons-io和commons-lang都在Java十大库中,分别在Scala的前100名中排名第24和#39。
- 谷歌的Guava库在Java排名前100位中排名第8,在Scala列表中排名也更靠后,在使用Java的项目中,只有不到一半的项目使用了Java。
正在记录 。 Ceki的SLF4J处于领先地位–
- SLF4J和logback似乎是Scala的实际记录解决方案,分别在16%和14%的项目中使用。
- log4j在Java中具有891个项目条目,而在Scala中使用的情况却更少,只有332个项目条目(3%)。
- commons-logging后面有105个项目条目–不到Java中使用它的项目数量的三分之一。
SQL 。 Scala数据库方面的巨大惊喜–
- H2是最常见的Sql DB,有552个项目正在使用它-这是我们在Java中看到的使用量的4倍以上。
- MySql带有387个条目,实际上比我们在Java中看到的255个条目要多。
- PostgreSQL也有332个条目,几乎比Java中的121个条目多3倍。
NoSql的吸引力不及Java 。 还值得注意的是,在Java中使用量很高的Hadoop不在Scala排名前100位的董事会中。 Scala列表上唯一的NoSql数据库是具有97个条目的MongoDB 。
安卓 尽管Scala是一种主要用于构建可扩展服务器应用程序的服务器端语言,但我们仍然看到Android开发的存在,其中有82个项目使用sbt-android-plugin。
对某些结果感到惊讶吗? 我们知道我们和其中一些人在一起。 查看下面GitHub上排名前100位的Scala库的完整列表,并在评论部分告诉我们您的想法。 我们希望听到您的想法和问题。