Это домашний репозиторий стандартной библиотеки, компилятора и спецификаций языка Scala 2.
Для Scala 3 перейдите к scala/scala3.
Проблемы и сообщения об ошибках для Scala 2 находятся в scala/bug. Этот трекер также служит местом, где новые участники могут найти задачи для выполнения: задачи для новичков, помощь нужна.
Для координации более широких усилий мы также используем трекер scala/scala-dev.
Чтобы внести свой вклад здесь, пожалуйста, создайте запрос на слияние (pull request) из вашего форка этого репозитория.
Обратите внимание, что мы не принимаем добавления в стандартную библиотеку, только изменения существующего кода. Бинарная совместимость запрещает добавление новых публичных классов или методов. Новые добавления осуществляются в scala-library-next.
Мы требуем, чтобы вы подписали Scala CLA до того, как мы сможем слить ваш вклад, чтобы защитить будущее Scala как открытого программного обеспечения.Основной рабочий процесс следующий.
Чтобы связаться с другими участниками проекта Scala, присоединяйтесь к каналу #scala-contributors на чате Scala Discord или опубликуйте сообщение на contributors.scala-lang.org (Discourse).Если вам понадобится помощь с вашим PR в любое время, пожалуйста, обращайтесь к любому из списка ниже, и мы сделаем всё возможное, чтобы помочь вам!
@lrytz | серверная часть, оптимизация, именованные и по умолчанию аргументы, отчёты | |
@retronym | производительность компилятора, странные баги компилятора, лямбда-выражения | |
@SethTisue | начало работы, сборка, CI, общедоступная сборка, Jenkins, документация, библиотека, REPL | |
@dwijnand | шаблонное сопоставление, MiMa, partest | |
@som-snytt | предупреждения/линты/ошибки, REPL, опциях компилятора, внутренняя работа компилятора, partest | |
@Ichoran |
<img src="https://avatars.githubusercontent.com/Ichoran" height="50px" title="Rex Kerr"/>
@Ichorancom/Ichoran) | библиотеке коллекций, производительности |
|
@viktorklang
| конкуренции, будущих ценностях |
|
@sjrd
| взаимодействия с Scala.js |
|
@NthPortal
| библиотеке, конкуренции, scala.math
, LazyList
, Using
, предупреждения |Пожалуйста, предоставьте текст для перевода, чтобы я мог выполнить задачу.| | username | поговорите со мной о... |
|-------------------------------------------------------------------------------------------------|----------------------------------------------------------------|---------------------------------------------------|
| |
@jrudolph
| sbt, плагины, средства сборки |
| |
@olafurpg
| функциональное программирование, системы типов, макросы, Scala.js |
| |
@eed3si9n
| функциональное программирование, макросы, Scala.js, оптимизация |
| |
@richarddawe
| веб-разработка, Akka HTTP, Play Framework, Scala.js |
| |
@oleksandr-perehiniak
| Scala.js, взаимодействие с JavaScript, веб-разработка |
| |
@mkiers
| Scala.js, веб-разработка, функциональное программирование |
| |
@timcharper
| Scala.js, веб-разработка, функциональное программирование |
| |
@raquo
| Scala.js, веб-разработка, функциональное программирование |
| |
@olafurpg
| функциональное программирование, системы типов, макросы, Scala.js |```markdown
| |
@olafurpg
| функциональное программирование, системы типов, макросы, Scala.js |
| | `@eed3si9n` | функциональное программирование, макросы, Scala.js, оптимизация |
|
| `@richarddawe` | веб-разработка, Akka HTTP, Play Framework, Scala.js |
|
| `@oleksandr-perehiniak` | Scala.js, взаимодействие с JavaScript, веб-разработка |
|
| `@mkiers` | Scala.js, веб-разработка, функциональное программирование |
|
| `@timcharper` | Scala.js, веб-разработка, функциональное программирование |
|
| `@raquo` | Scala.js, веб-разработка, функциональное программирование |
| ! [Jamie Thompson](https://avatars.githubusercontent.com/bishabosha "Jamie Thompson" height="50px") | `@bishabosha` | Читатель TASTy |
| ! [Georgi Krastev](https://avatars.githubusercontent.com/joroKr21 "Georgi Krastev" height="50px") | `@joroKr21` | Высшие типы данных, импlicitы, вариативность |
P.S.: Если у вас есть свободное время, чтобы помочь здесь, мы будем рады видеть ваше имя в этом списке!
# Ветки
Целитесь на самую старую ветку, куда вы хотите, чтобы ваши изменения попали. Мы периодически объединяем изменения с 2.12.x до 2.13.x. Большинство изменений должны целиться на 2.13.x, так как 2.12.x теперь находится под минимальной поддержкой.
Если ваше изменение сложно объединять вперед, вам могут потребовать также отправить отдельный запрос на слияние (PR) для новой ветки.
Если ваше изменение является версионным и не должно объединяться вперед, добавьте `[nomerge]` в название вашего PR.
Если ваше изменение является обратной совместимостью с более новой веткой и поэтому не требует объединения вперед, добавьте `[backport]` в название вашего PR.
## Выбор ветки
Большинство изменений должны целиться на 2.13.x. Мы все больше склоняемся к тому, чтобы целиться на 2.12.x только при наличии особых причин (например, если найдена особенно серьезная ошибка, или если есть коммерческое спонсорство). См. [Поддержка Scala 2](https://www.scala-lang.org/development/#scala-2-maintenance).
# Структура репозитория
Основное:```
scala/
+--build.sbt Основное определение сборки sbt
+--project/ Остальная часть сборки sbt
+--src/ Все исходные коды
+---/library Библиотека стандартных библиотек Scala
+---/reflect Рефлексия Scala
+---/compiler Компилятор Scala
+--test/ Набор тестов Scala
+---/files Часть тестов partest
+---/junit Тесты junit
+---/scalacheck Тесты scalacheck
+--spec/ Языковое описание Scala
```но также:
scala/ +---/library-aux Вспомогательная библиотека Scala для целей бутстрепинга и документации +---/interactive Интерактивный компилятор Scala для клиентов, таких как среда разработки (IDE) (также известен как Presentation Compiler) +---/intellij Шаблоны проектов IntelliJ IDEA +---/manual Базовые скрипты запуска Scala "man" (страницы справки) +---/partest Внутренний параллельный тестовый фреймворк Scala +---/partest-javaagent Вспомогательный агент Java для Partest +---/repl Основной модуль Scala REPL +---/repl-frontend Передняя часть Scala REPL +---/scaladoc Инструмент документации Scala +---/scalap Децонвертер классовых файлов Scala +---/testkit Набор средств для юнит-тестирования Scala +--admin/ Скрипты для задач CI и выпуска +--doc/ Дополнительные лицензии и права авторства +--scripts/ Скрипты для задач CI и выпуска +--tools/ Полезные скрипты для локального развития +--build/ Продукты сборки +--dist/ Продукты сборки +--target/ Продукты сборки
# Готовьтесь внести свой вклад
## Требования
Для работы вам потребуются следующие инструменты:
- Java SDK. Базовая версия — 8 как для 2.12.x, так и для 2.13.x. В большинстве случаев использование более поздней версии SDK (например, 17 или 21) для локального развития допустимо. CI проверяет соответствие базовой версии.
- sbtПоддерживаются macOS и Linux. Windows может работать при использовании Cygwin. Поддержка сообществом сборки на Windows и документация необходимых настроек приветствуются.
## Инструменты, которые мы используем
Мы благодарны за использование следующих лицензий Open Source Software:
- [JProfiler Java профилировщик](https://www.ej-technologies.com/products/jprofiler/overview.html)
- [YourKit Java Profiler](https://www.yourkit.com/java/profiler/)
- [IntelliJ IDEA](https://www.jetbrains.com/idea/download/)
- [](https://develocity.scala-lang.org)
## Настройка сборки
### Основы
При обычной разработке новый Scala билд создаётся с помощью ранее выпущенной версии, известной как "отправочная компиляторская версия" или, простонаучно, как "STARR" (стабильная отправочная версия). Сборка с использованием STARR достаточна для большинства видов изменений.
Однако полная сборка Scala выполняется методом бутстреппинга. Процесс бутстреппинга состоит из двух шагов: во-первых, сборка с использованием STARR; затем повторная сборка с использованием свежесобранного компилятора, отбросив STARR. Это гарантирует, что каждая версия Scala способна создать себя.
Если вы измените часть генерации кода Scala компилятора, ваши изменения будут видны в байткоде библиотеки и компилятора после выполнения бутстреппинга. Наш CI выполняет полную сборку с использованием бутстреппинга.**Локальный бутстреппинг**: Чтобы выполнить бутстреппинг, запустите `restarrFull` внутри сессии sbt. Это создаст и опубликует Scala-распределение в вашей локальной репозитории артефактов, а затем переключит sbt на использование этой версии как нового значения `scalaVersion`. Вы можете вернуться назад с помощью команды `reload`. Обратите внимание, что `restarrFull` также записывает версию STARR в `build-character.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` — чтобы сделать предупреждения критичными только для этого модуля). Чтобы отключить критические предупреждения снова, либо перезапустите `sbt`, либо выполните команду `set Global / fatalWarnings := false` (ещё раз замените `Global` на имя модуля, если вы активировали критические предупреждения только для этого модуля). В CI всегда включены критические предупреждения.### Использование сборки sbt
Для запуска проекта используйте следующую команду:
```bash
sbt run
Для создания jar-файла используйте команду:
sbt assembly
Параметры сборки можно указывать в файле build.sbt
. Например:
name := "my-project"
version := "1.0"
scalaVersion := "2.13.3"
Для выполнения тестов используйте команду:
sbt test
Если возникли ошибки, попробуйте очистить проект:
sbt clean
Сообщения об ошибках могут содержать информацию о том, какие зависимости отсутствуют или есть проблемы с конфигурацией. Для решения проблем рекомендуется проверить файл project/build.properties
и убедиться, что используется правильная версия JDK.
Для получения справки по доступным командам используйте:
sbt help
Это все команды, которые вам могут потребоваться для работы со сборкой sbt.После запуска сессии sbt
вы можете выполнить одну из основных команд:
compile
собирает все подпроекты (библиотека, отражение, компилятор, scaladoc и т. д.)
scala
/ scalac
запускают REPL / компилятор непосредственно из sbt (принимают опции / аргументы)
enableOptimizer
перезапускает сборку с включенным оптимизатором Scala. Наши выпуски создаются таким образом. Включите это при работе над улучшением производительности компилятора. Когда оптимизатор включен, сборка будет медленнее, а последовательные сборки могут быть некорректными.
setupPublishCore
выполняет 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
— хэш версии ревизии, которая публикуется. Вы также можете использовать что-то своё, например, "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-документации (ускоряет процесс). Если команда приводит к сообщению об ошибке вроде модуль не имеет права зависеть от самого себя
, это может указывать на то, что глобальный плагин sbt вызывает циклическую зависимость. Попробуйте отключить глобальные плагины sbt (например, временно закомментируйте их в ~/.sbt/1.0/plugins/plugins.sbt
).#### Виртуальная средаМы рекомендуем хранить локальные тестовые файлы в директории sandbox
, которая указана в .gitignore
репозитория Scala.
Обратите внимание, что расширенное компилирование sbt часто слишком грубое для базы кода компилятора Scala и перекомпилирует слишком много файлов, что приводит к длительной продолжительности сборки (проверьте sbt#1104 за прогресс в этом направлении). Временно вы можете:
Мы советуем использовать IntelliJ IDEA (см. src/intellij/README.md).
Metals также могут работать, но мы пока не имеем руководства или примерной конфигурации для этого. Было бы очень полезно получить запрос на включение. В настоящее время мы собираем руководство по использованию scala/scala-dev#668.
Чтобы использовать расширенный компилятор IntelliJ:
dist/mkBin
в sbt, чтобы получить сборку и скрипты запуска в build/quick/bin
scala
, scalac
и partest
в sbt. Активируйте режим "Ant" (объяснено выше), чтобы предотвратить перекомпиляцию (слишком большого количества) файлов перед каждым вызовом partest
.# Правила написания кодаНаши правила для участников представлены в CONTRIBUTING.md. Этот документ содержит полезную информацию о наших стандартах программирования, тестирования, документирования, использовании Git и GitHub и том, как ваш код будет проверяться.
Вы также можете обратиться к следующим ресурсам:
При отправке pull request ваши коммиты будут автоматически тестироваться системой CI для Scala.
Настройка нашей системы CI постоянно развивается. Подробнее можно узнать в scala/scala-dev#751.
Если вы заметили случайную ошибку на Jenkins, вы можете оставить комментарий /rebuild
. Список всех доступных команд приведён в README scabot.Если вы хотите протестировать ваш патч перед тем как всё будет готово для проверки, вы можете использовать Travis CI для сборки вашего ветвления (не забудьте создать форк и активировать Travis CI для сборок ветвлений). Также вы можете отправить черновик pull request. В случае, если ваш черновик содержит большое количество коммитов (которые ещё не были очищены или свёрнуты для проверки), рекомендуется добавить [ci: last-only]
в заголовок pull request. Это позволит протестировать только последний коммит, что сэкономит энергию и ресурсы CI. Обратите внимание, что неактивные черновые pull requests рано или поздно будут закрыты, но это не означает отклонение изменений.Система 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.13.17-bin-abcd123-SNAPSHOT"
> console
Система CI публикует эти сборки на https://scala-ci.typesafe.com/artifactory/scala-integration/.
Использование ночных сборок в sbt и других инструментах объясняется на этой странице документации.
Хотя мы называем эти сборки "ночными", они не собираются еженоочно, а "мерджами". То есть, сборка публикуется после каждого слияния pull request.
Система CI Scala работает как экземпляр Jenkins на scala-ci.typesafe.com. Конфигурация выполнена с помощью Chef рецептов, расположенных в репозитории scala/scala-jenkins-infra.
Мониторинг PR, запуск тестовых сборок и применение метки "Отмечен" после получения комментария LGTM осуществляется роботом, находящимся в репозитории scala/scabot.## Общественный сборочный процесс
Общественный сборочный процесс для Scala является важным методом тестирования выпусков Scala. Для любого коммита Scala можно запустить общественный сборочный процесс даже до того, как PR этого коммита будет объединён. Этот коммит затем используется для сборки большого количества открытых проектов из источников и выполнения их наборов тестов.
Чтобы запросить запуск общественного сборочного процесса для вашего PR, просто сделайте запрос в комментарии к PR, и участник команды Scala (вероятнее всего @SethTisue) займётся этим. (подробнее)
Общественные сборочные процессы выполняются на экземпляре Jenkins для Scala. Задания имеют имя ..-integrate-community-build
. Увидеть больше можно в scala/community-builds репозитории.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )