2001-11-07
λ. wstring
mbとwcの変換部分がイケてない気がする。
- NULを含む文字列を正しく扱えない
-
こっちは微妙なんで後でちゃんと調べようと思うけど、結論から書くと、変換時にはterminating NULを含めて変換した上で、変換結果のterminating NULをRubyから隠すべきだと思う。どっちでも同じように思えるかもしれないけど、statefulなエンコーディングを扱う際に差が出る。たとえば、mbがISO-2022-JPだとすると「ほげほげ」という文字列は「ESC $ B 0x24 0x5b 0x24 0x32 0x24 0x5b 0x24 0x32 ESC ( B」で表され、Cで扱う際の対応関係は次のようになる。
mb ESC $ B 0x24 0x5b 0x24 0x32 0x24 0x5b 0x24 0x32 ESC ( B NUL wc ほ げ ほ げ NUL
2002-11-07
λ. 過去の自分はいつだって愚かなものだ。
λ. 雨がポツポツと。今日は雨は降らないかと思ったのに……
λ. この寒空は今の僕の気分か……
λ. ミクロ経済Ⅱ
レポート提出。
まぁ、どうでも良いのだけど「労働者が1時間あたりに生産できるTシャツの枚数を、労働時間の長さごとに求めよ」という文を見たら、普通「限界生産性」ではなくて「平均生産性」の事だと思いますよーー
λ. 沈没
沈没中...
λ. Lexical File Names in Plan 9, or, Getting Dot-Dot Right
UNIX Magazine 2001年5月号に載っていた日本語訳「Plan 9 における字句的なファイル名 — ".."の正しい把握」を読んだ。
λ. Re: 比重
なるほど。やっぱりコンクリートは人間の2倍以上重いのですね。そういわれてみれば、確かに森博嗣の小説で読んだ事があるような気もします。……『詩的私的ジャック』だったかな。
λ. Enumerable#with_index
Enumerable#each_with_indexって使える場面が極端に限られている気がする。例えばインデックスに依存するような関数でmapしたい時なんかには使うことが出来ないし。いっそのこと、こんな感じなら扱いやすかったのに。
module Enumerable class WithIndex include Enumerable def initialize(orig, from = 0) @orig = orig @from = from end def each index = @from @orig.each{|item| yield(item, index) index = index.succ } end end def with_index(*args) WithIndex.new(self, *args) end end data = [11,18,24,30,35,39,43] data.with_index(1).map{|item,index| item.to_f / index } #=> [11.0, 9.0, 8.0, 7.5, 7.0, 6.5, 6.142857143]
あ、わざわざこんなのを作らなくても、generator.rbのSyncEnumeratorでこないだのFromと同期させてやれば良いか。
……とか書いていたら、[ruby-dev:18651]でzipの話が出ているのに気が付いて驚いた。zipってHaskellのしか知らなかったけどPythonやPerl6にもあるんですね。
2003-11-07
λ. Ruby/TCC
Ruby/FFCall 0.0.2 をリリースしたら、Mitchell N Charity さんという方が Tiny C Compiler というコンパイラがライブラリとしても使えると教えてくれたので、ちょっと試しに拡張ライブラリにしてみた。以下は Tiny C Compiler の付属サンプルをRubyに移植したもの。
require 'tcc' tcc = TCC.new tcc.set_output_type(TCC::OUTPUT_MEMORY) tcc.compile_string <<END int fib(int n) { if (n <= 2) return 1; else return fib(n-1) + fib(n-2); } int foo(int n) { printf("Hello World!\n"); printf("fib(%d) = %d\n", n, fib(n)); printf("add(%d, %d) = %d\n", n, 2 * n, add(n, 2 * n)); return 0; }; END tcc.add_symbol("add", DL.callback("III"){|a,b| a + b }) tcc.relocate foo = tcc.get_symbol("foo", "II") foo.call(32)
このスクリプトを実行すると以下のような出力が得られる。
Hello World! fib(32) = 2178309 add(32, 64) = 96
結構面白いかも。
それから、TinyCCはTinyCC-Win32というWin32移植版もあるそうだ。えとせとら(2003-11-03)とシュッ・シュッ(2003-10-29) より
λ. 知識ベース論
やべー、レポートの提出って今日だったのか。うわー、やってもうた。欝だ。何が最悪かって、わたしゃ昨日日付を確認して来週だなと思っていたのですよ。何を確認してたんだろね俺は。あー、気分最悪。
λ. OBJは等式論理を使ってるらしい。
subtree が有限であるような木を rational tree というそうだ。
λ. 借りた本
- 『経済学を知らないエコノミストたち』
- 野口 旭 [著]
2004-11-07
λ. Fireman vs Bass
ラブ・ファミコン より。ロックマン懐かしいなぁ。「Pest Exterminator」というランクにちと笑った。スクリーンショット
λ. 圏論勉強会開催予定が決定
[haskell-jp:471] 圏論勉強会開催(第一回)によると、圏論勉強会の日取りが決まったそうですよ。
2007-11-07
λ. Twitterにメールから投稿するスクリプト
最近Twitterを始めたyaizawaさんが「なんとたった27行」とか行数自慢(?)していたので、対抗して自分の使っている手抜きスクリプトも晒してみる(^^;
require 'net/http' Net::HTTP.version_1_2 require 'uri' require 'tmail' require 'iconv' mail = TMail::Mail.parse(STDIN.read) status = mail.body status = Iconv.conv('utf-8', mail.charset, status) if mail.charset status.chomp! Net::HTTP.start('twitter.com', 80) {|http| req = Net::HTTP::Post.new('/statuses/update.json') req.basic_auth(ID, PASSWORD) req.body = "status=" + URI.escape(status) res = http.request(req) }
2009-11-07
λ. “A semantics for imprecise exceptions” by Simon Peyton Jones, Alastair Reid, Tony Hoare, Simon Marlow and Fergus Henderson
こないだのPLDIr#3で稲葉さんが簡単に紹介していた論文。
CPUによってはアウトオブオーダー実行によって、単純に逐次実行する場合とは発生するエラーが異なってしまう場合がある。同様にHaskellのような純粋関数型言語でも、プログラム変換によって発生するエラーが異なってしまう場合がある。これがタイトルの imprecise exception の意味。
アウトオブオーダー実行やプログラム変換のような最適化によって意味が変わってしまうのは問題だけど、だからといってこれらを諦めるたり制限することは最適化のための大きな機会を逃すことになる。そこで、そのような変換によって意味が変わらないような意味論をかんがえるというのがこの論文。
まず、ゼロ除算エラーのような、起こる原因と場所がわかっているような例外(同期的例外)は、Haskellでは(手続き型言語における例外とは異なり)浮動少数点数のNaNのように式の値として伝播される(概念的には)。 そこで、式の表示的意味を通常の値もしくは起こり得る(同期的)例外の集合とする。その上で、例外の観察はIOアクションの中でしか出来なくして、この例外の集合から非決定的に一個取り出すという解釈をする。IOアクションの実行の意味論は神託を用いることを許しているので、これは問題ない。
このようにすることで、意味論上の問題もほぼ解決できて、かつ実装上も起こり得る例外を実際に全部集めたりする必要がなく効率的に実装できる。
起こり得る例外の集合を考える際の領域は Smyth Powerdomain の構成を利用しているのだけど、普通の関数型言語の意味論だとPowerdomainはなかなか見かけないので、「おーっ」と思った。
それから、Conclusion が As usual, implementation is ahead of theory: で始まっていて 笑った。
ψ 小澤 [前者は特に問題があるわけでもなさそうなので、このままで行きたいと思います。 後者は修正しましたが、問題なのは引数が..]
ψ さかい [自分で話をruby-extに振っておいて、忙しくて反応できなくてすいませんでした。 で、この変換の件ですが、僕がm..]
ψ 小澤 [get_wcs_sizeとget_mbs_sizeはterminating NULを除いたサイズを返すので、mbs_..]
ψ さかい [なるほど。 確かにこれでも問題ないですね。 # Cも以外と奥が深いんだなぁ # Opaqueなデータ構造をそういう..]