C

RustでRubyのNative Extensionを書く

はじめに 先日、Ruby Issue Trackerに以下のチケットが作成されました。 Feature #18481 Porting YJIT to Rust (request for feedback) 内容としては、昨年末にリリースされたRuby 3.1にマージされているYJITという新しいJITコンパイラをより開発しやすくす…

社会人になってからプログラマーになった話

はじめに 少し前にFediverseのTLで「別業種とかからプログラマーになった話があるとよさそう」と盛り上がってた。 僕自身は社会人になってからプログラマーとして仕事してるので、その辺の経験とか経緯を記事にしてみると需要がありそうかなと思い、書いてみ…

CRubyのFloatクラスの結構なメソッドをbuiltinで書き直してみた

はじめに Hamada.rbでCRubyのFloatクラスをbuiltinで書き直してみた記事です。どちらかといえば作業ログな内容です。 builtinとは? 過去にいくつか記事にしているので詳細はそちらを見て頂ければと思いますgamelinks007.hatenablog.com gamelinks007.hatena…

Ruby2.7ではRubyで実装されたメソッドは挙動が以前と違う話

Ruby Issue Tracking System で見つけたチケットのバグを調べたときのあれこれをまとめたものです。ちなみに、調べたチケットはこれbugs.ruby-lang.org簡単に言うとruby-profでコードの挙動を追うと意図したものと異なっているみたい 挙動が違う箇所 Ruby 2.…

Rubyのbuiltinを複数のファイルでサポートできるようにした

結論 builtinで複数のRubyコードを使うことができるようになる話。ようはRubyでRubyを高速化するのがよりやりやすくなる話。以前書いたこの記事をもっと深堀りしたものなので、もっとソフトな話を読みたい方はこちらを読んでいただければと思います。gamelin…

Kernel#iterator?で警告を出す

結論 ブロックを渡されているかどうかをチェックして真偽値を返すKernel#iterator?をdeprecatedにしようぜという話 Kernel#iterator? Kernel#iterator?はブロックが渡されているかどうかをチェックできるメソッドです。 def check if iterator? puts "Block …

RubyでRubyを実装する時の罠

結論 複数のクラスを実装しているRuby内部のCコードでbuiltinをいくつか組み合わせるとビルドできなくなる。 RubyでRubyを実装する 最近のRubyは「Ruby自体をRubyで実装することで高速化できる」という場面がある。その辺の詳しいことは以前記事にまとめたの…

Ruby 2.7でのSEGVの件

結論 Ruby 2.7で以下のコードがSEGVする。 p **1 以下のコミットでmasterでは修正済み。github.comただ、まだバックポートはされていない模様。ちなみにバグ報告のチケットとしてはこちらbugs.ruby-lang.org Ruby 2.7でのSEGV Ruby 2.7では以下のコードでSEG…

Array#both_endの使いどころを考える

はじめに Array#minimaxというメソッドがRuby 2.4から導入されていて、そのメソッドの実装を読んでいた時に思いついたArray#both_endメソッドの実用例についてつらつらと書いてみた記事。 なので、実際にRubyにそういうメソッドがあるわけではない。 実装 /*…

Rubyにパッチを投げてきたアレコレ

はじめに この記事は俺GW頑張ったというGWアドベントカレンダーの5月1日の記事です。 プログラミング言語Rubyにテストの修正やbuiltin対応などでパッチを投げてきた時の知見などを振りかえってみたかったので書いてみた。 やったこと テスト修正関連 そもそ…

RubyのFloat(arg, exception: true)をbuiltinで再実装してみた

はじめに この記事は以前書いた以下の記事で紹介したbuiltinを使ってFloat(arg, exception: true)というメソッドを再定義してみた記事になります。 gamelinks007.hatenablog.com やっていることは前回の記事とおおよそ同じです。前回と異なる点は、特定のク…

Ruby(とC)でRubyを実装してみた(builtinで遊んでみた)

はじめに タイトルにもあるようにRubyのbuiltin(正式名称を知らないので呼び出し方法から拝借)というものを使ってRuby自体をRuby(とC)で実装してみた話です。 内容としてはRuby自体の実装に興味のある方向けの話になります。 builtinって? builtinとはRub…