這是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> testAll
dist/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。