タグ

rubyに関するNeoCatのブックマーク (17)

  • MJIT で dlopen 使わずに ELF オブジェクトを直接ロードする話 - 兼雑記

    MJIT というのが Ruby に入ったのは聞いていて、すごいことするな、と思ってたんですが、実際に Ruby Kaigi で話を聞けて少し遊んでみたくなったのでした。そういえば https://turingcomplete.fm/5 の時に「MJITについてどう思うか聞いておいて下さい」とかリクエストしておいたのに聞いてくれなかったのであった。 https://k0kubun.hatenablog.com/entry/ruby26-jit すごいことするな、と思ったのはその手法で、 C 生成して dlopen という、よく雑談とかで言う話ではあるけど、実際広く使われる用途で使われたのは見たことが無かった(ICFPCとかでは見たことがある)ので、すごいなと。 一方で、 dlopen たくさんすると、いくつかの意味でオーバヘッドがかかると思われるため、あとでマイクロベンチに出ないところで大変

    MJIT で dlopen 使わずに ELF オブジェクトを直接ロードする話 - 兼雑記
    NeoCat
    NeoCat 2018/06/11
    .so経由で読むのが不都合ならバイナリを自力で読めば…とは思うけどarch依存もありそうだしやっぱり実用的ではないですよね…。RubyKaigiでLightWeight-JIT作ってるという話もあったけどこれもMRI並のarch対応は時間かかりそう…
  • VMに手を加えずRubyを高速化するJITコンパイラ「YARV-MJIT」の話 - k0kubun's blog

    先日のRubyKaigi 2017のLTではLLVMベースのCRuby向けJITコンパイラLLRBの話をしました。 5分はちょっとJITの話をするには短かかったですね。 LLRBをふまえた、Cのコード生成への軌道修正 さて、上記の資料にある通り、CRubyのJITにおいてはメインの高速化対象が既に存在するCのコードになるため、 開発の早い段階でパフォーマンスにインパクトを持てるとすればLLVM Passの順番を変えるくらいで、 LLVM IRを直接生成しても最適化上のメリットがほとんどないのでその部分はMJIT と同じくCのコードを生成するように変更したい、という話をした*1。 で、LLRBはC拡張として作るべくちょっと不思議な努力をいろいろやっており、 それらの設計はやってみた結果(コアに直接変更を加えるのに比べ)デメリットの方が大きいと思ったので、 LLRBの失敗を全て生かしつつ、今回

    VMに手を加えずRubyを高速化するJITコンパイラ「YARV-MJIT」の話 - k0kubun's blog
  • 言語女子会2: varは必要?/privateがない? - 西尾泰和のはてなダイアリー

    言語女子会: undefとnullは両方必要?の続編です。 varは必要なの? とあるプログラミング言語が集う女子会にて: Python: JavaScriptちゃんってさ、なんでvarだらけなの? JavaScript: えっ、変? Python: varなんかいらなくない?私ぜんぜん持ってないよ? JavaScript: えー、じゃあ変数をどうやって宣言するの? Python: 宣言っていうか…「x = 1」みたいな代入文があれば変数xが必要なのって自明じゃない?宣言とか必要? Ruby: 必要ないよね。っていうか変数宣言とか古臭くない? JavaScript: そうかなー。 Python: 少しダサイかも。ほら断舎離ブームだし要らないものは捨てなきゃ! JavaScript: 要らないかなぁ、変数宣言。Pythonちゃんは関数がネストしているときに外側のスコープの変数に代入するのって

    言語女子会2: varは必要?/privateがない? - 西尾泰和のはてなダイアリー
  • jugyo.org

    This domain may be for sale!

    NeoCat
    NeoCat 2009/11/28
    gem install g 簡単、便利。
  • Symbolic Polyglot Quine - 兼雑記

    題字の通り。作ろうかなぁと思いつつ作ってなかったので作りました。 http://shinh.skr.jp/obf/sym_poly_quine.txt 一応ある程度サイズは気にして作りましたが、細かいゴルフとかは全然してません。 Perl がなんか知らんけど SEGV しやがるので eval の中でやりたい処理を全部外でやってるので長くなってしまった…まぁブラウザの認識とかしてないとはいえ TAKESAKOさんのhello の半分以下ですんでるんでいいんじゃないかな。 ブラウザで試す場合はこのへん。 IE 以外だったら大抵のブラウザで大丈夫なんじゃないでしょうか。 IE は文字列の中の一文字を [] で取ってこれないのでアウト。 ある程度短くしようとしてたので、エスケープとかがわけわからんくならないように基的にバックスラッシュ封印してコードを書く必要があって、バックスラッシュ封印すると必

    Symbolic Polyglot Quine - 兼雑記
  • 開発コアメンバが語るRubyの今とこれから(前編) - @IT

    Ruby 1.9は移行準備オッケー @IT yuguiさんは、2009年2月のDeveloper's Summitの講演で、そろそろRuby 1.8系から1.9系への移行を始めるべきだと主張されてましたね。 園田裕貴氏。裕貴のピンイン表記である「yugui」のハンドル名で知られている。Ruby 1.9系統リリースマネージャで、Rubyコミッタ。1981年生まれ。著書に『初めてのRuby』(オライリージャパン)がある。最近はRailsアプリケーションをよく書いているという yugui ええ、一般のRubyユーザーはRuby 1.9への乗り換えは慎重にという立場の人もいますけど、私はそろそろ移行を考える時期だと思います。 @IT もう1.9に移行してもオッケーだと。 yugui もう根的な仕様が変わることはないという意味でオッケーです。2007年12月に出た1.9.0は、仕様が煮詰まっていな

  • 最もタメになる「初心者用言語」は Brainf*ck! - TAKESAKOのはてな出張所

    まず、世界中のプログラマが誰でも一番最初に作るであろう「Hello, world!」を標準出力に表示するプログラムを書いてみましょう。 C言語 2006-12-19 char main[]= "QVWUZ%@@@@% P^JJJJJJJJJJJJJJJJJJJJJJJJ3B PVXH, PTXHHHH!0Z_18R_)8)8)8)8" ")8)8)8)8WV_38WX_)8)8)8@)8@@@@)8)8)8T_VXOOOOOOOOOOOOOOOOOOOOOOOOWYVX!75Hel" "lVP^17^GGGGVX!75o, wVP^17^GGGGVX!75orldVP^17^GGGGVX!75aJ@@5@@@@VP^17^VXP[" "PZBBBBBBBBBBBBBBC@@@@AHI@AHI@AHI@AHI@AHI@AHI@j__^Y`"; このプログラムを hello.c という名前で保

    最もタメになる「初心者用言語」は Brainf*ck! - TAKESAKOのはてな出張所
  • ライブドアブログ|無料で豊富な機能が充実

    【愚痴】一番下が幼稚園入ったら働いてほしいって嫁に行ったら「働く分少しは家事の分担と育児も今より関わって」と言われたんだが… 【えぇ…】友達とフードコートへ→私「ポテト買って二人でべる?半額持ってくれるなら私のと一緒に注文するけど」友達「今日は別の店のポテトにする」私「了解」→結果

    ライブドアブログ|無料で豊富な機能が充実
  • rubyのスタックオーバフローに対処する - 2008-11-16 - 未来のいつか/hyoshiokの日記

    rubyのバグ(d:id:hyoshiok:20081106#p1)でsigsegvでrubyが異常終了するという話を書いた。その続き。 BINARY HACKSのHACK #76(pp. 291-300)、"sigaltstackでスタックオーバフローに対処する"が参考になりそうだ。 ということでsigaltstack(2)を使うというところを写経してみた。BINARY HACKSによれば、スタックオバーフローでSEGVした場合、通常のsignal(2)やsigaction(2)で処理することはできない。というのはスタックオバーフローした場合シグナルハンドラーを動かすスタックすら確保できないかららしい。なるほどね。そのため、スタックオバーフローを捕捉するために代替シグナルスタックを設定する必要がある。それには、sigaltstack(2)を使う。 http://www.linux.or.

    rubyのスタックオーバフローに対処する - 2008-11-16 - 未来のいつか/hyoshiokの日記
    NeoCat
    NeoCat 2008/11/17
    sigsltstack使ってエラー出力。参考:BINARY HACKS
  • [Program] fizzbuzz7.gif - 2008-10-25 - 兼雑記

    なんかブックマークに golf とかいうタグがついてるのが目に入って、ゴルフなんてロクにしてないのになぁとか思って、ちょっとゴルフして1言語足してみました。具体的には Befunge 。 http://shinh.skr.jp/dat_dir/fizzbuzz7.gif 前回との差分としては、 PerlRuby のコードを融合させた方が明らかに短くなるので融合させて、 z80 をちょっとはマジメにゴルフして、 Befunge 入る隙間を適当に作ってつっこんだというような感じです。したらまだなんか空いてたので by shinh とか入れといた。 z80 と x86 を人生を賭けて縮めたらもう一個くらいなんか入るんじゃないかという気はします。 VMWare fusion でヘンだとかはまぁ直したいけどまた今度。 ソースコードとかそのへん。 http://shinh.skr.jp/dat_

    [Program] fizzbuzz7.gif - 2008-10-25 - 兼雑記
    NeoCat
    NeoCat 2008/10/25
    fizzbizz.gifにBefungeを追加
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • ゆの in Ruby を読む - gan2 の Ruby 勉強日記

    ゆの in Ruby - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtechは パッと見て全然よく分からなかったのであきらめて投げていたのだけど 他のバージョンとかも色々出てきて読めていないのが段々くやしくなってきた。 そこで、気合を入れて「なめるなよ!カッ!」ってしてみたところ今度は読めたので ついでにメモを残しておこうと思う。 さて、これがそのスクリプトである。 (タブはスペース2つ分に置き換えている) #!ruby -Ku class X attr_reader :a, :b def self./(a) new(a) end def self.to_s "×365" end def initialize(a) @a = a end def /(b) @b = b print self self end def <(o) puts " #{o}" end de

    ゆの in Ruby を読む - gan2 の Ruby 勉強日記
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • スーパーマリオブラザーズの「次の面」を求める 〜Rangeとsuccメソッドの甘い(?)関係〜 - http://rubikitch.com/に移転しました

    Range#eachはsuccメソッドを内部で呼ぶ、だからRangeにStringを指定することもできる。 しかーし、String#succが常に「正しい」次の文字列を返すとは限らない!そこで、おれおれsuccを定義してやろうじゃないかというお話。 平成生まれの人は知らないかもしれないが、昔懐かしのスーパーマリオブラザーズ1、2の面構成は8ワールドあって、それぞれのワールドには4エリアがある。たとえば2ワールド4エリアは「2-4」と書く。で、次の面は「3-1」だ。ちなみに、4エリアにはクッパが待ち構えている。 「2-4」の次を「3-1」を返すようなおれおれsuccを定義する。ここはRubyらしくModule#extendで特異メソッド(厳密には違うが事実上そういうことで)を動的に定義する。 最後の数字が4のときはワールドの数字「self[0,1]」を次の数字にする。そうでないときはオリジナ

    スーパーマリオブラザーズの「次の面」を求める 〜Rangeとsuccメソッドの甘い(?)関係〜 - http://rubikitch.com/に移転しました
    NeoCat
    NeoCat 2008/06/14
  • tapかわいいよtap - http://rubikitch.com/に移転しました

    Ruby 1.9で導入されたObject#tapはRuby 1.8でも1.8.7から使えるようになった。 tapメソッドとは何かというと、自分自身にブロックを作用させて自分自身を返すだけのメソッドだ。つまり副作用専門メソッド。定義はいたって簡単、コレ。 class Object def tap yield(self) self end end たとえば、1〜4の二乗のうち10以上のものを求めたいんだけど、デバッグ時とかで途中経過である1〜4の二乗を表示してほしいなんて場合はこんな感じに。いらなくなったらtapの部分を消せばいい。楽チン。 ary = [1, 2, 3, 4] ary.map{|x| x**2}.tap{|a| p a}.select {|x| x>10 } # => [16] # >> [1, 4, 9, 16] ほかにも、破壊的メソッドを適用した後で自分自身を返す場合にも

    tapかわいいよtap - http://rubikitch.com/に移転しました
    NeoCat
    NeoCat 2008/05/02
    副作用専門メソッドtap : injectより分かりやすい
  • Ruby 1.8とRuby 1.9の変更点の生成を半自動化 - http://rubikitch.com/に移転しました

    http://eigenclass.org/hiki/mechanically-verified-ruby19-changelog クリスマスリリースされるであろうRuby 1.9はかなり久々の大きなバージョンアップだ。Ruby 1.8時代がかつてないほどに長かった。これからは1.8、1.9が共存していく。安定を望む人はこれまで通り1.8を使えばいいし、よりパワーアップしたRubyを使いたければ1.9を使えばいい。 Ruby 1.9では新しい文法やいろいろな非互換性がある。進化する上で非互換性は仕方ない。変更点がどうなったのか気になっている人は多いだろう。eigenclass.orgの中の人は今まで時間をかけて変更点のチェックしていた。しかし、1.9開発中にはいろいろな機能ができては消えてきた。だから手作業でチェックしていたら内容の信憑性が怪しい。そこで、彼は変更点を自動生成することにした

    Ruby 1.8とRuby 1.9の変更点の生成を半自動化 - http://rubikitch.com/に移転しました
    NeoCat
    NeoCat 2007/12/24
    assertionを使ってrubyの差分をチェックしつつドキュメントを出力
  • 1