Welche Parallelitätsmechanismen werden von Raku bereitgestellt und wie können sie bewertet werden? [geschlossen]
Ich bin ein Student, der derzeit an meiner Dissertation über Raku arbeitet, für die ich mich entschlossen habe zu bewerten, ob Raku (Perl 6) eine gute Sprache ist, wenn es um hohe Parallelität geht.
Ich konnte bis auf die offizielle Website keine Artikel über Rakus Parallelität finden. Außerdem habe ich keine Ahnung, wie ich die Parallelität von Raku bewerten soll (z. B. welches Programm ich verwenden soll, welche Sprache mit Raku verglichen werden soll usw.).
Welche Parallelitätsmechanismen bietet Raku? Wo sind diese dokumentiert? Wie können ihre Funktionalität und Leistung bewertet werden?
Antworten
Raku bietet eine Reihe verschiedener Parallelitätsmechanismen (und darüber hinaus auch eine Reihe paralleler Programmieransätze, aber ich gehe davon aus, dass es sich bei der Frage wirklich nur um Parallelität handelt). Der Großteil dessen, was in Raku ist, kann in anderen Sprachen gefunden werden; beispielsweise:
- Der
gather
/take
Mechanismus zur trägen Erzeugung von Werten. Dies wird in verschiedenen Sprachen als Generatorfunktionen angesehen. In Raku gibt es jedoch kein einziges Stack-Frame-Limit, daher sind sie Coroutine-mächtig. (Dies ist in keinem Zusammenhang mit asynchroner Programmierung der Fall, entspricht jedoch der Definition der Parallelität.) - Der
Promise
Mechanismus zum Übermitteln eines einzelnen Ergebnisses einer asynchronen Operation ähneltPromise
s in JavaScript oderTask
in .Net (die Semantik ist der letzteren etwas näher). - A
Supply
ist ein Strom von asynchronen Werten. Es hat einiges mit den reaktiven Erweiterungen (Rx) gemeinsam , hat jedoch eine Benennung und API ausgewählt, die zum gesamten Raku-Sprachdesign passt (z. B. stimmen Methodennamen mit ihren synchronen Duals in Sequenzen überein). - A
Channel
ist eine gleichzeitige Warteschlange, die über einen Mechanismus verfügt, der die Vervollständigung und den Fehler übermittelt. Dies bedeutet, dass Sie problemlos zwischen den ParadigmenSupply
und wechseln könnenChannel
. Der Hauptunterschied besteht darin, dass einChannel
Speicher vorhanden ist - Sie können Werte in ihn einfügen und sofort etwas anderes tun -, während Sie, wenn Sie einen Wert in einen ausgebenSupply
, die Verarbeitungskosten bezahlen (indem Sie einen Gegendruckmechanismus angeben). MitChannel
s können verschiedene Architekturen erstellt werden , z. B. eine inszenierte ereignisgesteuerte Architektur .
Das auffälligste Konzept in Raku, die nicht direkt in anderen Sprachen nicht vorhanden ist , ist die react
/ supply
/ whenever
Konstrukt. Das Schreiben von Prozessoren für mehrere asynchrone Streams ist häufig eine Herausforderung (Abonnementverwaltung, Parallelitätskontrolle). Das Konstrukt bietet einen strukturierten Programmieransatz. Darüber hinaus geht es hauptsächlich darum, dass die Sprachintegration in Raku etwas stärker ist, anstatt diese Dinge nur als Bibliotheken zu behandeln.
Wie andere angemerkt haben, gibt es noch nicht viel in Bezug auf formelle Papiere. Diese Folien können jedoch von Interesse sein (Haftungsausschluss: Sie gehören mir; ich habe zum Raku-Parallelitätsdesign beigetragen und react
/ supply
/ erfunden whenever
).
- 8 Möglichkeiten zur Parallelität und Parallelität in Perl 6
- Verstehen, reagieren, liefern und wann immer
- Inside Perl 6 Parallelität - Einblicke in die Implementierung
Artikel über Rakus Parallelität : Wenn Sie beschreiben möchten, wie Parallelität funktioniert, sind mir keine wissenschaftlichen Artikel bekannt. Sie können in einigen Adventskalender-Veröffentlichungen nachschlagen, beispielsweise in dieser über die Parallelität auf HTTP-Servern . Die meisten Bücher über Raku, wie meine eigenen Raku-Rezepte (veröffentlicht von Apress), enthalten ein Kapitel über Parallelität. Schließlich verwendet dieses von mir mitverfasste Papier Rakus Parallelität für evolutionäre Berechnungen, um gute Ergebnisse zu erzielen.
So bewerten Sie die Parallelität von Raku: * Raku verwendet kommunizierende sequentielle Prozesse und Kanäle als erstklassige Objekte. In diesem Sinne ist es ähnlich wie Go . Auf der anderen Seite ist es möglich, Datenflüsse über Hyper / Race automatisch zu fädeln, genauso wie Julia es über Makros tut. Das könnten also zwei Vergleichsziele sein.
Vielleicht ist die Mailingliste der Perl6-Benutzer ein besserer Ort, um Fragen wie diese zu stellen.
Der in Raku integrierte CSP ist ein etabliertes Parallelitätsmodell, das von Tony (Anthony) Hoare entwickelt wurde. Vielleicht möchten Sie auch nach Arbeiten von Bill (William) Roscoe suchen, die Tonys Forschungslinie fortsetzen. Beachten Sie, dass dies allgemeine CSP-Forschung sein wird. Ich bezweifle, dass es irgendetwas gibt, auf das Bezug genommen werden kann, das speziell für Raku gemacht wurde.