1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Scala

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Это Scala 2! Добро пожаловать!

Это домашний репозиторий стандартной библиотеки, компилятора и спецификаций языка Scala 2.

Для Scala 3 перейдите к scala/scala3.

Как внести свой вклад

Проблемы и сообщения об ошибках для Scala 2 находятся в scala/bug. Этот трекер также служит местом, где новые участники могут найти задачи для выполнения: задачи для новичков, помощь нужна.

Для координации более широких усилий мы также используем трекер scala/scala-dev.

Чтобы внести свой вклад здесь, пожалуйста, создайте запрос на слияние (pull request) из вашего форка этого репозитория.

Обратите внимание, что мы не принимаем добавления в стандартную библиотеку, только изменения существующего кода. Бинарная совместимость запрещает добавление новых публичных классов или методов. Новые добавления осуществляются в scala-library-next.

Мы требуем, чтобы вы подписали Scala CLA до того, как мы сможем слить ваш вклад, чтобы защитить будущее Scala как открытого программного обеспечения.Основной рабочий процесс следующий.

  1. Найдите/создайте проблему в scala/bug (или сразу отправьте хорошо документированный PR!).
  2. Создайте форк репозитория scala/scala.
  3. Отправьте ваши изменения в ветку вашего форка. Для руководства по кодированию перейдите сюда.
  4. Отправьте запрос на слияние (pull request) в scala/scala из вашего форка.Для получения дополнительной информации о сборке и развитии основного ядра Scala прочитайте остальную часть этого файла README, особенно раздел настройки вашего компьютера!

Свяжитесь с нами!

Чтобы связаться с другими участниками проекта 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/)
  - [![Ускорено Develocity](https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A)](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 для расширенного компилирования (см. Настройка IDE ниже) — её расширенный компилятор менее консервативен, но обычно корректен.

Настройка IDE

Мы советуем использовать IntelliJ IDEA (см. src/intellij/README.md).

Metals также могут работать, но мы пока не имеем руководства или примерной конфигурации для этого. Было бы очень полезно получить запрос на включение. В настоящее время мы собираем руководство по использованию scala/scala-dev#668.

Чтобы использовать расширенный компилятор IntelliJ:

  • запустите dist/mkBin в sbt, чтобы получить сборку и скрипты запуска в build/quick/bin
  • запустите "Сборка" - "Собрать проект" в IntelliJТеперь вы можете редактировать и собирать в IntelliJ и использовать скрипты (компилятор, REPL) для непосредственного тестирования ваших изменений. Вы также можете запускать команды scala, scalac и partest в sbt. Активируйте режим "Ant" (объяснено выше), чтобы предотвратить перекомпиляцию (слишком большого количества) файлов перед каждым вызовом partest.# Правила написания кода

Наши правила для участников представлены в CONTRIBUTING.md. Этот документ содержит полезную информацию о наших стандартах программирования, тестирования, документирования, использовании Git и GitHub и том, как ваш код будет проверяться.

Вы также можете обратиться к следующим ресурсам:

CI для Scala

Статус сборки

При отправке 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

Система 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Scala — это современный мультипарадигменный язык программирования, цель которого — выразить распространённые паттерны программирования лаконичным, элегантным и типобезопасным способом. Развернуть Свернуть
Scala и 6 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-Scala.git
git@api.gitlife.ru:oschina-mirror/mirrors-Scala.git
oschina-mirror
mirrors-Scala
mirrors-Scala
2.13.x