サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
ruby-trunk-changes.hatenablog.com
最初に説明抜きで結論を CRuby のリポジトリを git で clone した working copy で以下を実行します。 git remote add ruby-trunk-changes https://github.com/nagachika/ruby.git git config --local remote.ruby-trunk-changes.fetch '+refs/notes/commits:refs/notes/ruby-trunk-changes' git config --local notes.displayRef '*' git fetch ruby-trunk-changes git の使いかたにはいろいろ個人の好みがあったりとか既存の設定との相性があると思うので、よりこまかく設定したい人や背景を知りたい人は以下の説明も読んでみてください。 背景 毎日 C
今日はなんといってもお待ちかねの並列化機構 Ractor がコミットされました。 [79df14c04b] Koichi Sasada 2020-03-09 17:22:11 UTC みなさんお待ちかねの新しい並列化機構 Ractor がコミットされました。 [ruby-core:99449] [Feature #17100] Ractor については今日 RubyKaigi takeout でささださんが解説したセッションがあったので、そのうちアーカイブも公開されると思うので RubyKaigi の YouTube チャンネルに登録しておきましょう。 https://www.youtube.com/channel/UCBSg5zH-VFJ42BGQFk4VH2A/featured ざっくりと見所を探していくと、まず ractor.h で構造体 rb_ractor_t が定義されていて、こ
今日は var in pattern というような後置 in 記法? による短い pattern match 記法の導入や C 実装のメソッドでも keyword splat の変換の警告が出るようにする変更、ruby2_keywords メソッドの追加、Symtol#to_s と Module#name が freeze された String を返すようになるなど追加や仕様変更がありました。 [5b1fd79ad9] Nobuyoshi Nakada 2019-09-25 11:51:20 UTC 拡張ライブラリ io/wait の IO#ready? の rdoc 用コメントから戻り値が nil になるケースを削除しています。 r50262 の変更への追随とのこと。 [ae83dbe28d] Nobuyoshi Nakada 2019-09-24 00:03:38 UTC 標準添付ライ
今日は pipeline operator の削除や reline のウィンドウサイズ変更時に追随できるようにする対応などがありました。 [cd0e208963] Jeremy Evans 2019-08-28 18:40:56 UTC doc/regexp.rdoc に正規表現の繰り返し回数の範囲指定をする {n,m} や {n,}, {,m} (始点終点省略できるの知らなかった)で、後ろに "?" をつけることで最長マッチを抑制するようにできることを明記しています。また厳密な数の指定をする {n} の場合はこの効果がなくただのメタキャラクタとして働くので意味が変わってしまうことも注記しています。なるほどー。 {[ruby-core:91377] [Bug #15583] [d92289cd8d] Nobuyoshi Nakada 2019-08-29 02:09:22 UTC r636
今日は Stack consistency error の不具合修正、ブロック引数で受け取ったブロックを call メソッドで呼び出した時も Proc オブジェクト化しないようにする最適化などがありました。 nobu: r61617 2018-01-05 23:23:22 +0900 VM 命令へのコンパイル時の unreachable なコードの削除を、jump 命令の飛び先もその元が消えたら連鎖して消すようにしている? という感じに読めました。参照数を減らす数を命令毎に計算しておいて、参照数が結果的に 0 になったら消す、というような全体をみる判定をしている模様。 nobu: r61618 2018-01-05 23:23:23 +0900 while ループの中で return すると Stack Consistency Error が発生するという不具合を修正。こんなのがあったとは
今日は Ruby 開発者合宿があったので、とてもたくさんの変更がありました。不具合修正に新規メソッドの追加と冒頭では書ききれないほどあるので、どこかで 2.5 の新機能として紹介されるのをご期待ください。 ちなみに今日は svn さんのコミットも含めて 98個もあり、ruby-trunk-changes 開始から最多を記録しました。 yui-knk: r60220 2017-10-21 01:22:22 +0900 branch coverage で分岐の位置を指定するなどに使うためと思われますが、parse した時にその token のカラム番号を NODE に保持するようにしています。大作ですね。 svn: r60221 2017-10-21 01:22:24 +0900 version.h の日付更新。 svn: r60222 2017-10-21 01:22:24 +0900 r6
今日はまず do..end のブロックに begin なしで rescue,ensure,else が書けるようになった文法の変更と、Kernel#warn が Warning.warn によるカスタマイズが効くようにする変更、その他古くからあった不具合修正などがありました。 kazu: r57363 2017-01-18 21:35:10 +0900 標準添付ライブラリ profiler の magic comment frozen_string_literal を true に変更しています。 normal: r57364 2017-01-19 03:23:49 +0900 非 IO オブジェクトを入力とした時の IO.copy_stream のベンチマークスクリプトを追加しています。 [Bug #13085] で報告されている問題のために入れたみたいですね。 svn: r57365
今日も引き続き開発合宿効果でたくさんの変更がありました。TracePoint で alias されたメソッドを呼び出した時に実体のメソッド名と呼び出した時のメソッド名の両方が取得できるようになったり、Binding#irb メソッドで任意のコンテキストから irb が起動できるようになったり、Net::HTTP.post メソッドが追加されたり、その他たくさんの機能追加や不具合修正がありました。 kazu: r56591 2016-11-05 21:59:23 +0900 r56582 の ChangeLog エントリの typo 修正。 ktsj: r56592 2016-11-05 22:15:26 +0900 TracePoint で alias で作られたメソッド名で呼び出した時に method_id が常に元のメソッド名を返すようにしています。次の callee_id の導入の下
11月8日に大江戸Ruby会議05に参加、LT 発表してきました。初の大江戸Ruby会議、(たぶん)初のasakusa.rbイベントの参加でした。 LT は「Functional Music Composition」というタイトルで、資料は Functional Music Composition とかに公開しています。資料のほうは主に(他人の)本の宣伝で、razyk という LazyK の処理系をアップデートして 0.2.0 を公開しました、というのと、音を出せるようにしましたよというデモをしました。 audio 機能についてはともかく、razyk はブラウザでステップ実行できるので SKI コンビネータ計算の学習の補助ツールとしてなかなかいいものになってるんじゃないかと自負しているので(LazyK として動かす以外に、SKI コンビネータの簡約のみするモードもあります)、コンビネータ計
今日は frozen_string_literal: true の時に "#{var}" のように式展開を含む文字列も freeze するようにする変更と、新機能として Array#dig と Hash#dig というネストした要素にアクセスするためのメソッド追加がありました。 kazu: r52498 2015-11-09 00:13:18 +0900 r52473 と r52487 の ChangeLog エントリの typo 修正。 svn: r52499 2015-11-09 00:13:35 +0900 version.h の日付更新。 hsbt: r52500 2015-11-09 15:56:36 +0900 make test や make test-all での coverage のための simplecov を clone してくるリポジトリは hsbt さんの for
今日は obj.?meth のようにすると obj が nil でない時だけ meth を呼び出すという新しい文法が追加されています。また Kernel#loop にも StopIteration で止めた時に戻り値に影響するように機能が追加されています。 shugo: r52209 2015-10-22 11:21:06 +0900 標準添付ライブラリ ftp の Net::FTP#getbinaryfile と Net::FTP#gettextfile メソッドのテストを追加しています。 svn: r52210 2015-10-22 11:21:58 +0900 version.h の日付更新。 nobu: r52211 2015-10-22 13:13:52 +0900 ARGV で引数から開かれた File オブジェクトを得るのに先に文字列化してからエンコーディングの変換の操作をす
TL;DR (3行で) 公式の docker-registry には認証がない ngx_mruby で Basic認証とアクセス制限をかけるスクリプトを書いた Docker イメージを nagachika/nginx-docker-registry で公開 動機 どうもこのごろ猫も杓子も Docker で食傷気味ですね。しかし最近わたしも Docker 使うようになってしまいました。 Docker のイメージを保存する Docker Registry はオープンソースになっていて、Private Docker Registry を立てるのは非常に簡単にできます。使いかたを解説した記事もたくさんあります。 https://github.com/docker/docker-registry しかしこの docker-registry には認証やアクセス制限の機能がないため*1、どこからでもアク
今日はインクリメンタルGC の導入がありました!! ko1: r47444 2014-09-08 13:11:00 +0900 インクリメンタルGC が導入されました! [ruby-core:64383] [Feature #10137] 今回 CRuby に導入されたインクリメンタルGC は、既に導入されている世代別GC (RGenGC) の major GC の make & sweep の mark 処理を複数回に分割して実行することで、major GC の停止時間を分散させるようにする機能のことです。オーバヘッドがあるのでスループット(全体の処理時間)は少しのびる可能性がありますが、応答性は良くなる(グッ、と固まる時間が短くなる)ことが期待されます。 mark を断続的に実施するので、markの途中で Ruby のコードが動くことがあるため、既に mark 済みのオブジェクトにまだ
vagrant は自分で作った VM から vagrant package というコマンドで box ファイルを作成して、それを雛形にして新たに VM を作ることができます。これで必要なパッケージのインストール、ユーザの追加、設定ファイルの配置などをしてから box 化しておくことで同じ環境を使いまわすことができます。 いまどきは Chef などの構成管理ソフトを使って毎回自動的に環境構築、というのが流行りだと思いますけど、時間もかかるので手元で開発用に使いたいものだと box から VM 作成/起動してすぐ利用、というのが手軽でいいです(手軽さが欲しいなら Docker と言われそうだけど)。 vagrant の box 作成はこちらを参考にしました。 Vagrantのboxに少しだけ手を加えたものをboxとして取っておきたい - Qiita 今日もアプリのテスト用にいくつかサーバが欲し
今日は大晦日ですが少し変更多めで、ビルド関係の不具合修正、raise にキーワード引数 cause を追加して Exception#cause を明示的に渡すことができるようになる変更などがありました。 2013年も ruby-trunk-changes のご愛読ありがとうございました。それではみなさまよいお年を。 ayumin: r44463 2013-12-30 23:39:35 +0900 Module#class_variables の rdoc 用コメントのサンプルに引数を渡して呼ぶ例を追記しています。 [ruby-core:58847] [Bug #9210] zzak: r44464 2013-12-31 04:47:59 +0900 r44463 の ChangeLog に [DOC] タグを追記しています。 svn: r44465 2013-12-31 04:48:05
本日 RubyWorld Conference の RubyPrize 授賞式で最終発表があり Ruby Prize 2013 を受賞しました。 Ruby 2.0.0 のメンテナンスと、この ruby-trunk-changes の活動が認められました。 ruby-trunk-changes のご愛顧ありがとうございます。またコミッタの皆様やコントリビュータの皆様のコミットがあればこその活動でした。また ruby-trunk-changes 読んでますとか ruby-trunk-changes に載るのが楽しみだと言ってくださった方々の声が更新の原動力になりました。ありがとうございます。
5/30-6/1 開催された RubyKaigi 2013 にて 2日目のセッションで "CRuby Committers Who's Who in 2013" という発表をしました。 (とここで発表資料をアップロードしてリンクしておくのが普通なのですが、あのスライドには実は様々なレベルのミスがあり手直しをしないことには資料として不完全ですので少々お待ちください) (というかあの発表内容で資料を見返したいという需要はそんなにないんじゃないかなぁ。発表の様子を確認したいかたは Ustream の録画か、近日中に Vimeo にアップロードされるであろう動画をご覧ください) [追記]すごーく今更ですが、資料をSlideshareで公開しました[/追記] "The RubyKaigi" の壇上で発表をするのはいつかはやりたいなぁと思っていたことなので、実現できたことは純粋に嬉しいです。発表後にも
今日は前田さん無双の日で、Refinement の仕様が大幅に変更/縮小されています。 また RubyGems の不具合修正を含むバージョンアップ、CSV の不具合修正などがありました。 shugo:r38261 2012-12-07 23:44:02 +0900 r38244 で拡張ライブラリ refinement のソースに rb_warn() のプロトタイプ宣言を加えましたが、そのかわりに #include "ruby/ruby.h" を追加するようにしています。 shugo:r38262 2012-12-08 00:49:21 +0900 Refinement の仕様に大きく変更が加えられているようです。 module_eval, instance_eval 内でのメソッド呼び出しで refine を考慮しなくなった Module#refine は Class しか受け付けなくなっ
rails generate scaffold で生成した view が migration によるテーブルのカラムの変更に追随してなかったから更新しましょうということになったのですが、量がそれなりにあって手作業でやると面倒なので rails generate しなおしたのから切り貼りしたらいいじゃない、と思って調べてみたのですが、どうもそういうのがみつからなかったのでこんなふうにしてみました。ちなみに rails generate view というような view だけ作るのはないんですね。 model, = ARGV script = <<-END attrs = #{model}.columns.map{|col| [ col.name, col.type ] } system("bundle exec rails generate scaffold #{model} \#{attr
6月2日は Yokohama.rb 主催のみなとRuby会議01 に参加しました。今回はスピーカーとして参加しました。けど Yokohama.rb の一員としてなんとなく開催側のような気持ちでもあり、個人的になんとも印象深い Kaigi になりました。 みなとRuby会議01 - Regional RubyKaigi 飛行機の離陸/到着が遅れて13時過ぎに会場に到着。実行委員長のオープニングを見逃しました。残念。飛行機は遅れるもの、ということを折り込んで移動計画を立てないといけませんね。 ソーシャルコーディング それから会場ではペアを組んでの課題プログラミング。あみだくじを生成する問題と数字を英語表現に変換する問題があったようです。Kaigi でペアプロをするってどういう感じなのかなーって不思議に思ってましたが、たいへん盛況でしたし参加者の方々の感想でも ice break になって良かっ
土曜日の Yokohama.rb #18 はいつもとは異なる会場で LT 大会ということで、わたしも「Ruby Kaja のご提案」という発表をしてきました。ちなみにこの会場はみなとRubyKaigiの会場予定地だそうで、たいへん立派な建物でしたが SoftBank と emobile の電波が入らなくて困りました。ネットワーク環境の課題がありそうですね。 発表したのは Ruby Kaja というイベントの提案です。 Ruby Hero Awards というコミュニティに貢献したRubyistを表彰するサイトがあります。でも2011年度まで日本人の受賞者は0ですね。 RubyKaigi2010 (テーマは「衝突と解決 Conflicts and Resolutions」)でもパネルディスカッションで日本のRubyistと海外のRubyistとの断絶という話題がありました。最近はソーシャルコ
今日はキーワード引数の実装が追加されました。仕様はまだ正式に決定したわけではなくて叩き台ということなのでどんなものかチェックしてみてください。キーワード引数についての簡単な解説も書きました。 shirosaki:r34132 2011-12-26 22:49:31 +0900 mswin 版の IO#read で読み込みサイズを指定した時に、一時的にバイナリモードに変更して読み込みし、そのために読み込みバッファを破棄してファイルポインタを戻す(r34043 の変更)のですが、そこで "\n" だけの改行コードがあった場合に seek する位置を戻し過ぎることがあったのを修正、また read() のエラー処理を強化(というか元はエラー処理されてなかった?)しています。 [ruby-core:41671] [Bug #5714] mame:r34133 2011-12-26 23:19:52
ruby-trunk-changesをgitから参照する - 継続にっき(2011-12-12) という記事を読んで git でコミットに note というコメントを付加できることを知りました。k-tsj さんありがとうございます。 1.7.1 あたりで追加された機能らしいのですが GitHub のコミットのページでも notes が表示されるようです。*1 ([追記]その後この git notes を表示する機能は GitHub から削除されてしまいました。残念) これは便利ですね。後から参照するぶんには ruby trunk changes 自体この形式で公開したほうがいいんじゃないかと思うくらいです。また最近 Heroku で ruby trunk pages のメモをしているツールのデータを Heroku の PostgreSQL じゃなくてどこか外部に置けないかなと思っていたので
ご存知の通り Ruby では仮引数の最後に '&' を前置した「ブロック引数」を宣言することで、メソッドに渡されるブロックをProcオブジェクトとして受け取ることができます。つまりメソッドに渡されたブロックを呼ぶ方法には2通りあります。 def m1 yield :m1 end def m2(&block) block.call(:m2) end m1{|a| p a } # => :m1 m2{|a| p a } # => :m2 この2通りのブロック呼び出しの違いについて触れた記事もいくらかあります。*1 *2 主にブロックが渡されていない時のエラーメッセージが違うなどの挙動の違いについて触れられていますが、この文章では両者のYARVでの実装上の差異とパフォーマンスの違いについて書きます。 最初に結論を "可能なら Proc#call ではなく yield を使おう" 「可能なら」とい
ちょっと仕事で adaptive sampling のアレをナニする感じのことを考えていて、ふとヒルベルト曲線順にグリッドを巡回して、素数のインデックスに対応する点にサンプリング点を置いたらイイ感じになるんじゃないかなーと思いついて実験したので書き残しておきます。きっとこのくらいのことは既に誰かが考えているんじゃないかと思うのでご存知でしたら教えてください。 ヒルベルト曲線 ヒルベルト曲線とは一般的により高次元な空間を一筆書きのように巡回する曲線(曲線といってもカクカク曲がってますが)です。日本語のWikipediaの項目 にはあまり情報がないですね……。英語版Wikipediaの項目のほうが多少情報が多いです。まあ2次元だとこのように 2^n 四方のグリッドを、必ず隣合うグリッドを繋ぎながら(4近傍、つまり斜めに跳ぶのはなし)全ての点を通るような辿りかたを作ることができます。 たとえば
Ruby の拡張ライブラリを書く時には、Ruby の処理を呼び出すと例外が発生する可能性があることに気をつけないといけません。たとえば以下のように some_func という関数を呼び出す wrapper method を定義したとします。 extern int some_func(int len, int *ary); VALUE sample_func(VALUE self, VALUE arg) { int *buf; int len, i, result; if (!RB_TYPE_P(arg, T_ARRAY)) rb_raise(rb_eArgError, "arg must be an Array"); len = RARRAY_LEN(arg); buf = ALLOC_N(int, len); for (i = 0; i < len; i++) { buf[i] = NU
ruby trunk changes 統計版というタイトルで、これまで ruby trunk changes で読んできたコミットを分類してみたらどうなったか、という話をしました。 Ruby trunk changes 統計版 View more presentations from nagachika t 懇親会で会う人からみんな口をそろえて「あれはその後どういうオチだったんですか」と訊かれたので、なにかよっぽどおもしろいオチがないといけないような気がしてしまいました。そんなにおもしろいことは用意していなくて*1、全体は複雑なプログラムでも1つ1つのコミットに注目すれば読み易いものもたくさんあるし、間違いだってあるから、みんなコミットを読んでみて、そしてテストもしてみて! という呼びかけでまとめにするつもりでした。 たぶん時間は足りないと思ってましたが、万が一にも超早口になって終わってし
Ruby ではメソッドの最後の式の値がそのまま返り値になります。どこで読んだのか忘れてしまいましたが「明示的に return を書くとちょっとだけ遅いので、不要なら明示的な return を書かずに返り値の式だけ書くのが Ruby 流」という言説があって、その当時試してみると確かに明示的に return を書かないほうがちょっと速いという結果だったので「不要なら明示的な return は書かないのがジャスティス」というのを信条にしてきました。 しかし先日その話をしていて、ふと 1.9 ではもうこの"常識"は通用しなくなってるんじゃないかと思いついたので確認してみました。 benchmark に使ったスクリプトと実行結果は gist に置きました。 https://gist.github.com/935934 明示的な return の有無と、さらに block の中から return する
RazyK をリリースしました。RazyK は Ruby で実装した純粋関数型言語 LazyK の処理系です。 インストール rubygems.org に gems パッケージを登録してあります。gem コマンドでインストールできます。 $ gem install razyk 依存ライブラリ等 以下の gems パッケージに依存しています。 rack ruby-graphviz また ruby-graphviz を利用するためには GraphViz がインストールされていて、dot コマンドが利用できないといけません。 [追記]大事なことを書き忘れていました。Ruby 1.9 でしか動作確認していません。1.8 だと動作しないかもしれません。[/追記] [追記]1.8 で存在しないメソッドを利用していたところがあったので修正して 0.0.1 をリリースしなおしました。[/追記] 使いかた
次のページ
このページを最初にブックマークしてみませんか?
『ruby trunk changes』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く