这是Scala 2标准库,编译器和语言规范的所在地。
对于Scala 3,请访问Scala/Scala3。
Scala 2的问题和错误报告位于Scala/Bug中。该跟踪器也是新贡献者可能会发现要解决的问题的地方:好的第一问题,帮助。
为了协调更广泛的努力,我们还使用Scala/Scala-Dev跟踪器。
要在此处贡献,请从您的叉子上打开此存储库的拉动请求。
请注意,我们不能接受标准库的添加,而仅修改现有代码。二进制兼容性禁止添加新的公共类或公共方法。代替了Scala-library-Next添加。
我们要求您在合并您的任何作品之前签署Scala CLA,以保护Scala的未来作为开源软件。
一般工作流量如下。
有关构建和开发Scala核心的更多信息,请阅读此读数的其余部分,尤其是用于设置机器!
为了与其他Scala贡献者取得联系,请在Scala Discord Chat上加入#Scala-Contributors频道,或在贡献者上发布。
如果您随时需要对PR的帮助,请随时 @-mention从下面的列表中的任何人提供帮助,我们将尽最大努力为您提供帮助:
| 用户名 | 和我谈谈... | |
|---|---|---|
@lrytz | 后端,优化器,命名和默认参数,记者 | |
@retronym | 2.12.x分支,编译器性能,怪异的编译器错误,lambdas | |
@SethTisue | 入门,构建,CI,社区构建,Jenkins,Docs,Library,Repp | |
@dwijnand | 图案匹配器,咪咪(Mima),partest | |
@som-snytt | 警告/绒毛/错误,补充,编译器选项,编译器内部,partest | |
@Ichoran | 收藏库,性能 | |
@viktorklang | 并发,期货 | |
@sjrd | 与scala.js的相互作用 | |
@NthPortal | 图书馆,并发, scala.math , LazyList , Using ,警告 | |
@bishabosha | 美味的读者 | |
@joroKr21 | 更高的类型,隐性,差异 |
PS:如果您有一些业余时间在这里提供帮助,我们很高兴将您的名字添加到此列表中!
定位您想要更改最终的最古老的分支。我们会定期合并从较旧的发行分支(例如2.12.x)到新的分支(例如2.13.x)。
如果您的更改很难合并,则可能会要求您提交针对新分支机构的单独的PR。
如果您的更改是特定于版本的,不应合并,请将[nomerge]放在公关名称中。
如果您的更改是从较新的分支机构进行的备份,因此不需要合并,请将[backport]放在公关名称中。
大多数更改应针对2.13.x。除非存在特殊原因(例如,如果发现一个特别严重的错误或是否有商业赞助),我们越来越不愿意目标2.12.x。
2.11.x分支现在不活动,并且没有计划发布2.11.x版本(除非出现异常,不可预见的情况)。您不应该先询问维护人员,因此不应针对2.11.x。
最重要的是:
scala/
+--build.sbt The main sbt build definition
+--project/ The rest of the sbt build
+--src/ All sources
+---/library Scala Standard Library
+---/reflect Scala Reflection
+---/compiler Scala Compiler
+--test/ The Scala test suite
+---/files Partest tests
+---/junit JUnit tests
+---/scalacheck ScalaCheck tests
+--spec/ The Scala language specification
但是也:
scala/
+---/library-aux Scala Auxiliary Library, for bootstrapping and documentation purposes
+---/interactive Scala Interactive Compiler, for clients such as an IDE (aka Presentation Compiler)
+---/intellij IntelliJ project templates
+---/manual Scala's runner scripts "man" (manual) pages
+---/partest Scala's internal parallel testing framework
+---/partest-javaagent Partest's helper java agent
+---/repl Scala REPL core
+---/repl-frontend Scala REPL frontend
+---/scaladoc Scala's documentation tool
+---/scalap Scala's class file decompiler
+---/testkit Scala's unit-testing kit
+--admin/ Scripts for the CI jobs and releasing
+--doc/ Additional licenses and copyrights
+--scripts/ Scripts for the CI jobs and releasing
+--tools/ Scripts useful for local development
+--build/ Build products
+--dist/ Build products
+--target/ Build products
您需要以下工具:
MacOS和Linux工作。如果您使用Cygwin,Windows可能会工作。感谢社区帮助保持构建在Windows上的工作,并记录任何所需的设置。
我们感谢以下OSS许可证:
在普通开发过程中,由先前发布的版本(称为“参考编译器”或倾斜为“ Starr”(稳定的参考版本)构建了新的Scala构建。使用Starr建造足以满足大多数变化。
但是,全面构建了Scala的构建。引导有两个步骤:首先,使用Starr构建;然后,使用新鲜建造的编译器再次构建,将Starr留在后面。这确保每个Scala版本都可以构建自身。
如果更改Scala编译器的代码生成部分,则您的更改只会在引导程序后出现在库和编译器的字节码中。我们的CI做一个自举的构建。
在本地进行引导:要执行引导程序,请在SBT会话中运行restarrFull 。这将构建并发布Scala分发到您的本地工件存储库,然后将SBT切换以将该版本用作其新的scalaVersion 。然后,您可以用reload恢复。注意restarrFull还将编写starr版本以buildcharacter.properties ,因此您可以在不重新发布的情况下使用restarr切换回它。这将切换SBT会话以使用build-restarr和target-restarr目录,而不是build和target ,从而避免擦除classfiles和增量元数据。 Intellij将继续配置为使用versions.properties中的starr版本进行编译和运行测试。
有关当前方案如何到达的历史,请参见https://groups.google.com/d/topic/scala-internals/gp5jsm1e0fo/discussion。
带有致命警告的构建:要在项目致命中发出警告(即将其变成错误),请将set Global / fatalWarnings := true in SBT(用模块的名称替换为Global ,例如reflect - 仅使警告致命。该模块)。要再次禁用致命警告,要么reload SBT,要么运行set Global / fatalWarnings := false (同样,如果仅启用该模块的致命警告,请用模块的名称替换Global )。 CI总是启用致命警告。
启动sbt会话后,您可以运行其中一个核心命令:
compile所有子项目(库,反射,编译器,Scaladoc等)scala / scalac直接从SBT运行depl /编译器(接受选项 /参数)enableOptimizer使用Scala Optimizer启用构建构建。我们的版本是这种方式的。在进行编译器性能改进时启用此功能。启用优化器后,构建将变慢,并且增量构建可能是不正确的。setupPublishCore运行enableOptimizer并根据当前的git sha配置版本号。通常用作引导的一部分: sbt setupPublishCore publishLocal && sbt -Dstarr.version=<VERSION> testAlldist/mkBin在build/quick/bin中生成跑步者脚本( scala , scalac等)dist/mkPack在build/pack中以Scala分布格式创建构建junit/test进行JUNIT测试; junit/testOnly *Foo运行子集scalacheck/test运行Scalacheck测试,使用testOnly运行子集partest运行partest测试(接受选项,尝试partest --help )publishLocal在本地发布发行版(可以在其他SBT项目中用作scalaVersion )set baseVersionSuffix := "bin-abcd123-SNAPSHOT" ,其中abcd123是要发布的修订版的git哈希。您还可以使用自定义的"bin-mypatch"之类的东西。这将版本号从2.13.2-SNAPSHOT更改为更稳定的东西( 2.13.2-bin-abcd123-SNAPSHOT )。-bin字符串标记二进制兼容版本。在SBT中使用它会导致scalaBinaryVersion为2.13 。如果版本不兼容二进制,我们建议使用-pre ,例如2.14.0-pre-abcd123-SNAPSHOT 。set ThisBuild / Compile / packageDoc / publishArtifact := false到跳过生成 /发布API文档(加快了该过程)。如果命令a module is not authorized to depend on itself这样的错误消息,则可能是全局SBT插件正在造成周期性依赖性。尝试禁用全局SBT插件(也许是在~/.sbt/1.0/plugins/plugins.sbt中暂时评论它们)。
我们建议将本地测试文件保存在Scala Repo的.gitignore中列出的sandbox目录中。
请注意,对于Scala编译器代码库而言,SBT的增量编译通常太粗糙了,并重新编译了太多文件,从而导致较长的构建时间(请检查SBT#1104以获取前面的进度)。同时,您可以:
我们建议使用Intellij Idea(请参阅SRC/Intellij/readme.md)。
金属也可能工作,但我们还没有说明或样本配置。该区域的拉力请求将受到极大的欢迎。同时,我们正在Scala/Scala-Dev#668收集指导。
为了使用Intellij的增量编译器:
dist/mkBin以获取构建和跑步者build/quick/bin中的跑步脚本现在,您可以在Intellij中进行编辑和构建,并使用脚本(编译器,替补)直接测试您的更改。您还可以在SBT中运行scala , scalac和partest命令。启用“ ANT模式”(上面解释),以防止SBT的增量编译器在每个partest调用之前重新编译(太多)文件。
我们的贡献指南在贡献中解释了。它包含有关我们的编码标准,测试,文档,我们如何使用git和github的有用信息,以及如何审查您的代码。
您可能还需要查看以下资源:
提交公关后,您的提交将由Scala CI自动测试。
我们的CI设置一直在不断发展。有关事物当前的工作方式以及我们期望它们可能会改变的更多详细信息,请参见Scala/Scala-Dev#751。
如果您看到詹金斯(Jenkins)的虚假失败,则可以作为公关评论发布/rebuild 。 scabot readme列出了所有可用命令。
如果您想在将所有内容进行抛光之前进行测试,则可以让Travis CI构建您的分支(请确保您有叉子并首先在其上启用Travis CI启用了Travis CI,然后推开分支)。还可以随意提交公关草案。如果您的草稿分支包含大量提交(您尚未清理 /壁球以供审查),请考虑将[ci: last-only]添加到PR标题中。这样一来,只有最后一个提交将经过测试,从而节省了一些能量和CI-Resources。请注意,最终将关闭不活动的PR草案,这并不意味着更改被拒绝。
CI执行编译器引导程序。第一个任务是validatePublishCore ,将您的承诺构建为临时存储库https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots。请注意,此构建尚未引导,其字节码是使用当前starr构建的。版本编号为2.13.2-bin-abcd123-SNAPSHOT其中abcd123是提交哈希。对于二进制不兼容的构建,版本编号为2.14.0-pre-abcd123-SNAPSHOT 。
您可以在本地验证存储库中使用Scala Builds通过添加解析器并指定相应的scalaVersion :
$ sbt
> set resolvers += "pr" at "https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots/"
> set scalaVersion := "2.12.2-bin-abcd123-SNAPSHOT"
> console
Scala CI将其发布到https://scala-ci.typesafe.com/artifactory/scala-integration/。
在此文档页面上说明了在SBT和其他工具中使用夜间构建。
尽管我们随便称它们为“夜间”构建,但实际上并非每晚建造,而是“合并”。也就是说,每个合并的PR都会出版一个构建。
Scala CI在Scala-ci.typesafe.com上以Jenkins实例运行,该实例由Scala/Scala/Scala-Jenkins-Infra配置。
在Scala/scabot存储库中发表LGTM评论后,观察PRS,触发测试的构建机器人构建并应用“审查”标签。
Scala社区构建是测试Scala释放的重要方法。即使在合并提案的公关之前,也可以为任何Scala犯下启动社区构建。然后,该提交被用来从源头构建大量开源项目并运行其测试套件。
要要求在您的PR上进行社区构建,只需在评论公关和Scala团队成员(可能@sethtisue)的评论中询问。 (细节)
社区构建在Scala Jenkins实例上运行。这些工作是命名的..-integrate-community-build 。请参阅Scala/Community-Builds Repo。