Это дом стандартной библиотеки Scala 2, компилятора и языка.
Для Scala 3 посетите Scala/Scala3.
Проблемы и отчеты об ошибках для Scala 2 находятся в Scala/Bug. Этот трекер также, где новые участники могут найти проблемы, над которыми нужно работать: хорошие первые проблемы, помощь.
Для координации более широких усилий мы также используем трекер Scala/Scala-Dev.
Чтобы внести свой вклад, пожалуйста, откройте запрос на привлечение из вашей вилки этого репозитория.
Имейте в виду, что мы не можем принять дополнения в стандартную библиотеку, только изменения в существующем коде. Бинарная совместимость запрещает добавлять новые публичные классы или публичные методы. Вместо этого добавлены дополнения в Scala-Library-Next.
Мы требуем, чтобы вы подписали Scala CLA, прежде чем мы сможем объединить любую работу, чтобы защитить будущее Scala как программное обеспечение с открытым исходным кодом.
Общий рабочий процесс выглядит следующим образом.
Для получения дополнительной информации о построении и разработке ядра Scala прочитайте остальную часть этого Readme, особенно для настройки вашей машины!
Чтобы связаться с другими участниками Scala, присоединяйтесь к каналу #Scala-Contriwhors в чате Scala Discord или Post On Antormors.scala-lang.org (Discourse).
Если вам нужна помощь в вашем пиаре в любое время, пожалуйста, не стесняйтесь @-Наменный любой из списка ниже, и мы сделаем все возможное, чтобы помочь вам:
имя пользователя | Поговори со мной о ... | |
---|---|---|
@lrytz | Бэк -энд, оптимизатор, с именем и по умолчанию, репортеры | |
@retronym | 2.12.x ветвь, производительность компилятора, странные ошибки компилятора, лямбдас | |
@SethTisue | Начало работы, строительство, CI, сборка сообщества, Дженкинс, Документы, Библиотека, Реплика | |
@dwijnand | Маттер -рисунок, MIMA, Partest | |
@som-snytt | Предупреждения/Lints/ошибки, реплика, параметры компилятора, внутренние компиляторы, Partest | |
@Ichoran | Библиотека коллекций, производительность | |
@viktorklang | Параллелизм, будущее | |
@sjrd | Взаимодействие со Scala.js | |
@NthPortal | Библиотека, параллелизм, scala.math , LazyList , Using , предупреждения | |
@bishabosha | Вкусный читатель | |
@joroKr21 | с более высокими типами, последствиями, дисперсией |
PS: Если у вас есть свободное время, чтобы помочь здесь, мы были бы рады добавить ваше имя в этот список!
Нацеливаются на самую старую филиал, который вы хотели бы, чтобы ваши изменения в конечном итоге.
Если ваше изменение сложно слияние вперед, вас могут попросить также отправить отдельный PR, нацеленный на новую филиал.
Если ваше изменение зависит от версии и не должно быть объединено вперед, поместите [nomerge]
в имя PR.
Если ваше изменение является обратным отчетом из более новой филиала и, следовательно, не нужно объединяться вперед, поместите [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 работают. Windows может работать, если вы используете Cygwin. Помощь сообщества в поддержании работы сборки в Windows и документировании любой необходимой настройки.
Мы благодарны за следующие лицензии OSS:
Во время обычной разработки новая сборка Scala построена ранее выпущенной версией, известной как «Справочный компилятор» или, сяльгильно, как «starr» (стабильный эталонный выпуск). Строительство со Старром достаточно для большинства видов изменений.
Тем не менее, полная сборка Scala загружена . Начальник имеет два шага: во -первых, построить со Starr; Затем постройте снова, используя свежестроительный компилятор, оставив Старра позади. Это гарантирует, что каждая версия Scala может построить себя.
Если вы измените часть генерации кода компилятора Scala, ваши изменения будут отображаться только в байт -коде библиотеки и компилятора после начальной загрузки. Наш CI делает начальную сборку.
Начальная загрузка локально : чтобы выполнить начальную загрузку, запустите restarrFull
в сеансе SBT. Это создаст и опубликует распределение Scala в ваш локальный репозиторий артефактов, а затем переключит SBT, чтобы использовать эту версию в качестве новой scalaVersion
. Затем вы можете вернуться обратно с reload
. Примечание restarrFull
также напишет версию Starr на buildcharacter.properties
, чтобы вы могли переключиться к ней с restarr
без переиздания. Это изменит сеанс SBT, чтобы использовать каталоги build-restarr
и target-restarr
вместо build
и target
, что позволяет избежать уничтожения классафиллов и инкрементных метаданных. IntelliJ будет по -прежнему настроен для компиляции и запуска тестов, используя версию Starr в versions.properties
.
Для истории о том, как была достигнута текущая схема, см. Https://groups.google.com/d/topic/scala-internals/gp5jsm1e0fo/discussion.
Строительство с фатальными предупреждениями : чтобы предупреждать в проекте со смертельным исходом (то есть превратить их в ошибки), запустите set Global / fatalWarnings := true
в SBT (замените Global
на название модуля - например, reflect
- только для того, чтобы сделать предупреждения фатальными для этот модуль). Чтобы снова отключить фатальные предупреждения, либо reload
SBT, либо запустите set Global / fatalWarnings := false
(опять же, замените Global
на имя модуля, если вы включили Fatal Warnings для этого модуля). У CI всегда есть фатальные предупреждения.
После того, как вы запустите сеанс sbt
, вы можете запустить одну из основных команд:
compile
все субпроекты (библиотека, отражение, компилятор, Scaladoc и т. Д.)scala
/ scalac
Запустите PERP / Компилятор непосредственно из SBT (принять параметры / аргументы)enableOptimizer
перезагружает сборку с включенным оптимизатором Scala. Наши релизы построены таким образом. Включите это при работе с улучшениями производительности компилятора. Когда оптимизатор будет включен, сборка будет медленнее, а дополнительные сборки могут быть неверными.setupPublishCore
Runs enableOptimizer
и настраивает номер версии на основе текущего GIT SHA. Часто используется как часть начальной загрузки: sbt setupPublishCore publishLocal && sbt -Dstarr.version=<VERSION> testAll
dist/mkBin
генерирует сценарии бегуна ( scala
, scalac
и т. Д.) В build/quick/bin
dist/mkPack
создает сборку в формате распределения Scala в build/pack
junit/test
выполняет тесты JUNIT; junit/testOnly *Foo
запускает подмножествоscalacheck/test
выполняет тесты Scalacheck, используйте testOnly
для запуска подмножестваpartest
запускает тесты Partest (принимает варианты, попробуйте partest --help
)publishLocal
публикует распределение локально (может использоваться в качестве scalaVersion
в других проектах SBT)set baseVersionSuffix := "bin-abcd123-SNAPSHOT"
, где abcd123
является git hash опубликованной ревизии. Вы также можете использовать что-то настраиваемое, например "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
).
Мы рекомендуем сохранить локальные тестовые файлы в каталоге sandbox
, который указан в .gitignore
of Scala Repo.
Обратите внимание, что инкрементная компиляция SBT часто является слишком грубым для кодовой базы компилятора Scala и повторно собирает слишком много файлов, что приводит к длительному времени сборки (проверьте SBT#1104 для прогресса на этом фронте). В то же время вы можете:
Мы предлагаем использовать INTELLIJ IDEA (см. SRC/Intellij/readme.md).
Металлы также могут работать, но у нас еще нет инструкций или примера конфигурации для этого. Запрос на тягу в этой области был бы чрезвычайно приветствовать. В то же время мы собираем руководство в Scala/Scala-Dev#668.
Чтобы использовать Intellij Incremental Compiler:
dist/mkBin
в SBT, чтобы получить сборку и сценарии бегуна в build/quick/bin
Теперь вы можете редактировать и построить IntelliJ и использовать сценарии (компилятор, Repl), чтобы напрямую проверить ваши изменения. Вы также можете запустить команды scala
, scalac
и partest
в SBT. Включите «режим муравья» (объясняется выше), чтобы предотвратить инкрементальный компилятор SBT от повторной компиляции (слишком большого количества) файлов перед каждым вызовом partest
.
Наши руководящие принципы для участия объясняются в Anplying.md. Он содержит полезную информацию о наших стандартах кодирования, тестировании, документации, о том, как мы используем GIT и GitHub, и как просмотреть ваш код.
Вы также можете проверить следующие ресурсы:
После того, как вы отправите PR, ваши коммиты будут автоматически протестированы Scala CI.
Наша установка CI всегда развивается. Смотрите Scala/Scala-Dev#751 для получения более подробной информации о том, как все в настоящее время работает и как мы ожидаем, что они могут измениться.
Если вы видите ложную неудачу на Дженкинсе, вы можете опубликовать /rebuild
в качестве пиар -комментария. Scabot Readme перечисляет все доступные команды.
Если вы хотите проверить свой патч, прежде чем все отполировано для обзора, вы можете сделать Travis CI построить свою ветвь (убедитесь, что у вас есть вилка, и сначала включен Travis CI для сборок, а затем нажмите вашу ветвь). Также не стесняйтесь представить проект PR. В случае, если ваш проект филиала содержит большое количество коммитов (которые вы еще не очистили / сквош для обзора), рассмотрите возможность добавления [ci: last-only]
к названию PR. Таким образом, будет протестирован только последний коммит, сэкономив некоторую энергию и CI-ресурсы. Обратите внимание, что неактивные проекты PRS в конечном итоге будут закрыты, что не означает, что изменения отклоняются.
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 в репозитории валидации локально, добавив резалвер и указав соответствующую 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 и других инструментах объясняется на этой странице DOC.
Хотя мы случайно называем их «ночными» сборками, они на самом деле не построены ночью, а «Mergely». То есть сборка публикуется для каждого объединенного PR.
Scala CI работает в качестве экземпляра Jenkins на Scala-ci.typesafe.com, настроенной поваренной книгой шеф-повара в Scala/Scala-Jenkins-Infra.
Build Bot, который наблюдает за PRS, запускает тестирование, настраивает и применяет «рецензируемый» этикетка после того, как комментарий LGTM находится в репозиции Scala/Scabot.
Сборка сообщества Scala является важным методом для тестирования выпусков Scala. Сборка сообщества может быть запущена для любого коммита Scala, даже до того, как PR Commit будет объединен. Этот коммит затем используется для создания большого количества проектов с открытым исходным кодом из Source и запуска их тестовых люксов.
Чтобы запросить общество построения сообщества на вашем PR, просто спросите в комментарии к PR, и позаботится об этом члена команды Scala (вероятно, @sethtisue). (подробности)
Сообщество работает на экземпляре Scala Jenkins. Работы названы ..-integrate-community-build
. Смотрите Scala/Community-Builds Repo.