Question

existe-t-il une implémentation de schéma R5RS-ou plus qui fait la parallélisation?Par exemple, si je dis à faire:

(map (lambda (x) 
        (pure-functional-stuff x))
     '(1 3 5 7 11 13))

Il traitera simultanément 1, 3, 5 et 7 si la machine peut le faire?C'est censé être l'un des grands avantages de la programmation fonctionnelle, mais je ne trouve pas de système maintenu et à jour qui le fait.J'en vais bien avec un qui ne le parleurait pas à moins d'affirmer que la fonction n'a pas d'effets secondaires.

Était-ce utile?

La solution

Je suis un développeur de Schemik et je pense que c'est le programme que vous recherchez.Le projet est toujours développé et maintenu.Au début de cette année, j'ai publié une version qui améliore la compatibilité avec R5RS.Malheureusement, Schemik est un projet de recherche axé sur le processus d'évaluation d'expression, sa bibliothèque standard est donc relativement faible.Y a-t-il une fonctionnalité particulière dans Schemik?

Autres conseils

Raquette a Futures qui fait quelque chose de très similaire à cela et aura également une deuxième approche pour le parallélisme dans un proche avenir (qui s'appellera" des lieux ").

Il s'avère que vous ne voulez pas vraiment que le compilateur tente de paralléser tout parce que vous finissez par perdre du temps des efforts de coordination même lorsque vous faites quelque chose de simple,

(map add1 '(1 2 3))

Ce serait plus rapide de faire juste sur un fil.Cependant, de nombreuses langues fonctionnelles ces jours-ci vous permettent de faire ce parallèle lorsque "Add1" est en réalité "Computation vraiment longue".Chaque langue a sa propre approche, mais je recommanderais de tirer parti de plusieurs noyaux de raquette en utilisant des contrats à terme.

tandis que le compilateur décidant automatiquement pour vous est bien, ce n'est pas un mauvais compromis de changer une "carte" à un "PMAP" où vous pensez que cela pourrait aider plutôt que de faire face aux ralentissements d'autres endroits car le compilateur était trop ambitieux.

quelque chose d'aussi basique que

(define (pmap f xs)
  (map touch (map (λ(x) (future (λ() (f x)))) xs)))

Peut vous obtenir assez loin lorsqu'il est utilisé judicieusement, mais vous devriez expérimenter de choisir vos données pour vous nourrir de files parallèles.

Je viens de trouver Schemik

http://schemik.sourceforge.net/

qui semble être maintenu au moins 2009, bien que je ne sache pas si c'est R5RS.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top