タグ

cとrubyに関するmas-higaのブックマーク (5)

  • Rubyで構造体を扱う(ただし、Cの)。あとELFの話。 - ローファイ日記

    飛び入りです。Rubyアドベントカレンダーその2 17日目の記事です。昨日はなんとなく似たような(?)、 Rubyの8進数と2進数の構文エラー文の違い の話です。 qiita.com 今日はRubyで構造体、と言うか、バイナリパックされた構造体を扱う話の触りをします。class Structの話はしない。 さてみなさんは String#unpack/Array#pack を使ってますか? docs.ruby-lang.org すこく正直な話をすると、おそらく多くの方は使っていなくて、使っている方も大半はbase64文字列を生成する m フォーマットぐらいしか使っていないのではないかと推測しています。 ["Hello World"].pack('m') #=> "SGVsbG8gV29ybGQ=\n" ぼくも今まではそうだったのですが、最近は他のフォーマットも急に使うようになりました。という

    Rubyで構造体を扱う(ただし、Cの)。あとELFの話。 - ローファイ日記
    mas-higa
    mas-higa 2020/12/18
    "多分 char[65] のメンバが6つある" ??
  • 投機実行とOut of Orderはつよいというはなし - なるせにっき

    fluentdな人達と話していると定期的にRubyのオブジェクト生成が遅いとdisられます。 質的にしょうがない部分もあるんですが、それにしても遅い部分も結構あるので、おもむろにperf statとperf recordを取ってみましょう。 % sudo perf stat -d ./miniruby -e'GC.disable;i=1000000;while (i-=1)>0;Hash.new;end' Performance counter stats for './miniruby -eGC.disable;i=1000000;while (i-=1)>0;Hash.new;end': 467.629812 task-clock (msec) # 0.993 CPUs utilized 19 context-switches # 0.041 K/sec 2 cpu-migratio

    投機実行とOut of Orderはつよいというはなし - なるせにっき
    mas-higa
    mas-higa 2016/05/25
    DIV 遅い。まで読んだ。
  • 割り切れてるかの確認を高速化しようとして、コンパイラに負けた話 - なるせにっき

    今日見ていきたいのはtime.cのquo(VALUE x, VALUE y)です。akrさんのRuby における 2038年問題の解決で述べられているとおり、RubyのTimeは内部表現にRationalを使えるようになっているので、その辺を司る部品ですね。 static VALUE quo(VALUE x, VALUE y) { VALUE ret; if (FIXNUM_P(x) && FIXNUM_P(y)) { long a, b, c; a = FIX2LONG(x); b = FIX2LONG(y); if (b == 0) rb_num_zerodiv(); c = a / b; if (c * b == a) { return LONG2NUM(c); } } ret = rb_funcall(x, id_quo, 1, y); if (RB_TYPE_P(ret, T_R

    割り切れてるかの確認を高速化しようとして、コンパイラに負けた話 - なるせにっき
    mas-higa
    mas-higa 2016/03/30
    こういうのコンパイラによって吐かれるコードが違うとかないのかしらん?
  • Rubyの拡張ライブラリを作ってみよう! - ser1zw's blog

    はじめに Ruby Advent Calendar jp: 2011 : ATNDの17日目の記事です。昨日は@yoppiblogさんのSeleniumの自動テストをCI環境(Jenkins)で快適に実施するでした。 Rubyを使ってて 遅い…ここだけ超遅い… とか あのライブラリが使いたい!でもRuby用のライブラリじゃないし… みたいなこと、ありますよね? そんなとき、Rubyの拡張ライブラリで解決できるかもしれません。 Rubyの拡張ライブラリは、普通のライブラリと異なりC(とかC++とかその他の言語とか)で作成します。そのため、Rubyで直接書くよりも高速に処理できたり、Cのインタフェースが用意されているライブラリをRubyから呼びだしたりすることができます。すばらしい! そんなわけで、拡張ライブラリの作り方をざっくり説明したいと思います。 用意するもの Cコンパイラとかmakeと

    Rubyの拡張ライブラリを作ってみよう! - ser1zw's blog
  • RubyエンジニアのためのObjective-C Blocks入門 - As Sloth As Possible

    書こう書こうと思ってたけど忘れてたのを、PerlエンジニアのためのObjective-C Blocks入門を見て思い出した。すいませんタイトルは便乗です。 試しに書いてみる Blocksってのが何者なのかはさっきの記事なりAppleのドキュメントなりを見てもらえばいいと思うんですが、まぁウケが良さそうなので付けたタイトルにのっとってRubyと比較してみる。 f = lambda {|x| puts "#{x}のこと以外は何も考えられない" } f.call("うどん") void (^f)(id) = ^(id x) { NSLog(@"世界の全てを敵に回しても、僕は%@の味方だ", x); }; f(@"うどん"); なんだ、そっくりじゃない。似てる似てる。 上がRuby版、下がObjC版。下は普通引数にはNSString*とかを使うと思うけど、まぁRuby版と挙動を合わせるためにidに

    RubyエンジニアのためのObjective-C Blocks入門 - As Sloth As Possible
  • 1