ようへいの日々精進XP

よかろうもん

2018 年 07 月 18 日 (水)

ジョギング

  • 香椎浜 x 2 周
  • 終業後, 涼しい時間帯で走った
  • 涼しいのでいい感じではしれた気がする

日課

  • お休み
  • 時間の使い方を工夫せねば

ギョーム

  • 勝手に師匠と呼んでいるもりけんさんに色々と教えてもらいながら, 実装を追加したり, ユニットテストを追加したり
  • 識者の皆さんにとっては, 些細なことなのかもしれないけど, 自分にとってはすごく勉強になったし, もっと努力せねばと思った次第

今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (8) 組み込みライブラリ (1) ~

irb に動作確認環境は以下の通り.

$ ruby --version
ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux]
$ irb --version
irb 0.9.6(09/06/30)

組み込みライブラリ (1)

Q50. 以下のコードを実行するとどうなるか. 全て選べ.

t1 = Thread.start do
  raise ThreadError
end

loop {
    n = rand(0..3)
    puts n
    if n == 0
        break
    end
}

以下, 解答.

  1. 例外が発生するが, メッセージを出力せずに停止状態になる
  2. -d オプションを付けた場合, 例外発生のメッセージを出力して終了する

以下, スクリプトで確認.

# 例外が発生したスレッドだけが警告無しで終了して, 以後の処理は継続される
$ ruby thread_exception.rb 
2
0

以下, -d オプションを付与して実行.

# 何れかのスレッドで例外が発生した時点でインタプリタ全体が中断する
$ ruby -d thread_exception.rb 
... 略
Exception `ThreadError' at thread_exception.rb:2 - ThreadError
Exception `ThreadError' at thread_exception.rb:5 - ThreadError
thread_exception.rb:2:in `block in <main>': ThreadError (ThreadError)

以下, 解説より抜粋.

  • マルチスレッドで例外が発生し, 例外が rescue で処理されなかった場合, 例外が発生したスレッドだけが警告無しで終了し, 他のスレッドは実行を続ける
  • -d オプションを付けるとデバッグモードでの実行となり, 何れかのスレッドで例外が発生した時点でインタプリタ全体が中断する

組み込みライブラリ (2)

Q49. Kernel モジュールの loadrequire について, 適切な記述を選べ.

以下, 選択肢.

  1. load はバイナリエクステンションもロード出来る
  2. load は拡張子無しのライブラリ名を渡す
  3. require は同じファイルを複数回ロードすることを防ごうとする
  4. require はバイナリエクステンションはロード出来ない

以下, 解答.

  1. require は同じファイルを複数回ロードすることを防ごうとする

以下, 解説より抜粋.

  • load は同じライブラリを複数回ロードする
  • require は同じファイルを一度だけロードする
  • load はバイナリエクステンションはロード出来ない
  • require はバイナリエクステンションもロードし, .rb.so 等の拡張子も補完する

組み込みライブラリ (3)

Q47. オブジェクトのマーシャリングについて, 適切な記述を全て選べ

以下, 選択肢.

  1. IO クラスのオブジェクトはマーシャリング出来ない
  2. 特異メソッドを持つオブジェクトはマーシャリング出来ない
  3. ユーザーが作成したオブジェクトはマーシャリング出来ない
  4. 無名クラスやモジュールはマーシャリング出来ない

以下, 解答.

  1. IO クラスのオブジェクトはマーシャリング出来ない
  2. 特異メソッドを持つオブジェクトはマーシャリング出来ない
  3. 無名クラスやモジュールはマーシャリング出来ない

以下, 解説より抜粋.

  • マーシャリング = オブジェクトを文字列として書き出す
  • システムの状態を保持するオブジェクト (IO, File, Dir, Socket) や特異メソッドを定義したオブジェクトはマーシャリング不可
  • 無名のクラスやモジュールもマーシャリング不可

以下, マーシャリングの例.

irb(main):002:0>  Marshal.dump('aaa')
=> "\x04\bI\"\baaa\x06:\x06ET"
irb(main):003:0> Marshal.load("\x04\bI\"\baaa\x06:\x06ET")
=> "aaa"

組み込みライブラリ (4)

Q45. Kernel モジュールの clone メソッドについて, 適切な記述を全て選べ.

  1. freeze, 特異メソッド等の情報を含めてコピーする
  2. freeze, 特異メソッド等の情報を含めてコピーしない
  3. 参照先のオブジェクトもコピーされる
  4. 参照先のオブジェクトはコピーされない

以下, 解答.

  1. freeze, 特異メソッド等の情報を含めてコピーする
  2. 参照先のオブジェクトはコピーされない

以下, 解説より抜粋.

  • Kernel#clonefreeze, taint, 特異メソッド等の情報を含めた完全なコピーを作成する
  • 参照先のオブジェクトはコピーしない (シャローコピー)

フムフム.