BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Swift Numerics visa tornar o Swift adequado para a computação numérica

Swift Numerics visa tornar o Swift adequado para a computação numérica

Segundo o engenheiro da Apple, Steve Cannon, o Swift Numerics é uma biblioteca open source nova para o Swift is a new open-source que tenta preencher uma lacuna na Swift Standard Library. Atualmente, a mesma inclui dois módulos, para computação matemática real e complexa, com mais por vir no roadmap.

A decisão atual de manter o Swift Numerics em seu próprio pacote ao invés de incluí-lo dentro da Standard Library é motivada principalmente por algumas limitações no compilador que impedem que novas APIs sejam implementadas de uma maneira que preserve a premissa de estabilidade do código fonte entre as versões da linguagem. No entanto, isso não descarta que partes do Swift Numerics possam fazer a transição para a Standard Library no futuro. Isso sem dizer que somente funcionalidades genéricas o suficiente serão consideradas para inclusão.

O Swift Numerics é uma biblioteca modular, o que significa que é possível somente importar o módulo desejado. Por exemplo, é assim que se importa o módulo Complex:

import Complex

Alternativamente, é possível importar toda a API Numerics escrevendo:

import Numerics

O módulo Real define três protocolos: ElementaryFunctions, RealFunctions, e Real, que é o mais relevante dos três, segundo Cannon.

O Real descreve um tipo de ponto flutuante que fornece um conjunto de funções numéricas, tais como exp, log, cos, pow, etc. Seu poder vem da possibilidade de escrever código genérico que se adaptará perfeitamente a qualquer novo tipo de ponto flutuante que o Swift possa adicionar no futuro, tais como Float16 or Float128. Os outros dois protocolos mencionados acima são usados ​​para particionar funções que são fáceis de estender para campos numéricos mais gerais que números reais e aqueles que não são. O último grupo inclui funções como exp2 e exp10, gamma, logGamma, e vários outros.

Complex são construídos no topo do Real:

public struct Complex<RealType> where RealType: Real {
  ...
}

É possível realizar as operações de cálculo mais básicos em números complexos usando a sintaxe:

import Complex

// Declare a complex number:
let z: Complex<Double> = 2 + 3 * .i

print(z)           // (2.0, 3.0)
print(z.real)      // 2.0
print(z.imaginary) // 3.0

let w = Complex<Double>(1, -2.5)

let zz = z + zz

let p = z * Complex(0, 2.5)

De acordo com Cannon, o Swift Numerics fornece grande performance em comparação com o C. Isso se deve basicamente à simplificação na manipulação dos zeros e NaNs. Enquanto o C (e C++) tende em distinguir diferente tipos de zeros e NaNs, o Swift Numerics opta por perder um pouco da informação em favor da simplificação do código, o que reduz a sobrecarga do programador para manter as coisas seguras e corretas e gera uma aceleração significativa.

Como última nota, o Swift Numerics contínua em ativo desenvolvimento e mais tipos serão adicionados no futuro, incluindo o Float16, inteiros de tamanho fixo maiores que 64 bits, o ShapedArray protocol para representar dados homogêneos multidimensionais, e outros.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT