Ini adalah rumah dari Perpustakaan Standar Scala 2, kompiler, dan spesifikasi bahasa.
Untuk Scala 3, kunjungi Scala/Scala3.
Masalah dan laporan bug untuk Scala 2 terletak di Scala/Bug. Pelacak itu juga di mana kontributor baru dapat menemukan masalah untuk dikerjakan: masalah pertama yang baik, bantuan yang diinginkan.
Untuk mengoordinasikan upaya yang lebih luas, kami juga menggunakan pelacak Scala/Scala-Dev.
Untuk berkontribusi di sini, buka permintaan tarik dari garpu repositori ini.
Ketahuilah bahwa kami tidak dapat menerima tambahan ke perpustakaan standar, hanya modifikasi pada kode yang ada. Kompatibilitas biner melarang menambahkan kelas publik baru atau metode publik. Penambahan dibuat untuk scala-library-next sebagai gantinya.
Kami mengharuskan Anda menandatangani Scala CLA sebelum kami dapat menggabungkan pekerjaan Anda, untuk melindungi masa depan Scala sebagai perangkat lunak open source.
Alur kerja umum adalah sebagai berikut.
Untuk informasi lebih lanjut tentang membangun dan mengembangkan inti Scala, baca sisa readme ini, terutama untuk menyiapkan mesin Anda!
Untuk menghubungi kontributor Scala lainnya, bergabunglah dengan saluran #Scala-Contributors di scala Discord Chat, atau posting di kontributor.scala-lang.org (wacana).
Jika Anda memerlukan bantuan dengan PR Anda kapan saja, jangan ragu untuk @-mention siapa pun dari daftar di bawah ini, dan kami akan melakukan yang terbaik untuk membantu Anda:
| nama belakang | Bicaralah padaku tentang ... | |
|---|---|---|
@lrytz | Back End, Optimizer, Named & Default Arguments, Reporters | |
@retronym | 2.12.x Cabang, Kinerja Kompiler, Bug Kompiler Aneh, Lambdas | |
@SethTisue | Memulai, Membangun, CI, Bangunan Komunitas, Jenkins, Dokumen, Perpustakaan, Rept | |
@dwijnand | pencocokan pola, mima, sebagian | |
@som-snytt | PERINGATAN/LINT/ERRORS, REPL, OPSI KOMPILER, INTERNAL KOMPILER, BAGIAN | |
@Ichoran | Perpustakaan Koleksi, Kinerja | |
@viktorklang | konkurensi, berjangka | |
@sjrd | Interaksi dengan Scala.js | |
@NthPortal | Perpustakaan, Concurrency, scala.math , LazyList , Using , peringatan | |
@bishabosha | Pembaca yang lezat | |
@joroKr21 | tipe, implisit, varian yang lebih tinggi |
PS: Jika Anda memiliki waktu luang untuk membantu di sekitar sini, kami akan dengan senang hati menambahkan nama Anda ke daftar ini!
Targetkan cabang tertua yang Anda inginkan dari perubahan Anda. Kami secara berkala menggabungkan ke depan dari cabang rilis yang lebih lama (misalnya, 2.12.x) menjadi yang baru (misalnya 2.13.x).
Jika perubahan Anda sulit untuk digabungkan ke depan, Anda mungkin diminta juga mengirimkan PR terpisah yang menargetkan cabang yang lebih baru.
Jika perubahan Anda khusus versi dan tidak boleh digabungkan ke depan, letakkan [nomerge] di nama PR.
Jika perubahan Anda adalah backport dari cabang yang lebih baru dan karenanya tidak perlu digabungkan ke depan, letakkan [backport] di nama PR.
Sebagian besar perubahan harus menargetkan 2.13.x. Kami semakin enggan menargetkan 2.12.x kecuali ada alasan khusus (misalnya jika bug buruk ditemukan, atau jika ada sponsor komersial).
Cabang 2.11.x sekarang tidak aktif dan tidak ada rilis 2.11.x lebih lanjut direncanakan (kecuali keadaan yang tidak biasa dan tidak terduga muncul). Anda tidak boleh menargetkan 2.11.x tanpa meminta pemelihara terlebih dahulu.
Yang terpenting:
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
tetapi juga:
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
Anda membutuhkan alat berikut:
MacOS dan Linux bekerja. Windows dapat berfungsi jika Anda menggunakan Cygwin. Bantuan masyarakat dengan menjaga bangunan bekerja di windows dan mendokumentasikan pengaturan yang diperlukan dihargai.
Kami berterima kasih atas lisensi OSS berikut:
Selama pengembangan biasa, Build Scala baru dibangun oleh versi yang dirilis sebelumnya, yang dikenal sebagai "Kompiler Referensi" atau, dengan syair, sebagai "Starr" (rilis referensi yang stabil). Membangun dengan Starr sudah cukup untuk sebagian besar jenis perubahan.
Namun, build penuh Scala adalah bootstrap . Bootstraps memiliki dua langkah: pertama, bangun dengan Starr; Kemudian, bangun lagi menggunakan kompiler yang baru dibangun, meninggalkan Starr di belakang. Ini menjamin bahwa setiap versi Scala dapat membangun dirinya sendiri.
Jika Anda mengubah bagian pembuatan kode dari kompiler Scala, perubahan Anda hanya akan muncul di bytecode perpustakaan dan kompiler setelah bootstrap. CI kami melakukan build bootstrap.
Bootstrap Lokal : Untuk melakukan bootstrap, jalankan restarrFull dalam sesi SBT. Ini akan membangun dan mempublikasikan distribusi Scala ke repositori artefak lokal Anda dan kemudian beralih SBT untuk menggunakan versi itu sebagai scalaVersion baru. Anda kemudian dapat kembali dengan reload . Catatan restarrFull juga akan menulis versi Starr ke buildcharacter.properties sehingga Anda dapat beralih kembali dengan restarr tanpa menerbitkan ulang. Ini akan mengganti sesi SBT untuk menggunakan Direktori build-restarr dan target-restarr alih-alih build dan target , yang menghindari memusnahkan Classfile dan metadata tambahan. IntelliJ akan terus dikonfigurasi untuk menyusun dan menjalankan tes menggunakan versi Starr di versions.properties .
Untuk sejarah tentang bagaimana skema saat ini tiba, lihat https://groups.google.com/d/topic/scala-internals/gp5jsm1e0fo/discussion.
Membangun dengan peringatan fatal : Untuk membuat peringatan dalam proyek fatal (yaitu mengubahnya menjadi kesalahan), jalankan set Global / fatalWarnings := true di sbt (ganti Global dengan nama modul - seperti reflect - untuk hanya membuat peringatan fatal untuk modul itu). Untuk menonaktifkan peringatan fatal lagi, baik reload SBT, atau menjalankan set Global / fatalWarnings := false (sekali lagi, ganti Global dengan nama modul jika Anda hanya mengaktifkan peringatan fatal untuk modul itu). CI selalu memiliki peringatan fatal yang diaktifkan.
Setelah Anda memulai sesi sbt , Anda dapat menjalankan salah satu perintah inti:
compile kompilasi semua sub-proyek (perpustakaan, refleksi, kompiler, scaladoc, dll)scala / scalac Jalankan repl / compiler langsung dari SBT (terima opsi / argumen)enableOptimizer memuat ulang build dengan pengoptimal scala diaktifkan. Rilis kami dibangun dengan cara ini. Aktifkan ini saat mengerjakan peningkatan kinerja kompiler. Ketika pengoptimal diaktifkan, build akan lebih lambat dan build tambahan bisa salah.setupPublishCore menjalankan enableOptimizer dan mengkonfigurasi nomor versi berdasarkan Git Sha saat ini. Sering digunakan sebagai bagian dari bootstrap: sbt setupPublishCore publishLocal && sbt -Dstarr.version=<VERSION> testAlldist/mkBin menghasilkan skrip runner ( scala , scalac , dll) di build/quick/bindist/mkPack menciptakan build dalam format distribusi Scala di build/packjunit/test menjalankan tes JUnit; junit/testOnly *Foo menjalankan subsetscalacheck/test menjalankan tes Scalacheck, gunakan testOnly untuk menjalankan subsetpartest menjalankan tes partest (menerima opsi, coba partest --help )publishLocal menerbitkan distribusi secara lokal (dapat digunakan sebagai scalaVersion dalam proyek SBT lainnya)set baseVersionSuffix := "bin-abcd123-SNAPSHOT" di mana abcd123 adalah hash git dari revisi yang diterbitkan. Anda juga dapat menggunakan sesuatu yang khusus seperti "bin-mypatch" . Ini mengubah nomor versi dari 2.13.2-SNAPSHOT menjadi sesuatu yang lebih stabil ( 2.13.2-bin-abcd123-SNAPSHOT ).-bin menandai versi biner yang kompatibel. Menggunakannya di SBT akan menyebabkan scalaBinaryVersion menjadi 2.13 . Jika versi tidak kompatibel biner, kami sarankan menggunakan -pre , misalnya, 2.14.0-pre-abcd123-SNAPSHOT .set ThisBuild / Compile / packageDoc / publishArtifact := false to Skip menghasilkan / menerbitkan dokumen API (mempercepat proses). Jika suatu perintah menghasilkan pesan kesalahan seperti a module is not authorized to depend on itself , mungkin plugin SBT global menyebabkan ketergantungan siklus. Coba menonaktifkan plugin SBT global (mungkin dengan mengomentari sementara di ~/.sbt/1.0/plugins/plugins.sbt ).
Kami merekomendasikan menyimpan file uji lokal di direktori sandbox yang tercantum di .gitignore repo Scala.
Perhatikan bahwa kompilasi tambahan SBT sering terlalu kasar untuk basis kode kompiler Scala dan mengkompilasi ulang terlalu banyak file, menghasilkan waktu pembangunan yang lama (periksa SBT#1104 untuk kemajuan di bagian depan itu). Sementara itu Anda bisa:
Kami menyarankan menggunakan ide intellij (lihat SRC/IntelliJ/ReadMe.md).
Logam juga dapat berfungsi, tetapi kami belum memiliki instruksi atau konfigurasi sampel untuk itu. Permintaan tarik di daerah ini akan sangat disambut. Sementara itu, kami mengumpulkan panduan di Scala/Scala-Dev#668.
Untuk menggunakan kompiler tambahan IntelliJ:
dist/mkBin di SBT untuk mendapatkan build dan skrip runner di build/quick/bin Sekarang Anda dapat mengedit dan membangun IntelliJ dan menggunakan skrip (kompiler, repl) untuk secara langsung menguji perubahan Anda. Anda juga dapat menjalankan perintah scala , scalac dan partest di SBT. Aktifkan "Mode semut" (dijelaskan di atas) untuk mencegah kompiler tambahan SBT dari mengkompilasi ulang (terlalu banyak) file sebelum setiap doa partest .
Pedoman kami untuk berkontribusi dijelaskan di Contributing.md. Ini berisi informasi yang berguna tentang standar pengkodean, pengujian, dokumentasi kami, bagaimana kami menggunakan git dan github dan cara mendapatkan kode Anda ditinjau.
Anda mungkin juga ingin memeriksa sumber daya berikut:
Setelah Anda mengirimkan PR, komit Anda akan diuji secara otomatis oleh Scala CI.
Pengaturan CI kami selalu berkembang. Lihat Scala/Scala-Dev#751 untuk detail lebih lanjut tentang bagaimana hal-hal saat ini bekerja dan bagaimana kami berharap mereka dapat berubah.
Jika Anda melihat kegagalan palsu pada Jenkins, Anda dapat memposting /rebuild sebagai komentar PR. ReadMe Scabot mencantumkan semua perintah yang tersedia.
Jika Anda ingin menguji tambalan Anda sebelum memiliki semua yang dipoles untuk ditinjau, Anda dapat membuat Travis CI membangun cabang Anda (pastikan Anda memiliki garpu dan mengaktifkan Travis CI untuk cabang yang dibangun terlebih dahulu, lalu dorong cabang Anda). Juga jangan ragu untuk mengirimkan draft PR. Jika draft cabang Anda berisi sejumlah besar komit (bahwa Anda belum membersihkan / squash untuk ditinjau), pertimbangkan untuk menambahkan [ci: last-only] ke judul PR. Dengan begitu hanya komit terakhir yang akan diuji, menghemat beberapa energi dan sumber daya CI. Perhatikan bahwa draft PR yang tidak aktif akan ditutup pada akhirnya, yang tidak berarti perubahan ditolak.
CI melakukan bootstrap kompiler. Tugas pertama, validatePublishCore , menerbitkan pembangunan komit Anda untuk repositori sementara https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots. Perhatikan bahwa bangunan ini belum bootstrap, bytecode -nya dibangun menggunakan Starr saat ini. Nomor versi adalah 2.13.2-bin-abcd123-SNAPSHOT di mana abcd123 adalah hash komit. Untuk build yang tidak kompatibel biner, nomor versi adalah 2.14.0-pre-abcd123-SNAPSHOT .
Anda dapat menggunakan Build Scala di repositori validasi secara lokal dengan menambahkan resolver dan menentukan scalaVersion yang sesuai:
$ 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 menerbitkan ini ke https://scala-ci.typesafe.com/artifactory/scala-integration/.
Menggunakan build malam di SBT dan alat -alat lain dijelaskan di halaman DOC ini.
Meskipun kami dengan santai menyebut ini sebagai build "malam hari", mereka sebenarnya tidak dibangun setiap malam, tetapi "mergeling". Dengan kata lain, sebuah bangunan diterbitkan untuk setiap PR gabungan.
Scala CI berjalan sebagai instance Jenkins di scala-ci.typesafe.com, dikonfigurasi oleh buku masak koki di Scala/Scala-Jenkins-Infra.
Bot build yang menonton PRS, memicu pengujian membangun dan menerapkan label "ditinjau" setelah komentar LGTM ada di repo Scala/Scabot.
Bangunan Komunitas Scala adalah metode penting untuk menguji rilis Scala. Bangunan komunitas dapat diluncurkan untuk komitmen Scala, bahkan sebelum PR komit telah digabungkan. Komit itu kemudian digunakan untuk membangun sejumlah besar proyek open-source dari sumber dan menjalankan suite pengujian mereka.
Untuk meminta pembangunan komunitas di PR Anda, tanyakan saja dalam komentar pada PR dan anggota tim Scala (mungkin @setHtisue) akan mengurusnya. (Detail)
Bangunan komunitas dijalankan pada instance Scala Jenkins. Pekerjaan itu dinamai ..-integrate-community-build . Lihat repo Scala/Community-Builds.