Swift Numerics
Swift Numerics предоставляет набор модулей, которые поддерживают численные вычисления в Swift. Эти модули можно разделить на две категории:
Между этими двумя категориями есть некоторое пересечение, и API, начинающийся с первой категории, может перейти во вторую по мере своего развития и обнаружения новых применений.
Модули Swift Numerics являются мелкозернистыми. Например, если вам нужна поддержка комплексных чисел, вы можете импортировать ComplexModule как отдельный модуль:
import ComplexModule
let z = Complex<Double>.i
Существует также верхний уровень модуля Numerics, который повторно экспортирует полный публичный интерфейс Swift Numerics:
import Numerics
// Теперь доступен весь API Swift Numerics.
Модули Swift Numerics имеют минимальные зависимости от других проектов. Текущие модули предполагают только доступность стандартных библиотек Swift и C, а также поддержку времени выполнения, предоставляемую compiler-rt.
Будущее расширение может предполагать доступность других стандартных интерфейсов, таких как BLAS (Basic Linear Algebra Subprograms) и LAPACK (Linear Algebra Package), но модули с более специализированными зависимостями (или зависимостями, недоступными на всех платформах, поддерживаемых Swift) принадлежат отдельному пакету.
Поскольку мы намерены сделать возможным включение модулей Swift Numerics в стандартную библиотеку в будущем, Swift Numerics использует ту же лицензию и рекомендации по вкладу, что и проект Swift.
Использование Swift Numerics в вашем проекте
Чтобы использовать Swift Numerics в проекте SwiftPM, выполните следующие действия:
.package(url: "https://github.com/apple/swift-numerics", from: "1.0.0"),
.target(name: "MyTarget", dependencies: [
.product(name: "Numerics", package: "swift-numerics"),
"AnotherModule"
]),
Стабильность источника
Пакет Swift Numerics стабилен; номера версий следуют семантическому версионированию. Публичный API пакета swift-numerics состоит из не зачёркнутых объявлений, помеченных как public или usableFromInline в модулях, повторно экспортируемых верхним уровнем модуля Numerics. Интерфейсы, не являющиеся частью публичного API, могут продолжать изменяться в любом выпуске, включая исправления.
Обратите внимание, что содержимое модулей _NumericsShims и _TestSupport, а также содержимое каталога Tests явно не является публичным API. Определения в них могут поэтому измениться по желанию, и весь модуль может быть удалён в любом новом выпуске. Если у вас есть случай использования, требующий зачёркнутые операции, пожалуйста, поднимите вопрос с просьбой сделать их публичным API.
Будущие минорные версии пакета могут вносить изменения в эти правила по мере необходимости.
Мы хотели бы, чтобы этот пакет быстро использовал улучшения языка и инструментов Swift, которые имеют отношение к его мандату. Соответственно, время от времени мы ожидаем, что новые версии этого пакета потребуют от клиентов обновления до более новой версии инструментальной цепочки Swift. Требование новой версии Swift потребует только незначительного увеличения версии.
Вклад в Swift Numerics
Swift Numerics — это отдельная библиотека, которая отделена от основного проекта Swift, но иногда она выступает в качестве плацдарма для API, которые позже будут включены в стандартную библиотеку Swift. Когда это произойдёт, такие изменения будут предложены в стандартной библиотеке Swift с использованием установленного процесса эволюции проекта Swift.
Swift Numerics использует проблемы GitHub для отслеживания ошибок и функций. Мы используем запросы на вытягивание для разработки.
Как предложить новый модуль
Поднимите проблему с... ### Как предложить новую функцию для существующего модуля
Создайте задачу с тегом [улучшение].
Поднимите PR с вашей реализацией и обсудите её там.
Как только будет достигнуто согласие, что новая функция желательна и дизайн подходит, её можно объединить.
Вопросы об использовании модулей Swift Numerics или проблемы, которые явно не являются ошибками, можно обсудить в разделе «Swift Numerics» на форумах Swift (https://forums.swift.org/c/related-projects/swift-numerics).
[Примечание 1:] Модуль называется ComplexModule вместо Complex, потому что Swift в настоящее время не может использовать полностью определённое имя для типов, когда тип и модуль имеют одно и то же имя (обсуждение здесь: https://forums.swift.org/t/pitch-fully-qualified-name-syntax/28482). Это помешало бы пользователям Swift Numerics, которым не нужны универсальные типы, делать такие вещи, как:
import Complex
// Я знаю, что мне нужен только Complex<Double>, поэтому мне не нужен универсальный параметр.
typealias Complex = Complex.Complex<Double> // Это не работает, потому что поиск имени завершается неудачно.
По этой причине модули, в которых возникает такая двусмысленность, имеют суффикс Module в Swift Numerics:
import ComplexModule
// Я знаю, что мне нужен только Complex<Double>, поэтому мне не нужен универсальный параметр.
typealias Complex = ComplexModule.Complex<Double>
// Но я всё ещё могу ссылаться на универсальный тип, если мне это иногда нужно:
let a = ComplexModule.Complex<Float>
Модуль Real не содержит типа Real, но содержит протокол Real. Пользователи могут захотеть определить свой собственный тип Real (и, возможно, повторно экспортировать модуль Real) — именно поэтому суффикс также применяется там. Новые модули должны тщательно оценить это решение, но могут ошибиться в сторону добавления суффикса. Ожидается, что большинство пользователей просто импортируют Numerics, так что это не проблема для них.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )