Programação funcional multithread no Swift
Ultimamente, tenho manipulado matrizes de bytes no Swift 2.1, e frequentemente me pego escrevendo código assim:
// code to add functions to a [UInt8] object
extension CollectionType where Generator.Element == UInt8 {
func xor(with byte: UInt8) -> [UInt8] {
return map { $0 ^ byte }
}
}
// example usage: [67, 108].xor(with: 0) == [67, 108]
Existe uma maneira fácil de paralelizar issomap
para que vários threads possam operar em áreas não sobrepostas da matriz ao mesmo tempo?
Eu poderia escrever código para dividir manualmente a matriz em sub-matrizes e chamarmap
em cada sub-matriz em segmentos distintos. Mas eu me pergunto se existe alguma estrutura no Swift para fazer a divisão automaticamente, já quemap
é uma chamada funcional que pode funcionar em um ambiente seguro para threads sem efeitos colaterais.
Notas esclarecedoras:
O código só precisa funcionar em um[UInt8]
objeto, não necessariamente todoCollectionType
.Estou escrevendo este código apenas para aprender Swift, não para qualquer tipo de entrada do mundo real. Afinal, o xor roda extremamente rapidamente sem nenhum tipo de paralelismo necessário.Se for absolutamente necessário, a função acima pode ser vista no contextoaqui, onde é usado para resolver o Conjunto 1, Desafio 3 doDesafios da Matasano Crypto.