2004-10-01から1ヶ月間の記事一覧

最初の Smalltalk のプロトタイプは 1000 行ほどの BASIC で組まれていた

っていう話は有名なんですが、どこかで見かけた文章の英語がちゃんと読めなくて確認できていなかったんですね。でも、Smalltalk システムっていつごろから仮想マシンを使い始めたんだろう…という話を調べているうちにたまたま行き着いた Smalltalk-80: Bits …

特異メソッドの例にはどんなのがいいか

特異メソッドというのは、インスタンス特異的メソッドの Ruby におけるローカルな呼び名。Rubyist Magazine - 0002号で、特異メソッドの記事にある七並べを使った特異メソッドの例があまりよくないという話があるようです。個人的には、特異メソッドの一番シ…

「オブジェクト指向プログラミングとは何か?」[Stroustrup87] (PDF, ただし '91 改訂版)

OOP

関連:[OOP] オブジェクト指向の概念の発明者は誰ですか? くだんのオブジェクト指向3点セットの元になったともくされる論文のメモ。抽象データ型に加えて、以下の機構がオブジェクト指向プログラミングをサポートするのに必要とされる。 特殊な関数呼び出…

抽象データ型のスーパーセット(カプセル化+継承・多態性) vs メッセージ指向

OOP

…の構図ってのは、クラスベースオブジェクト指向 vs プロトタイプベースオブジェクト指向 の構図にちょっと似ていますね(構図だけでなく、クラスは必須か否かを扱うだけに、完全にオーバーラップする対立点、うがった見方をすれば代理戦争的側面、もありそ…

お定まりの決めつけにいちいち反応するのも ATP の無駄遣いなような気がしますが…

OOP

Smalltalk で抽象データ型のスーパーセットをまったく無視しているとか、C++ でメッセージ指向できないとか言っているわけではありません。っていうか、まず、文献欲嫁?

オブジェクト指向に不幸があるとするならば…

OOP

つらつらとおもんみるに、ケイ(Smalltalk)が“それ”を「メッセージ指向」と言い続けなかったこと、ストラウストラップ(C++)が“また別のそれ”を「クラス指向」と言い換えなかったこと、に尽きるかな、と。

最近見つけた…

OOP

これ(オブ脳 vs アンチ)や、ちょっと古いけどこれ(Java は純粋 OOPL ?)なんかも、その典型でしょうね。上の前提に立てば、どちらも言っていることは正しい…って感じがしますから。

このごろ、Web メールのメールボックスらしきリファラが多いと思ったら…

OOP

オブジェクトの広場の ML で熱いオブジェクト指向談義が展開されているのですね。1980 年代以降の OOD/OOA からすると、私の 1960 年代までさかのぼる オブジェクト指向(より厳密には OOP)の起源に関する研究(ぉぃぉぃ…)成果は、“古典”のひと言でうち捨て…

「Smalltalk ではメソッドはオブジェクトではない」の?

こんな感じの言及を幾度か見かけた記憶があるのですが、これって(少なくとも Smalltalk では)“メッセージはオブジェクトじゃない”と言いたかったのですよねぇ…。 いや、それだとメッセージという概念がそもそもない Eiffel で、おかしくなるか…。文脈的に…

SELF や Io の情報をググるには、

self や io では当然駄目なので、selflanguage とか iolanguage とかすると、ある程度(検索ヒットを意識した言及ページを)拾うことができます。SELF についてはさらに、_AddSlots: というプリミティブメソッドをよく使うので、これをキーにする("_addslot…

擬変数

self、super、thisContext、あるいは、メソッドのパラメータ変数やブロックのブロック変数が擬変数(変数のように使えるが、ユーザーが任意のオブジェクトを代入できない。つまり代入できない)であることは、 誰でもある程度、直感で理解できるものですが、…

純粋“オブジェクト指向”言語。ただしこの場合“オブジェクト指向”は (ry

OOP

ある意味“別格”の、つまり、メッセージ指向というパラダイムの有効性を検証するため(だけ)に作られた Smalltalk システムにおける Smalltalk 言語を除けば、個人的には、純粋オブジェクト指向言語と名乗ってよい言語は SELF くらいしか思い付きません。それ…

空だろうがなんだろうが

OOP

文字列は文字列であって、偽か真か以前に、真偽値 にすらなりようがない のように扱えることにそもそも違和感があり…と思うのは私だけでしょうか?w ま、Ruby の条件分岐はオブジェクト指向たることをハナから放棄しており(なお、ここでの“オブジェクト指…

die さんの PostScript 版を強引に (ry その2

無名関数を返さずに、かつ、メソッドにまとめてしまってよいならば、exit もでき、よりシンプルに書けます。 Object >> case: caseArray caseArray pairsDo: [: case : execBlock | (case = self or: [case = #else]) ifTrue: [^ execBlock value]] x挨拶s x…

die さんの PostScript 版を強引に (ry

die さんの PostScript 版 を Smalltalk で。ブロックからは exit できないんで、こねくり回していますが。w case xあいさつ case _ [: exp : array | | result | result _ nil. array pairsDo: [: e : b | (e = exp or: [result isNil and: [e = #else]]) …

Python の例を Smalltalk で強引に書いてみる

某所で Python を使って呈示されている例を移植してみました。でも、Smalltalk だとやっていることや意味は同じでも、雰囲気や使い勝手はがらりと変わってしまいますね。 mySwitch mySwitch _ PySwitch subclass: #MySwitch instanceVariableNames: '' class…

Squeak システムの Smalltalk で switch/case 式

某 Python スレに端を発した switch/case 文の話。ゲンゴァー未満の私は、どっちかというと Googler なのでw、検索で見つけたこちらのCamp Smalltalk の記事をパクって、Squeak システムの Smalltalk に組み込んでみました。 char char _ $b. ^ char switch…

Ruby の range は無限大を扱えるのか…

つらつらと ruby-talk などを眺めていてふと目に付いたこれで、 (0..(10.0/0)).member?(4)るっ、Ruby は 0 で割っても例外をあげないのか、ってか、range は無限大を扱えるのか…とちょっと驚いて試してみる。 1/0 #=> error 1.0/0 #=> Infinity 0..(1.0/0) #…

「継承はサブタイピングではない」[Cook90]

OOP

…のメモ。再帰的な型 T を、 T = µt.F[t]と書くとき、 T = µt.{a:int, c:t, b:t→t} T1 = {a:int, c:T, b:T→T, d:bool} T2 = µt.{a:int, c:t, b:T→t, d:bool} T3 = µt.{a:int, c:t, b:t→t, d:bool}で、 T1, T2 は T のサブタイプだが、T3 はそうではない(型 …

いろいろな意味

マシンパワーが、まだまだ圧倒的に足りない。 いろいろとありそうに思えましたが、結局はこれに行き着きますか(笑)。

はてな:スクイーク(Squeak)について教えてください。

個人的には大好きなスクイークですが、世間では知らない人のほうが多いのもまた事実。 フリーソフトだし、もっと広く使われてもいいような気がするのですが、なぜ一般的に広まらないのでしょうか? なにか理由があるのでしょうか? その辺の事情など詳しく知…