タグ

ブックマーク / soutaro.hatenablog.com (17)

  • 「Praggerリリースプロジェクト」っていうタイトルのチャットなんだから、Praggerの話しません? - soutaroブログ

    ロゴ決めるとかさあ。ちなみに私の草案。SafariのRSSアイコンっぽくしてみました。でもPraggerはRSS(あんまり)関係ないよ。 これについて ちょwwwid:soutaroがスターつけてるしwww みたいな話を目にしたので、一応コメントしておこう。 そもそも竹内先生とかハッカーとかLispとか、そういうのはどうでもいいと思ってる。(普通に大学とかでわれわれが目にする研究者の人で、プログラミングできな人なんていないとは思うので、ちょっとあんまり良くない言いようだとは思うけど。)なので、それはおいとく。 プログラミングが好きな人、プログラミング言語が好きな人が一定数いるなかで、型システムとかモデル検査とかそういう話に興味を持ってくれる人は、ずいぶん少ないと思っている。いや、もちろんある程度いるのはわかってるけど。さらにBlogとか書いてる人って、少なくなるような。(まあ、これとこれ以

    「Praggerリリースプロジェクト」っていうタイトルのチャットなんだから、Praggerの話しません? - soutaroブログ
    sshi
    sshi 2009/01/17
    (型の話らへん)そういう問題意識は全く持ったことがなかったなあ
  • 定数について考える - soutaroブログ

    A = 3 class A end class B < A end これはどっちも実行時エラー。クラスはClassじゃなくちゃいけない。まああたりまえ。 A = Class.new class A end class B < A end これは行ける。これもあたりまえ。 じゃあ、これは? Class = 1 class A end class B < A end これも気になる。 Object = 1 class A end class B < Object end Class.newとclass構文の違いがまた一つ明らかになりました。 あと、こういうのもやってみた。 class A end class B < A end B.ancestors[1].object_id A = 100 B.ancestors[1].object_id 定数周りはややこしいなぁ。(普通に使ってるぶんには、

    定数について考える - soutaroブログ
    sshi
    sshi 2008/11/18
    うぎゃー。これはどんな答えになっても嫌な気持ちにしかならない気がする。確かめるのがこわい/Rubyの定数(特にクラス名とかぶる時について)
  • 学生のうちに知っておくべきOCamlのStructural Subtypingのこと - soutaroブログ

    ※コメント欄参照のこと OCamlの型システムを見てると、Structural PolymorphismとStructural Subtypingという良く似た言葉が出てきます。この二つは一体なにが違うんでしょう。そもそも、OCamlってサブタイピングあったっけ?とか。そういう話。 OCamlで言うところのStructural Subtypingっていうのは、いわゆるSubtypingではありません。少なくとも教科書(TAPLとか)に載ってるSubtypingあり型システムよりも、かなり非力です。 偉大なるGarrigue先生のOCaml NG集に、Structural Subtypingの型付け規則が書いてある。これを見ると、関数型に関する規則が無いことがわかる。あんまりさらっと書いてあるので、一瞬、自明だから省略したのかと思いそうになるけど、そうじゃない。 試してみよう。 # ( Ob

    学生のうちに知っておくべきOCamlのStructural Subtypingのこと - soutaroブログ
    sshi
    sshi 2008/08/07
  • メソッド定義を考える - soutaroブログ

    1.クラスにメソッドを定義する class Object def f() ... end end Object.instance_eval { define_method(:f) { ... } } 2.オブジェクトのクラスにメソッドを定義する a.class.instance_eval { define_method(:f) { ... } } 3.オブジェクトに特異メソッドを定義する def a.f() ... end class <<a def f() ... end end (class <<a; self; end).instance_eval { define_method(:set) {|x| @y = x } } なにをプリミティブだと思うべきだろうか 以上から、def構文よりもdefine_methodの方が一般的であると考えられる。(instance_evalもプリミテ

    メソッド定義を考える - soutaroブログ
    sshi
    sshi 2008/07/25
    そうそう昔似たようなこと考えたけど、define_methodとdefってけっこう違うんだよね。正確にはブロックと(defで定義された)メソッドの違いかもしんない。
  • どうなんだこれ - soutaroブログ

    サブセッションで話します. まだ,一行もスライド作ってないし,そもそもビルドできなくなってるし(ちょっと前にocamlbuild使おうと思ってごにょごにょやってて,諦めた),Mercurialに移行しようと思ってそのままになってるし. ちなみに最近は何をやってるかと言うと,修士の学生といっしょにJavaScriptについて考えていたり,Rubyの意味論をちゃんと書こうとしていたり,Tunisiaに行ったときの話の論文を直していたり,研究室のWebサーバ(Plone)のアップグレードを考えていたりしています.

    どうなんだこれ - soutaroブログ
    sshi
    sshi 2008/06/19
    「Rubyの意味論をちゃんと書こうとしていたり」
  • 動的型の言語では以下のようなプログラムの問題を検出できない、という指摘 - soutaroブログ

    こんな感じか. % cat -n hoge.rb 1 def test(a, b) 2 a + b 3 end 4 5 6 def main() 7 if ARGV.length > 3 8 test(1, test()) 9 else 10 test(1, 2) 11 end 12 end 13 14 Process.exit(main()) % ./truby hoge.rb hoge.rb:8: number of arguments mismatch(ArgumentError) hoge.rb:10: number of arguments mismatch(ArgumentError)

    動的型の言語では以下のようなプログラムの問題を検出できない、という指摘 - soutaroブログ
    sshi
    sshi 2008/02/26
    やっぱりtrubyは格好よいと思うのです
  • オフサイドルールの処理 - soutaroブログ

    予習編.たまーに,YAMLのパーサとか欲しくなるんだけど,インデントの処理をどうやったら良いのかよくわからなくなって困っていたんだけど,勉強になった. Haskell 98 Syntaxにこと細かに書いてあるので,適当に実装してみた. http://svn.soutaro.com/has/tags/offside-rulesにありますので,適当にチェックアウトして,ocaml-3.10とかfindlibとかextlibとかインストールしたうえでmakeしたらできます.標準入力からHaskellプログラムを読み込んで,オフサイドルールを処理したやつ,つまり適当に{}とか;とか追加したトークン列を出力します. let fac3 0 = 1 fac3 n | n > 0 = n * fac (n-1) みたいのが, { let { fac3 0 = 1; fac3 n | n > 0 = n *

    オフサイドルールの処理 - soutaroブログ
    sshi
    sshi 2008/01/24
  • 「OCamlなどでは可能」は間違い - soutaroブログ

    せっかく型推論があるのだから、指定などさせず、「xに対してisClosedとcloseが呼ばれているから、xの型は〜」ときちんと推論してほしいものだ。実際にOCamlなどでは可能なのだから。 Matzにっき(2007-11-22) OCamlでできるのだから〜というのは,ちょっとまずい. 例にある, let safe_close io = if not io#closed then io#close();; は良いのですが,一般的には上手く行かないでしょう.OCamlで推論できる型はJavaとかで書ける型よりも,相当制限されていることは考慮に入れるべき. interface A { void f(String s); } というJavaの型は,OCaml風の構文で書くと, < f : ∀ 'a <: String . 'a -> unit >みたいになります(<:はSubtypingだと思

    「OCamlなどでは可能」は間違い - soutaroブログ
    sshi
    sshi 2007/12/19
  • 愚痴っぽい話 - soutaroブログ

    Webアプリケーションセキュリティフォーラム - Journal InTime(2007-07-05)の資料をぼけーと眺めていて気づいたんだけど、Duck Typingの項の説明に「アドホックな多態」っていうのがあるんだけど、これってやばくないかなぁ。これを英語にすると「ad-hoc polymorphism」にでもなるんだと思うんだけど、普通「ad-hoc polymorphism」っていうとC++とかJavaとかのオーバーローディングみたいなことを指す。まあ、多態っていうと「sub-typing polymorphism」のことを指すというのが、この界隈のコンセンサスみたいなのであんまり気にしなくても良いのかもしれないけど、そのうちADTとかOOPLみたいな混乱を招きそうだなぁ、と思った。 あとRubyは型無し(Untyped)な言語で良いような気がする。専門家の間でも議論が発散しがち

    愚痴っぽい話 - soutaroブログ
    sshi
    sshi 2007/09/21
  • 入門OCaml - soutaroブログ

    当は発売日に紹介記事を公開しようと思っていたのですが、うっかり忘れていました。 入門OCaml ~プログラミング基礎と実践理解~ 作者: OCaml-Nagoya出版社/メーカー: 毎日コミュニケーションズ発売日: 2007/05/22メディア: 単行(ソフトカバー) クリック: 59回この商品を含むブログ (31件) を見る 内容は、スタンダードなプログラミング言語の入門書になっていると思います。OCamlのいろいろな機能を、サンプルプログラムで紹介していく、というスタイル。それぞれの機能の紹介は駆け足になっていますが、まあ対象とする読者(JavaRubyといった普通の言語には十分親しんでいるプログラマの人)からすれば、十分じゃないかとも思います。執筆されたOCaml-nagoyaというのは、名前からわかるように名古屋のサークル(?)でOCamlの勉強会を定期的に開いてらっしゃるよ

    入門OCaml - soutaroブログ
    sshi
    sshi 2007/05/26
    ほしいな。かうかな。
  • 正規表現からその正規表現にマッチするような例を生成する - soutaroブログ

    当にやりたいことは、 型から、その型を持つようなRubyプログラムを生成するなんだけど(というかこれはHaskell界隈の人が喜んでやってるやつだよな、つまんね)、とりあえず正規表現で考えてみてた。 正規表現は有限状態オートマトンになるわけで、ループがあるとやだなぁ、とか考えてたんだけど、研究室の後輩(オートマトン屋さん)に相談してみたら、少なくとも正規表現に限定してしまえば簡単になると言われた。確かに、よく考えてみれば、ループがある場合は*とかで明示されてる。そういうわけで30分くらいで作ったプログラム。 実行例: $ ruby regen.rb /red|blue|green|(#[01234567890ABCDEF][01234567890ABCDEF][01234567890ABCDEF][01234567890ABCDEF][01234567890ABCDEF][0123456

    正規表現からその正規表現にマッチするような例を生成する - soutaroブログ
    sshi
    sshi 2007/05/17
    「haskell界隈の」ってやつは、テストケースを自動生成してくわせるやつのことかな。名前わすれてしまった。/いやしかしこれはおもしろい。/jsでパーサコンビネータ書こうと思ってたので組みあわせてなにかできんかな
  • Gauche Night - soutaroブログ

    gauche.knightか。なるほど。 C言語より速いScheme処理系って、えーと名前なんて言ったっけ、全部のプログラムを眺めてフロー解析したうえで最適化すれば、確かに原理的にCより速くすることができるわけで、すごいなぁ、とか思った。コンパイルに時間がかかる、ということだったけど、実際どのくらいかかるんでしょう。 あった。Stalinか。http://cobweb.ecn.purdue.edu/~qobi/software.html どのくらい時間がかかるかはわからないなぁ。手元で試してみるしかないか。最近、Soft Typingとかフロー解析とかをちょっと調べたところだったので、興味深いと思った。 あと、Schemeのマクロがわかった。Schemeのマクロと、たとえばcamlp4を比較した場合、Schemeのマクロは「そのプログラム中で定義された関数をマクロの中で使える」のが便利だな

    Gauche Night - soutaroブログ
    sshi
    sshi 2007/05/10
    ああ、そうそう Stalinは気になりますよね!
  • A soft-typing system for Erlang - soutaroブログ

    世間ではErlangがはやっているらしいので、なんとなく最近読んだ論文の話でもしてみる。 http://www.erlang.se/workshop/2003/paper/p56-nystrom.pdf Soft typingっていうのは、このへんの論文から始まる型システムの話で、要するに「動的型付けの言語(Schemeとか)を型検査してみよう!」という話である。このFaganの論文におけるモチベーションは、動的型付け言語のruntime型検査をできるだけ省略したら速くなるんじゃねえの?というもので、Schemeプログラムで5割以上の型検査を省略できる例が紹介されていたりする。 MLやHaskellなんかの型システムでは、型の不整合によるクラッシュからプログラムを守るすべは型推論、つまりコンパイル時の型検査しかないので、確実に型の整合性が取れているプログラム以外はすべてrejectする。一

    A soft-typing system for Erlang - soutaroブログ
    sshi
    sshi 2007/05/08
  • HatenaTail - soutaroブログ

    自分が今見ているページの関連エントリをHatenaTailから取得するブックマークレットを作ってみました.別のウィンドウにHatenaTailの画面を出すにはどうすればいいんでしょう?そんなのムリ? HatenaTailで関連エントリを調べる つーか,はてなだとブックマークレットは書けないみたいなので,こっちで(http://soutaro.com/hatenatail.html). ソースはこんな感じ. javascript:(function(){ document.location='http://hatenatail.com/related/' + encodeURIComponent(encodeURIComponent(document.location)); void(0); })();というかべつにソースは,とか言うほど大したことをやってるわけじゃなくて…encodeURI

    HatenaTail - soutaroブログ
    sshi
    sshi 2006/12/25
    おおー。こういうのが欲しかった。助かります。
  • ■ - soutaroブログ

    Schemeにおいてソフトタイピングが成功しなかった*1理由というのは,Schemeコアにはデータ構造がリストしか存在せず,組み込みデータ型の取り扱いが大きな問題になっていたからではないだろうか.リストって難しいし. Rubyでも,やっぱり組み込み型の取り扱いは問題になるわけだが,その他のユーザが定義するクラスなどの構造が自明でないくらい複雑になるため,相対的に小さな問題になる.ユーザーが普通に定義するクラスがそれなりに解析できれば(できるはず),それなりに使いでがあるものになると信じている.もちろんリフレクションなどは依然として問題になるわけだが,それは適当に注釈を付ければ良い.あんまりカジュアルにリフレクションやevalを多用するというのは,やっぱり推奨されるスタイルにはならないだろうし. 'a -> 'bみたいな「なんにも言ってないじゃん」というメソッド型が頻出するObjectとかの

    ■ - soutaroブログ
    sshi
    sshi 2006/11/29
  • 大堀先生の偉大さについて - soutaroブログ

    先日筑波大で「プログラミング言語処理系に関するコロキウム」というのがありまして、大堀先生とささださんがお話をしてくださいました。 私は、大堀先生は初めてだったのですが、噂通りの過激偉大なお言葉の数々に感動しました。このお言葉を知る人間が、一部の研究者だけと言うのはもったいないことだと思いますので、手元のメモから一部を掲載したいと思います。ちなみに、大堀先生がおっしゃることには「ソフトウェア科学会の招待講演よりも、かなり過激さを取り除いた」とのことです。 (MLでは) 「バッファオーバフローなど、そもそもトピックですらない」 (MLの素晴らしさを語っている最中に、Rubyなどのスクリプト言語を評して) 「小さなプログラムでは、若干生産性が高いかな」 (SML#の実装に関して) 「半分くらいのコードは僕が書いていた 個人的には全部僕が実装をやりたかった」 大堀先生から訂正のコメントをいただきま

    大堀先生の偉大さについて - soutaroブログ
    sshi
    sshi 2006/09/27
    SML#が使いたくなってしまったよ
  • 2004-11-17

    Rubyで型推論してみる話. x.foo(y.bar())みたいなrubyの式があったときに, {x:sig1, y:sig2}, {sig1⊇{foo:sig3→sig4}, sig2⊇{bar:()→sig3}}, sig4 といった出力をするプログラムはできた. この出力は,xがsig1というクラスに属していること,yがsig2というクラスに属していること,sig1はfooというメソッドを含んでいること,sig2はbarというメソッドを含んでいること,そして式全体の型はsig4というfooの返り値の型であることを意味している. ここで,出力の組を,「型環境×型に関する制約×式の型」と考えることにする.素朴なPTSに加えて,型に関する制約が加わった形になる.Rubyのような言語では,制約が最も重要な情報と言えよう. unificationをなにもしていないので, foo(x,x)みたい

    2004-11-17
    sshi
    sshi 2006/04/09
    tRubyにはじめてコメントつけた日。亀山先生の名前がでてきてびびっている。yoriyukiさんともここでニアミス(コメント欄のみだけど)
  • 1