Existe um Esquema de implementação que parallelizes?
Pergunta
Há um R5RS ou superior Esquema de implementação que não paralelização?Por exemplo, se eu disser para o fazer:
(map (lambda (x)
(pure-functional-stuff x))
'(1 3 5 7 11 13))
ele irá processo 1, 3, 5, e 7, simultaneamente, se a máquina pode fazer isso?Que é suposto para ser uma das grandes vantagens de programação funcional, mas eu não consigo encontrar um mantida, up-to-date Esquema que faz.Eu estaria bem com um que não iria colocar em paralelo que se eu afirmar que a função não tem efeitos colaterais.
Solução
Eu sou um desenvolvedor de Schemik e eu acho que é o Esquema que você está procurando.O projeto ainda está sendo desenvolvido e mantido.No início deste ano, eu lançou uma versão que melhora a compatibilidade com R5RS.Infelizmente, Schemik é um projeto de pesquisa focada no processo de avaliação de expressão, assim, a sua biblioteca padrão ainda é relativamente pequena.Existe alguma funcionalidade que você pode perder em Schemik?
Outras dicas
Acontece que você não quer realmente que o compilador tenta colocar em paralelo tudo porque, então, você acaba de perder tempo a coordenação de esforços, mesmo quando fazendo algo simples, como,
(map add1 '(1 2 3))
que seria mais rápido para fazer em um thread.No entanto, muitos funcional línguas estes dias torná-lo fácil para você fazer esse paralelo ao "add1" é, na verdade, "mesmo-tempo-cálculo".Cada língua tem a sua própria abordagem, mas eu recomendo tirar proveito dos múltiplos núcleos em Raquete usando futuros.
Enquanto o compilador de decidir as coisas automaticamente para você é bom, não é uma má solução de compromisso para alterar um "mapa" para um "pmap" onde você acha que ele pode ajudar, em vez de lidar com lentidão em outros lugares porque o compilador não era muito ambiciosa.
Algo tão básico como
(define (pmap f xs)
(map touch (map (λ(x) (future (λ() (f x)))) xs)))
pode chegar muito longe, quando usado racionalmente, mas você deve experimentar com o agrupamento backup de seus dados para alimentação de threads paralelas.
Eu só encontrei Schemik
http://schemik.sourceforge.net/
o que parece ser mantidos, pelo menos, 2009, embora eu não sei se é R5RS.