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.

Foi útil?

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

Raquete tem futuros que fazer algo muito semelhante a esta, e também vai ter uma segunda abordagem para o paralelismo em um futuro próximo (que será chamado de "lugares").

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top