Gibt es Clojure-ähnliche STM-Bibliotheken für C?

9

Gibt es irgendwelche Bibliotheken, die ref s, atom s und agent s zu C-Code bringen?

Gibt es auch Strukturbibliotheken, die C begleiten kann?

    
Vi. 21.01.2013, 03:20
quelle

1 Antwort

5

Zu meiner Kenntnis nein.

Selbst wenn es da wäre, IMHO wäre es nicht besonders gut für C-Code geeignet:

  • Diese Ansätze hängen stark von der JVM ab, um Speicherverwaltung und Garbage Collection bereitzustellen. Strukturelle Freigabe impliziert insbesondere, dass Sie nicht leicht bestimmen können, wer noch einen bestimmten Block einer Datenstruktur verwendet. Sie möchten also, dass der automatische GC dies aufhebt, wenn der letzte Verweis auf eine Strukturkomponente verschwindet.
  • Der Nutzen der STM-Konstrukte liegt wirklich in gleichzeitigen Situationen . Es ist viel schwieriger, in C guten gleichzeitigen Code zu schreiben als in einer JVM-Sprache, in der die Threading-Unterstützung überall und plattformübergreifend konsistenter ist.
  • Zumindest in der Art, wie sie in Clojure verwendet werden, sind die STM-Konstrukte so konzipiert, dass sie in einer funktionalen Programmiersprache verwendet werden können (dh eine Sprache, in der Funktionen rein sind, wo Sie normalerweise komponieren) Funktionen und Daten höherer Ordnung sind unveränderlich). z.B. Die Funktion swap! zum Aktualisieren eines Atoms ist selbst eine Funktion höherer Ordnung.

Ich sage zwar nicht, dass Sie in C keinen funktionalen STM-Code schreiben können, wenn Sie genug bestimmt sind ... aber es passt nicht, und Sie würden wahrscheinlich irgendwann etwas wie Lisp neu erfinden . Ich erinnere mich an Greenspuns zehnte Programmierregel:

  

Jedes hinreichend komplizierte C- oder Fortran-Programm enthält eine Ad-hoc-Mitteilung,   informell spezifizierte, fehlerbehaftete, langsame Implementierung der Hälfte von   Common Lisp.

Verwenden Sie im Grunde das richtige Werkzeug für den Job: -)

    
mikera 21.01.2013, 04:15
quelle

Tags und Links