Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Methode
exchange
verwendet und an die Methode
wait
der Bedingungs-Variable übergeben. Das andere
Mutex
dient dazu, herauszufinden, ob der aufrufende Thread der erste oder zweite Thread ist, der
exchange
aufruft. Statt bei diesem
Mutex
die Methode
lock
zu nutzen, verwendet diese Klasse die nicht blockierende Methode
try_lock
. Wenn
@first.try_lock
den Wert
true
zurückgibt, ist der aufrufende Thread der erste Thread. Ansonsten handelt es sich um den zweiten Thread:
require 'thread'
class Exchanger
def initialize
    # Diese Variablen enthalten die beiden auszutauschenden Werte.
    @first_value = @second_value = nil
    # Dieses Mutex schützt den Zugriff auf die Methode exchange.
    @lock = Mutex.new
    # Dieses Mutex ermöglicht uns herauszufinden, ob der erste oder der zweite
    # Thread die Methode exchange aufruft.
    @first = Mutex.new
    # Diese ConditionVariable lässt den ersten Thread auf die Ankunft des
    # zweiten Threads warten.
    @second = ConditionVariable.new
end

# Tausche diesen Wert gegen den Wert des anderen Threads aus.
def exchange(value)
    @lock.synchronize do # Nur ein Thread kann diese Methode gleichzeitig aufrufen
     if @first.try_lock # Wir sind der erste Thread
     @first_value = value # Speichere das Argument des ersten Threads
     # Jetzt warte, bis der zweite Thread ankommt.
     # Damit wird das Mutex temporär entsperrt, während wir warten, so
     # dass der zweite Thread diese Methode auch aufrufen kann.
     @second.wait(@lock) # Auf den zweiten Thread warten
     @first.unlock # Auf das nächste exchange warten
     @second_value # Den Wert des zweiten Threads zurückgeben
     else # Ansonsten sind wir der zweite Thread
     @second_value = value # Speichere den zweiten Wert
     @second.signal # Dem ersten Thread mitteilen, dass wir da sind
     @first_value # Gib den Wert des ersten Threads zurück
     end
    end
end
end
    ----
    [ 32 ] JavaScript-Programmierer sollten beachten, dass die Ruby-Klasse ein kleines e hat – anders als die JavaScript-Klasse
RegExp
.

Kapitel 10. Die Ruby-Umgebung
    Dieses Kapitel ist ein Rundumschlag mit Ruby-Programmiertipps, die noch nicht an anderen Stellen besprochen wurden. Die meisten der hier behandelten Features haben mit der Schnittstelle zwischen Ruby und dem Betriebssystem zu tun, auf dem die Sprache läuft. Daher sind einige dieser Features OS-abhängig. Entsprechend sind auch viele dieser Features implementierungsabhängig: Nicht jeder Ruby-Interpreter implementiert sie auf dieselbe Weise. Zu den behandelten Themen gehören:
    Die Kommandozeilenargumente und Umgebungsvariablen des Ruby-Interpreters.
Die oberste Ausführungsebene: globale Funktionen, Variablen und Konstanten.
Kürzel für Textverarbeitungsskripten: globale Funktionen, Variablen und Interpreter-Optionen, normalerweise inspiriert durch die Programmiersprache Perl, die es möglich machen, kurze, aber leistungsfähige Ruby-Programme zur Verarbeitung von Textdateien zu schreiben.
Betriebssystemkommandos: die Ausführung von Shell-Befehlen und der Aufruf ausführbarer Programme im zugrunde liegenden Betriebssystem. Dies sind Features, die den Einsatz als Scripting- oder »Kleister«-Sprache ermöglichen.
Sicherheit: Wie man das Risiko von SQL-Injection und ähnlichen Attacken mit Rubys Tainting-Mechanismus reduziert und nicht vertrauenswürdigen Ruby-Code mit
$SAFE
-Ausführungslevels in einer Sandbox ausführt.

10.1 Den Ruby-Interpreter aufrufen
    Die C-basierte Ruby-Standardimplementierung wird von der Kommandozeile wie folgt aufgerufen:
ruby [
Optionen
] [--]
Programm
[
Argumente
]
    Optionen
sind null oder mehr Kommandozeilenargumente, die die Ausführung des Interpreters beeinflussen. Die zulässigen Argumente werden gleich beschrieben.
    Programm
ist der Name der Datei, die das auszuführende Ruby-Programm enthält. Wenn der Name des Programms mit einem Bindestrich beginnt, stellen Sie ihm
--
voran, um zu erzwingen, das er als Programmname und nicht als Option behandelt wird. Wenn Sie einen einzelnen Bindestrich als Programmnamen verwenden oder
Programm
und
Argumente
ganz weglassen, liest der Interpreter Programmtext von der Standardeingabe.
    Argumente
schließlich sind beliebig viele zusätzliche Token auf der Kommandozeile. Diese Token werden zu den Elementen des Array
ARGV
.
    Die nachfolgenden Unterabschnitte beschreiben die von der C-basierten Ruby-Standardimplementierung unterstützten Optionen. Beachten Sie, dass Sie die Umgebungsvariable
RUBYOPT
setzen können, die beliebig viele der

Weitere Kostenlose Bücher