ライブラリ
- ビルトイン (345)
-
cgi
/ session (12) - date (12)
- digest (12)
- getoptlong (12)
- json (12)
- monitor (12)
-
net
/ http (24) -
net
/ protocol (24) - optparse (12)
- pathname (12)
- pstore (12)
- psych (36)
- rexml (12)
-
rexml
/ document (108) -
ripper
/ filter (12) - stringio (12)
- strscan (12)
- thread (6)
- win32ole (36)
- zlib (12)
キーワード
- Base (12)
- BasicObject (12)
- Comment (12)
- CompatibilityError (12)
- ConditionVariable (12)
- ConverterNotFoundError (12)
- Data (9)
- Date (12)
- Default (12)
- EXXX (12)
- Entity (12)
- Enumerator (12)
- ExternalEntity (12)
- Fiber (12)
- Filter (12)
- Float (12)
- FrozenError (8)
- GetoptLong (12)
- GzipWriter (12)
- HTTPRequest (12)
- HTTPServerException (12)
- Instruction (12)
- InstructionSequence (12)
- InvalidByteSequenceError (12)
- Lazy (12)
- Location (12)
- MemoryStore (12)
- Method (12)
- Monitor (12)
- Node (7)
- NotImplementedError (12)
- NotationDecl (12)
- OptionParser (12)
- PStore (12)
- ParseException (12)
- Pathname (12)
- Pretty (12)
- ProtoCommandError (12)
- ProtoSyntaxError (12)
- Queue (12)
- Rational (12)
- ScriptError (12)
- Set (3)
- SizedQueue (12)
- Stat (12)
- State (12)
- Stream (12)
- String (12)
- StringIO (12)
- StringScanner (12)
- SystemCallError (12)
- SystemExit (12)
- Text (12)
- Thread (12)
- Time (12)
- TracePoint (12)
- Transitive (12)
- TreeBuilder (12)
- UnboundMethod (12)
-
WIN32OLE
_ EVENT (12) -
WIN32OLE
_ TYPE (12) -
WIN32OLE
_ VARIANT (12) - YAMLTree (12)
- fatal (12)
検索結果
-
Thread (6031.0)
-
スレッドを表すクラスです。スレッドとはメモリ空間を共有して同時に実行される制御の流れです。 Thread を使うことで並行プログラミングが可能になります。
...同時に実行される制御の流れです。
Thread を使うことで並行プログラミングが可能になります。
=== 実装
ネイティブスレッドを用いて実装されていますが、
現在の実装では Ruby VM は Giant VM lock (GVL) を有しており、同時に実......できるので、複数のスレッドを
同時に実行するような拡張ライブラリは作成可能です。
=== スケジューリング
Ruby のスレッドスケジューリングはネイティブスレッドのそれを利用しています。
よって詳細はプラットフォー......ption] 例外発生時のスレッドの振る舞い
あるスレッドで例外が発生し、そのスレッド内で rescue で捕捉されなかっ
た場合、通常はそのスレッドだけがなにも警告なしに終了されます。ただ
しその例外で終了するスレッドを T... -
Thread
:: ConditionVariable (6031.0) -
スレッドの同期機構の一つである状態変数を実現するクラスです。
...の一つである状態変数を実現するクラスです。
以下も ConditionVariable を理解するのに参考になります。
https://ruby-doc.com/docs/ProgrammingRuby/html/tut_threads.html#UF
=== Condition Variable とは
あるスレッド A が排他領域で動いていたとし......も空くことはありません。
以上のような状況を解決するのが Condition Variable です。
スレッド a で条件(リソースが空いているかなど)が満たされるまで wait メソッドで
スレッドを止めます。他のスレッド b において条件が満......場合に Condition Variable を使って wait しています。
require 'thread'
class TinyQueue
def initialize(max=2)
@max = max
@full = ConditionVariable.new
@empty = ConditionVariable.new
@mutex = Mutex.new
@q = []
end
def count
@q.size... -
Method (6025.0)
-
Object#method によりオブジェクト化され たメソッドオブジェクトのクラスです。
...Object#method によりオブジェクト化され
たメソッドオブジェクトのクラスです。
メソッドの実体(名前でなく)とレシーバの組を封入します。
Proc オブジェクトと違ってコンテキストを保持しません。
=== Proc との差
Method......Method は何度も繰り返し生成する
場合に向くと言えます。また内包するコードの大きさという点では
Proc は小規模、Method は大規模コードに向くと言えます。
既存のメソッドを Method オブジェクト化する。
//emlist[例][ruby]{
cl......と良い。
//emlist[例][ruby]{
pr = Proc.new {|arg|
"proc called with arg #{arg}"
}
p pr # => #<Proc:0x401b1fcc>
p pr.call(1) # => "proc called with arg 1"
//}
Method オブジェクトが有用なのは以下のような場合。
//emlist[例][ruby]{
class Foo
def foo() "fo... -
TracePoint (6025.0)
-
Kernel.#set_trace_func と同様の機能をオブジェクト指向的な API で 提供するクラスです。
...#set_trace_func と同様の機能をオブジェクト指向的な API で
提供するクラスです。
//emlist[例:例外に関する情報を収集する][ruby]{
trace = TracePoint.new(:raise) do |tp|
p [tp.lineno, tp.event, tp.raised_exception]
end
# => #<TracePoint:0x007f786a452448>
trac......divided by 0>]
//}
TracePoint.new または、TracePoint.trace で指定したブロック
は、メソッドの引数(上記の例では :raise)に対応するイベントが発生した時に
呼び出されます。
発生するイベントの詳細については、TracePoint.new を参照し......* Ruby VM アドベントカレンダー #12 TracePoint の紹介 (1): https://www.atdot.net/~ko1/diary/201212.html#d12
* Ruby VM アドベントカレンダー #13 TracePoint の紹介 (2): https://www.atdot.net/~ko1/diary/201212.html#d13
* Ruby VM アドベントカレンダー #14 TracePoint... -
BasicObject (6023.0)
-
特殊な用途のために意図的にほとんど何も定義されていないクラスです。 Objectクラスの親にあたります。Ruby 1.9 以降で導入されました。
...義されていないクラスです。
Objectクラスの親にあたります。Ruby 1.9 以降で導入されました。
=== 性質
BasicObject クラスは Object クラスからほとんどのメソッドを取り除いたクラスです。
Object クラスは様々な便利なメソッド......これに対して、 BasicObject クラスはオブジェクトの同一性を識別したりメソッドを呼んだりする
最低限の機能の他は一切の機能を持っていません。
=== 用途
基本的にはほぼすべてのクラスの親は Object と考えて差し支えあり......ect から派生
して問題を解決できます。
=== 注意
通常のクラスは Object またはその他の適切なクラスから派生すべきです。
真に必要な場合にだけ BasicObject から派生してください。
=== 例
//emlist[例][ruby]{
class Proxy < BasicObject... -
Data (6023.0)
-
このクラスは Ruby 3.0 で削除されました。
...このクラスは Ruby 3.0 で削除されました。
拡張ライブラリを書く時に new が定義されているとまずい場合が
あるため、Object から new と allocate を undef したクラスです。
Ruby スクリプトレベルでは気にする必要は全くありませ......「値オブジェクト(value object)」の定義に利用できるクラスです。
以下のような特徴があります。
* オブジェクト同士の比較は、型の比較およびメンバの値の比較によって行われます。
* オブジェクトはイミュータブルに......ta.define でオブジェクトのクラスを定義できます。定義されたクラスは Data のサブクラスとなります。
Data のサブクラスでは、メンバに対するアクセスメソッドが定義されています。
Data と似たクラスに Struct があります。St......ruct はメンバの書き換えや列挙が可能であるなど、
よりコンテナ風の API を提供するクラスです。
//emlist[例][ruby]{
# Dogクラスを定義
Dog = Data.define(:name, :age)
# Dogクラスのインスタンスを作成
fred = Dog.new("Fred", 5)
# メンバにア... -
Enumerator (6019.0)
-
each 以外のメソッドにも Enumerable の機能を提供するためのラッパークラスです。 また、外部イテレータとしても使えます。
...れます。
Enumerator を介することにより String#each_byte のような
異なる名前のイテレータについても each と同様に Enumerable の機能を利用できます。
Enumerator を生成するには Enumerator.newあるいは
Object#to_enum, Object#enum_for を利用し......merator を生成して返します。
=== 注意
外部イテレータとしての機能は Fiber を用いて実装されているため Fiber と同じ制限があります。
例えば以下のようなスレッドをまたいだ呼び出しはエラーになります。
//emlist[例][ruby]{
a......= nil
Thread.new do
a = [1, 2, 3].each
a.next
end.join
p a.next
#=> t.rb:7:in `next': fiber called across threads (FiberError)
# from t.rb:7:in `<main>'
//}... -
Monitor (6019.0)
-
スレッドの同期機構としてのモニター機能を提供するクラスです。 また同じスレッドから何度も lock できる Mutex としての機能も提供します。
...る Mutex としての機能も提供します。
MonitorMixin を include し、いくつかの別名を定義したクラスです。
=== 例
//emlist[消費者、生産者問題の例][ruby]{
require 'monitor'
buf = []
mon = Monitor.new
empty_cond = mon.new_cond
# consumer
Thread.start do......ronize do
empty_cond.wait_while { buf.empty? }
print buf.shift
end
end
end
# producer
while line = ARGF.gets
mon.synchronize do
buf.push(line)
empty_cond.signal
end
end
//}
2回ロックしてもデッドロックにならない例です。
//emlist[デッドロッ......[ruby]{
require 'monitor'
mon = Monitor.new
mon.synchronize {
mon.synchronize {
}
}
//}
Thread::Mutex ではデッドロックになります。
//emlist[Mutex でデッドロックになる例][ruby]{
mx = Mutex.new
mx.synchronize {
mx.synchronize {
}
}
# => deadlock; recursive locking (T... -
Time (6019.0)
-
時刻を表すクラスです。
...ラスです。
Time.now は現在の時刻を返します。
File.mtime などが返すファイルのタイムスタンプは Time
オブジェクトです。
Time オブジェクトは時刻を起算時からの経過秒数で保持しています。
起算時は協定世界時(UTC、もしく......の旧称から GMT とも表記されます) の
1970年1月1日午前0時です。なお、うるう秒を勘定するかどうかはシステムに
よります。
Time オブジェクトが格納可能な時刻の範囲は環境によって異なっていましたが、
Ruby 1.9.2 からは OS......た、Time オブジェクトは協定世界時と地方時のどちらのタイムゾー
ンを使用するかのフラグを内部に保持しています。
タイムゾーンのフラグは Marshal データに保持されます。
//emlist[][ruby]{
p Marshal.load(Marshal.dump(Time.now.gmtime))... -
GetoptLong (6017.0)
-
GNU getopt_long() を Ruby で模したクラスです。
...GNU getopt_long() を Ruby で模したクラスです。...