これは、Scala 2標準ライブラリ、コンパイラ、および言語仕様の本拠地です。
SCALA 3については、SCALA/SCALA3にアクセスしてください。
Scala 2の問題とバグレポートは、Scala/Bugにあります。そのトラッカーは、新しい貢献者が取り組む問題を見つける可能性のある場所でもあります。良い最初の問題、助けが必要です。
より広範な取り組みを調整するために、Scala/Scala-Devトラッカーも使用します。
ここで貢献するには、このリポジトリのフォークからプルリクエストを開いてください。
標準ライブラリへの追加を受け入れることができず、既存のコードの変更のみを受け入れることができないことに注意してください。新しい公開クラスまたは公開方法を追加するバイナリ互換性禁止。代わりに、追加がscala-library-nextに作られています。
Scalaの未来をオープンソースソフトウェアとして保護するために、作業をマージする前にScala Claに署名する必要があります。
一般的なワークフローは次のとおりです。
Scalaのコアの構築と開発の詳細については、特にマシンをセットアップするために、このReadmeの残りの部分をお読みください!
他のScalaの寄稿者と連絡を取るには、Scala Discordチャットで#Scala-Contributorsチャンネルに参加するか、Contributors.scala-lang.org(談話)に投稿してください。
いつでもPRのヘルプが必要な場合は、以下のリストの @-mintionの誰でもお気軽にお問い合わせください。
ユーザー名 | 私に話しかけてください... | |
---|---|---|
@lrytz | バックエンド、オプティマイザー、名前付きおよびデフォルトの引数、記者 | |
@retronym | 2.12.xブランチ、コンパイラパフォーマンス、奇妙なコンパイラバグ、ラムダス | |
@SethTisue | 開始、ビルド、CI、コミュニティビルド、ジェンキンス、ドキュメント、ライブラリ、REPL | |
@dwijnand | パターンマッチャー、ミマ、パーテスト | |
@som-snytt | 警告/リント/エラー、REPL、コンパイラオプション、コンパイラ内部、パーテスト | |
@Ichoran | コレクションライブラリ、パフォーマンス | |
@viktorklang | 並行性、先物 | |
@sjrd | scala.jsとの相互作用 | |
@NthPortal | ライブラリ、並行性、 scala.math 、 LazyList 、 Using 、警告 | |
@bishabosha | おいしい読者 | |
@joroKr21 | 魅力的なタイプ、インクリット、分散 |
PS:この辺りで手伝う余暇があれば、このリストにあなたの名前を追加できることを嬉しく思います!
変更を希望する最古のブランチをターゲットにします。古いリリースブランチ(2.12.xなど)から新しいもの(例2.13.x)に定期的に前方に合流します。
変更が困難な場合は、新しいブランチをターゲットとする別のPRを提出するように求められる場合があります。
変更がバージョン固有であり、前方にマージされない場合は、PR名に[nomerge]
を入れます。
変更が新しいブランチからのバックポートであるため、前方にマージする必要がない場合は、 [backport]
PR名に入れてください。
ほとんどの変更は、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ライセンスに感謝しています。
通常の開発中、新しいSCALAビルドは、「参照コンパイラ」として知られる以前にリリースされたバージョンによって構築されます。 Starrの構築は、ほとんどの種類の変更に十分です。
ただし、Scalaの完全なビルドはブートストラップされています。ブートストラップには2つのステップがあります。まず、Starrでビルドします。次に、新たに構築されたコンパイラを使用して再度構築し、Starrを残します。これにより、すべてのSCALAバージョンがそれ自体を構築できることが保証されます。
SCALAコンパイラのコード生成部分を変更すると、変更はブートストラップの後にライブラリとコンパイラのバイトコードにのみ表示されます。 CIはブートストラップビルドを行います。
ローカルでブートストラップ:ブートストラップを実行するには、SBTセッション内でrestarrFull
実行します。これにより、SCALA Distributionをローカルアーティファクトリポジトリにビルドして公開し、SBTを切り替えて、そのバージョンを新しいscalaVersion
として使用します。その後、 reload
で戻すことができます。また、 restarrFull
Starrバージョンを作成してbuildcharacter.properties
を作成して、再発行せずにrestarr
で戻すことができます。これにより、SBTセッションを切り替えて、 build
とtarget
の代わりにbuild-restarr
およびtarget-restarr
ディレクターを使用します。これにより、クラスファイルとインクリメンタルメタデータの拭き取りが避けられます。 Intellijは、 versions.properties
のstarrバージョンを使用してテストをコンパイルおよび実行するように構成され続けます。
現在のスキームがどのように到達したかについての履歴については、https://groups.google.com/d/topic/scala-internals/gp5jsm1e0fo/discussionを参照してください。
致命的な警告を備えた構築:プロジェクトで警告を発するために致命的な警告(つまり、それらをエラーに変える)、 set Global / fatalWarnings := true
( Global
をモジュールの名前に置き換えますreflect
そのモジュール)。致命的な警告を再度無効にするには、SBT Global
reload
か、 set Global / fatalWarnings := false
を実行します。 CIには常に致命的な警告が有効になっています。
sbt
セッションを開始したら、コアコマンドの1つを実行できます。
compile
すべてのサブプロジェクト(ライブラリ、リフレクト、コンパイラ、スカラドックなど)をコンパイルscala
/ scalac
、SBTから直接REPL /コンパイラを実行します(オプション /引数を受け入れます)enableOptimizer
、SCALA Optimizer Enabledを使用してビルドをリロードします。私たちのリリースはこのように構築されています。コンパイラパフォーマンスの改善に取り組むときにこれを有効にします。オプティマイザーが有効になると、ビルドが遅くなり、増分ビルドが間違っている可能性があります。setupPublishCore
、 enableOptimizer
を実行し、現在のGit SHAに基づいてバージョン番号を構成します。ブートストラップの一部としてよく使用されます: sbt setupPublishCore publishLocal && sbt -Dstarr.version=<VERSION> testAll
dist/mkBin
build/quick/bin
でランナースクリプト( scala
、 scalac
など)を生成しますdist/mkPack
build/pack
のScala Distribution形式でビルドを作成します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
。コマンドがa module is not authorized to depend on itself
場合、グローバルSBTプラグインが周期的な依存関係を引き起こしている可能性があります。グローバルSBTプラグインを無効にしてみてください(おそらく~/.sbt/1.0/plugins/plugins.sbt
で一時的にコメントしてください)。
Scala Repoの.gitignore
にリストされているsandbox
ディレクトリにローカルテストファイルを保持することをお勧めします。
SBTのインクリメンタルコンパイルは、Scalaコンパイラコードベースには粗すぎて、ファイルが多すぎるため、長時間のビルド時間になります(SBT#1104がその前線の進行状況を確認してください)。それまでの間、あなたは:
Intellijのアイデアを使用することをお勧めします(src/intellij/readme.mdを参照)。
金属も機能する可能性がありますが、そのための指示やサンプル構成はまだありません。このエリアのプルリクエストは非常に歓迎されます。それまでの間、Scala/Scala-Dev#668でガイダンスを収集しています。
Intellijのインクリメンタルコンパイラを使用するために:
dist/mkBin
を実行してビルドを取得し、ランナースクリプトをbuild/quick/bin
で取得しますこれで、Intellijを編集および構築し、スクリプト(コンパイラ、REPL)を使用して、変更を直接テストできます。 SBTでscala
、 scalac
、およびpartest
コマンドを実行することもできます。 「ANTモード」(上記の説明)を有効にして、各partest
呼び出しの前にSBTのインクリメンタルコンパイラが(多すぎる)ファイルを再コンパイルするのを防ぎます。
貢献のためのガイドラインは、Contributing.mdで説明されています。これには、コーディング標準、テスト、ドキュメント、GitとGithubの使用方法、およびコードのレビュー方法に関する有用な情報が含まれています。
また、次のリソースをチェックアウトすることもできます。
PRを提出すると、コミットはSCALA CIによって自動的にテストされます。
私たちのCIセットアップは常に進化しています。 Scala/Scala-Dev#751を参照してください。現在の機能と、どのように変化するかについての詳細については、参照してください。
Jenkinsに偽の失敗が見える場合は、PRコメントとして投稿/rebuild
できます。 Scabot Readmeは、利用可能なすべてのコマンドをリストします。
レビューのためにすべてを磨く前にパッチをテストしたい場合は、Travis CIにブランチを構築させることができます(フォークがあり、最初にブランチビルドのTravis CIが有効になっていることを確認してから、ブランチを押します)。また、ドラフトPRをお気軽に送信してください。ドラフトブランチに多数のコミットが含まれている場合(まだレビューのためにまだクリーンアップ /スカッシュしていなかった)、PRタイトルに[ci: last-only]
を追加することを検討してください。そうすれば、最後のコミットのみがテストされ、エネルギーと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
です。
Resolverを追加し、対応するscalaVersion
を指定することにより、検証リポジトリでSCALAビルドをローカルに使用できます。
$ 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/Scala-Jenkins-Infraのシェフ料理本によって構成されたScala-Ci.typesafe.comのJenkinsインスタンスとして実行されます。
PRSを監視し、テストをトリガーするビルドボットは、LGTMコメントがSCALA/SCABOTリポジトリにある後に「レビューされた」ラベルをビルドして適用します。
SCALAコミュニティビルドは、SCALAリリースをテストするための重要な方法です。 CommitのPRがマージされる前であっても、あらゆるSCALAコミットのためにコミュニティビルドを開始できます。そのコミットは、ソースから多数のオープンソースプロジェクトを構築し、テストスイートを実行するために使用されます。
PRでのコミュニティビルドの実行をリクエストするには、PRに関するコメントを尋ねるだけで、Scalaチームメンバー(おそらく@sethtisue)が世話をします。 (詳細)
コミュニティビルドは、Scala Jenkinsインスタンスで実行されます。ジョブには名前が付けられています..-integrate-community-build
。 Scala/Community-Buildsリポジトリを参照してください。