Ruby

投機実行とOut of Orderはつよいというはなし

fluentdな人達と話していると定期的にRubyのオブジェクト生成が遅いとdisられます。 本質的にしょうがない部分もあるんですが、それにしても遅い部分も結構あるので、おもむろにperf statとperf recordを取ってみましょう。 % sudo perf stat -d ./miniruby …

割り切れてるかの確認を高速化しようとして、コンパイラに負けた話

今日見ていきたいのはtime.cのquo(VALUE x, VALUE y)です。akrさんのRuby における 2038年問題の解決で述べられているとおり、RubyのTimeは内部表現にRationalを使えるようになっているので、その辺を司る部品ですね。 static VALUE quo(VALUE x, VALUE y) {…

Bignumの10進文字列化を速くしよう

んー、花粉症がひどいし、ここはぱーっとRubyでも高速化して景気づけしたいですね。 先日の日記 でRubyとCしか読めないこの日記の読者の皆さんも、アセンブラに親しみが持てるようになったのではないかと思います。せっかくなので、引き続きこの方向で頑張っ…

CRubyとLink Time Optimizationについて

最近、夜寝る前にRubyのベンチマークを眺めたり、仕事の障害時のログを眺めるっていう悪趣味極まりない習慣がついてしまった。まぁ、草木も眠る丑三つ時にこの世の真理を求めて何かを読みふけるって言うのは、この業界にいる人間なら誰しもがやることなんじ…

Visual C++ 14 と Ruby その2

というわけで、Rubyに普通にマージして良さそうな修正は既に入れてしまいつつ、workaroundをPull Request #884 として載せておきました。なんか妙にstack over flowしますが、おおむねtest-allも動きます。 また、Microsoft Connectにfeedbackも書きました。…

Visual C++ 14 と Ruby その1

Microsoft Visual Studio 2015 CTP6がでましたね。VS14ではVisual C++ Runtimeに大きく変更が入るそうで、とてもイヤな予感がしますから、ちょっと様子を見てみましょう。 Azure使いの人はMicrosoft Azure virtual machine galleryにあるVisual Studio Ultim…

Rubyのバージョンについて

前提 Ruby 開発陣がブランチのメンテナンスに割けるリソースは限界がある。具体的には2本 (+trunk) が限界。 現状 1.9.3 と 2.0.0 がメンテナンスされている。年末に 2.1.0 が増える。 利用者のニーズ セキュリティ修正のみのブランチが欲しい (debian や he…

Ruby開発者会議20130727

というわけで、Ruby 2.1 に向けて DevelopersMeeting20130727Japan をしたのです。 開発者会議で何をするかというと、RubyKaigi での見世物の通り、みんなが集まって色んなトピックに対してああでもないこうでもないと言い合うわけです。するとあら不思議、…

Ruby 1.9 で絵文字変換

浅草 jpmobile 会議 なる場で、Ruby 1.9 で絵文字変換したいときはどうすることになるのか説明せよというので、資料として書く。利用者側がどう使うかは Ruby M17N の設計と実装 や るりま の String#encode や Encoding、Encoding::Converter クラスあたり…

正規表現の遅延コンパイル

Ruby 1.9 だと irb の起動が速いとか、いやいや遅いよとかいう話の中で、正規表現のコンパイルがそれなりの時間を食っているという指摘が。それでは、実行時までコンパイルを遅延させればいいのでは?というのが以下のパッチ。もっとも、こうすると正規表現…

NaN - 無限を求めて -

世の中には浮動小数点数というものがあるのだけれど、こいつは便利なような不便なようなやつだ。まぁ、その辺は「まつもと直伝 プログラミングのオキテ 第15回 浮動小数点数の謎に満ちた世界」や「IEEE754 倍精度浮動小数点数のフォーマット」をはじめとして…

正規表現

第6回 Ruby M17N 事始め:正規表現編という記事を書きました。わたしの記事は今回が最終回です。前回と違って、今回の記事はそれなりに需要があると思われるところを書いたつもりだったんですが、意外と反響がない・・・ぞ。受ける記事を書くのって難しいん…

Ruby M17N 事始め:文字コード編

「Ruby Freaks Lounge - 第4回 Ruby M17N 事始め:文字コード編」という記事を書きました。内容としては、種々の文字コード関連の規格をかたっぱしから歴史も含めて解説・・・しようとしたらISO 646シリーズだけで字数が大幅に超過したという。そのため、割…

Ruby M17N 事始め:入門編公開

Ruby M17N 事始め:入門編 が公開されました。事前に読んでコメントをくださった方はどうもありがとうございました。下の EUC ネタは実は次回のネタのメモだったりする。っていうか、まだまとめられてないよ!まぁ、この記事で言いたいことは、Ruby 1.9 をい…

Rubyist Magazine 0025 号

Rubyist Magazine 0025 号 がでました。今回は事実上 Ruby 1.9.1 リリース記念号と化しています。 わたしも久しぶりに Ruby M17N の設計と実装 という記事を書いています。「〜の設計と実装」というタイトルはよく BSD 方面で用いられているもので、「The De…

Ruby 1.9.1 リリース

Ruby 1.9.0 のリリースから 1 年と 1 月、ついに Ruby 1.9.1 がリリースされました。Ruby 1.9.1 では基本的に Ruby 1.9.0 で積み残していた点や、不具合の修正、違和感のあった仕様の修正などが行われています。 Ruby 1.9.0 は非常にプレビュー色の強いもの…

Ruby 1.9.1 TODO

変換テーブルの追加 (Citrus から頂いてくるだけだけど) encoding の追加 (携帯電話系がメイン、JIS X 0213 系はどうしようかね) rdoc のデフォルト encoding を US-ASCII に(やっぱりわたしのタスクなんかね) StringIO の RubyM17N化

Ruby transcode と Citrus iconv

そーいえば、Ruby 1.9 の日本語系 encoding の変換テーブルは Citrus のものを使うようになりました。enc/trans を覗くと CP とか JIS ってディレクトリが。現状ロジックはほとんど使ってませんが、ある程度は取り込まれていくことでしょう。

Ruby/Iconv と Citrus iconv

「Citrus iconv API使ってない」わけでもなくて、Iconv.list あたりで微妙に使ってます。

「コードポイント」は何ビットか

Unicode だと 21bit なんですが。 まぁ、Ruby にもGB18030が 32bit フルに使うので、signed int だと涙目って話はありまして。というか、あったが、codepoint codepoint 連呼する人々がいるんで怖くなり、あわてて unsigned int に直したので、関係する方々…

emacs-mule

Ruby 1.9.0-4 がリリースされました。今回実装されたのは主に以下の通り 新クラス Encoding::Converter (stateful encoding 対策だと思う) universal newline (うささんとこが詳しい) まぁ、その辺は実装者の方が詳しいので譲るとして、NEWS に書き忘れた em…

Ruby のサポートレベル

ruby のメンテナってのがいないとサポートプラットフォームから外されるらしい。 http://diary.imou.to/~AoiMoe/2008.08/late.html#2008.08.21_s01_p02 「サポートレベル」の定義、1.9.1のサポート予定プラットフォーム、メンテナ募集 のことでしょうな。外…

Ruby や鬼車の stateful encoding

そいや鬼車ってstateful encodingサポートってどうなんだっけ。 Ruby M17Nがstateful encodingは扱わないとかいってた記憶があるから対応してなさそうだな。 http://www.hi-matic.org/diary/?20080806#06-1 鬼車は statefl encoding はサポートしていません…

RubyKaigi 2008 Ruby M17N

発表資料置き場 概論や変更点の話が多かったせいで難しい印象をもたれてしまったかも。 もっと実例を増やしたほうがよかった気もするけれども、現時点ではこんなものかなぁという気も。何はともあれ、おいおい情報を追加していかねば。

仮引数名のリスト用のテスト

使い方代わりのテストケース。 #!/usr/local/bin/ruby19 require 'test/unit' def foo(a, b);end class TC_ProcParams < Test::Unit::TestCase def test_proc assert_equal([], proc{}.parameters) assert_equal(["a", "b"], proc{|a,b|}.parameters) assert…

仮引数名のリスト

Ruby においてキーワード引数の話は定期的に出るネタで、先日某 IRC でもその辺について話していたのですが、その中で、とりあえず method.arity みたいな感じで仮引数名のリストを取れたらいいんじゃないかという流れになったので、パッチにしてみました。 …

Ruby 1.9 の magic comment

magic comment ですが、端的に言えば Python と同じです。異なるのは、emacs 風の -*- coding: euc-jp-unix -*- の -unix をちゃんと捨ててくれる点くらいでしょうか。これもあくまで現在の実装になります。

Ruby 1.9 の string literal encoding

string literal encoding とは文字列リテラルのエンコーディングです。文字列リテラルはさらに、通常のスクリプトファイル内のものと、-e や stdin から与えられるスクリプト内のものに分けられ、両者でデフォルトの値が異なります。この辺の詳細は [ruby-de…

Ruby 1.9 における replica と alias の違い

端的にいえば以下の通り。 replica 「encoding」を定義する alias 「encoding *名*」を定義する 図にすると以下のような感じ。 鬼車(CES) OnigEncodingSJIS │←────────────────┐ ───┼─────────────────┼────────────── │ │ Encoding (文字集合+CES) │ │ #<Encoding:Shift_JIS> ─(</encoding:shift_jis>…

RubyM17N について

RubyM17N は現在「コードが仕様」な面が多いため、わたしが知っていることについて書き残しておくことにする。と言っても、わたしも追いかける身なので間違ってる点はあるだろうので、そこはご了承を。

Ruby から Win32API を叩いて文字コード変換

意外と需要があるんじゃないかと思って書いてみた。Ruby 1.9 用です。Codepage は Code Page Identifiers あたりを見ればいいのですが、この API では全て叩けるわけじゃないので、改めて MLang 版を書くかも。

skf.so

MinGW でも動くようになったので安心し、ふと NetBSD でコンパイルしようとする・・・と、失敗する。えーーー。とりあえず NetBSD の make が skf の Mac OS X 対策に当たってエラーをはいていることが判明。 しかし、まだエラーは止まらない。なんで RSTRIN…

色付け

Peggy に Ruby の色付けの更なる強化を頼んだはいいものの、インタプリタの「正しい」解析がわからなければしょうがない。というわけで、Ripper を使った Ruby の色付けプログラムはないかと探してみる・・・。が、ないのか・・・? Hiki には attach_rb と…

String#each_char

rubyco さんのところで、String#each_char って便利じゃない?って話が出ています。 これはすでにjcode.rbに存在しますね。組み込みにしようよと、まつもとさんに提案したこともあります。って、ここで String#each_char は HEAD に入れますとあるのに今も入…

文字を数える

artonさんの出題と解答例とか。以下のような解き方もおもしろいかな。もちろんUTF-8決め打ちならkconv不要。 require'kconv' "日本語".toutf8.unpack('U*').sizeArray#injectは凄い便利なので、artonさんのString#char_countも以下のように書き換えられます…

RubyのM17N関連トピック

Matzにっきより [Ruby]1.8.1「文字列はエンコーディングを指定できるように(M17N化)」 [M17N]Citrus Project「今回RubyのM17Nと銘打って実装したい部分は、「各種エンコーディングを変換することなく行う文字列操作」 [M17N]文字オブジェクト「「文字」に対…

Ruby/Encode Draft

はじめに 現在、RubyはnkfのラッパーモジュールであるNKFを用いたKconvモジュールが、文字エンコーディング変換の標準となっている。しかし、Kconvはその変換の実体であるNKFの実装を強く意識したものとなっており、その過去から逃れることができない。 また…