Ruby C Erweiterung und flüchtig

Als ich eine Erweiterung von Ruby in C-Sprache schrieb, bemerkte ich das Schlüsselwort "volatile".

Was ist "flüchtig"?

volatile wird normalerweise nicht erledigt, selbst wenn Sie in C oder C ++ programmieren. Diese beziehen sich grundsätzlich auf die Interaktion mit ** außerhalb des Programms **. Einfach ausgedrückt bedeutet dies, dass "das Lesen und Schreiben mit" flüchtig "zum Ziel genau so ausgeführt wird, wie es im Programm geschrieben ist." Mit anderen Worten, um Optimierungen wie "Ich schreibe viele Male hintereinander, also mache ich es nur das letzte Mal" oder "Ich lese, ohne etwas im Code zu ändern, also schneide ich das Lesen ab" zu verhindern. Werden. das ist,

Es ist ein praktischer Mechanismus für die Handhabung (Es gibt auch ausführlicheren Artikel).

Ruby hat jedoch keinen direkten Zugriff auf die Hardware. Wenn ja, bedeutet es "externe Arbeit", aber was ist das?

Über Rubys Müllsammler

Ruby verfügt über einen Garbage Collector, der auf der Basisstufe C implementiert ist. Und dieser Garbage Collector wird kein Garbage Collector sein, indem einfach das Handle [^ 1] VALUE des Ruby-Objekts in das Register oder den Stapel gelegt wird, nicht nur in einem speziellen Bereich.

Wenn der Speicherplatz jedoch nicht als Variable verwendet wird, ist dies ebenfalls nutzlos. Daher wird "volatile VALUE" häufig angezeigt, um Sie zu zwingen, Speicherplatz als Variable zu reservieren.

Noch fehlende Szenen

Es gibt jedoch noch einige Teile, die nicht abgedeckt werden können. Normalerweise gibt es kein Problem, da VALUE herumgeleitet wird, aber wenn Sie den Zeiger des Inhalts mit einer Zeichenfolge usw. herausnehmen und nur diesen verwenden, nach dem letzten Verweis auf VALUE (in C-Sprache) ) Die Variable "VALUE" kann unnötig werden und von etwas anderem überschrieben werden und dem Garbage Collector zum Opfer fallen (Beispiel. /2012/04/ruby-garbage-collection-exerb-ruby.html)). In einem solchen Fall schreiben Sie "RB_GC_GUARD (VALUE-Variable)" nach dem Teil, der "VALUE" benötigt, damit "VALUE" bis zu diesem Punkt überleben kann [^ 2].

Zusammenfassung

Selbst in der Welt der C-Erweiterung lebt die "Leichtigkeit des Schreibens" als Idee von Ruby noch, aber ich denke, dass der Konflikt mit der Dunkelheit der C-Sprache auch ein unbestreitbarer Aspekt ist.

[^ 1]: Es gibt einige Dinge wie "Fixnum", "nil", "false", "true", die es als direkten Wert anstelle eines Handles behandeln. [^ 2]: Der Inhalt von "RB_GC_GUARD" umfasst "Übergeben von" VALUE "an eine Funktion, deren Optimierung durch eine compilerspezifische Notation unterdrückt wird" und "Schreiben von" VALUE "an eine" flüchtige "externe Variable". Es war.

Recommended Posts

Ruby C Erweiterung und flüchtig
[Tutorial] [Ruby] Erstellen und Debuggen von C-nativen Erweiterungsedelsteinen
Rubin und Edelstein
Ich habe eine Ruby-Erweiterungsbibliothek in C erstellt
Symbole und zerstörerischer Rubin
[Ruby] Big Decimal und DECIMAL
Ruby-Klassen und -Instanzen
Ruby-Vererbung und -Delegierung
Lösen mit Ruby, Perl und Java AtCoder ABC 128 C.
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
Secret Note 104 von Mathematical Girl, implementiert in Ruby und C.
Ruby-Syntaxfehler und Gegenmaßnahmen
Verwenden Sie das C-Programm von Ruby
Über Ruby-Hashes und -Symbole
Fassen Sie Ruby und Dependency Injection zusammen
Über Ruby und Objektmodell
[Ruby] Singuläre Methoden und singuläre Klassen
Informationen zu Ruby-Klassen und -Instanzen
Ruby-Methoden und -Klassen (grundlegend)
Erstellen von Ruby-Klassen und -Instanzen
C # und Java überschreiben Story
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 1)
Offline-Echtzeit zum Schreiben eines F03-Ruby- und C-Implementierungsbeispiels
AtCoder ARC 081 C-Hash, der in Ruby, Perl und Java gelöst werden muss
[Ruby] Unterschied zwischen get und post
Schreiben Sie Ruby-Methoden mit C (Teil 1)
[Ruby] Unterschied zwischen is_a? Und instance_of?
Ruby-Standardeingabe und verschiedene Methoden
Über Ruby einfache Anführungszeichen und doppelte Anführungszeichen
CGI in C und Dart: Einführung (1)
[Ruby-Grundlagen] Split-Methode und to_s-Methode
Informationen zum Ruby-Produktoperator (&) und zum Summenoperator (|)
Schreiben Sie Schlüssel und Werte in Ruby
Upgrade der Ruby- und Rails-Version des Projekts
Über objektorientierte Vererbung und über Ertrag Ruby
Mit Java verschlüsseln und mit C # entschlüsseln
[Ruby / Refactoring] Von der iterativen Ruby-Verarbeitung wie Java und C bis zur Ruby-ähnlichen iterativen Verarbeitung
AtCoder ABC 111 C Hash-Sortierung In Ruby, Perl und Java gelöst
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 2) Dynamische Planungsmethode