2008年3月29日土曜日

文字列処理

Python,Rubyでは次のことが書けるらしい.

>> 'test'*2
=> "testtest"



研究室のPythonを使っている先輩に教えてもらい.
さらにRubyはできることを知り,ちょっとショック.

ちょうどsumimさんのBlogでも文字列について書かれていたので読んでみると,やはりSqueakではできないようだ.

sumim - [OOPL] Squeak Smalltalk にあって Ruby にない文字列操作

同じことをしようとSqueakで書いてみることに

s:='test'.
x := WriteStream on:''.
2 timesRepeat:[x nextPutAll:s].
x contents. 'testtest'



これでいいのかな.
もう少し考えてみよう.

2008年3月19日水曜日

プール辞書の続き

前回書いたプール辞書についてみねこあさんとUmejavaさんがいろいろ書いてくださったので,本当にうれしい限りです.

[Smalltalk]プール - みねこあ


各クラスは通常2つのプール——Smalltalk辞書と、クラス変数が在るプール を持ち、さらに セレクタ poolDictionaries: で指定したプールを オプショナルで持つことが出来る



えっと,SmalltalkもSystemDictionaryという辞書から作られている.

Smalltalk at:#Smalltalk "print it =>" a SystemDictionary(lots of globals)



クラスから他のクラスについて問い合わせができるのは,Smalltalkというプールがあるのでいうのは納得です.

クラス変数があるプールを持つ



これは,じっくり読むとすごい発見.何気なく使っていますが,裏ではそういう風になっていると考えればいいのですね.

とても勉強になりました.
ただ,なかなか簡単には使うことができなさそうな気もしました.
確か自由自在でも慎重に使うようにということが書かれていたような.

そういえば,TextStyleとTextとかもTextConstansというプールを持っているようですね.

最近,Squeakを曖昧に勉強するのではなくもっとしっかりと勉強しようと思っているのですが,まだまだ入門レベルだな.


2008年3月15日土曜日

プール辞書

ふと,Squeakのプール辞書ってどう使うのか考えてみたのですがよくわかりませんでした.

実際,インスタンス変数,クラスインスタンス変数,クラス変数,一時変数,ワークスペース変数,グローバル変数はおなじみですが,ブール辞書はまったく使ったことがないです.

グローバル変数がDictionaryになったような感覚で思っているのですが,何かしっくりこない.

2008年3月11日火曜日

ガーベッジコレクション

日経Linux4月号のまつもとさんの記事でガーベッジコレクションについて書かれていました.
とても興味深かったので,Squeakについて少し調べてみようと思いました.

「Squeakの仕様を知るには?」と思い調べていたら,Squeak入門(Squeak:Open Personal Computing and Mulimedia)に書かれていました.

ちなみに英語版ならSmalltalk FreeBooksで公開されています.

FreeBooks
oe-tour-sept19.pdf


どうやら,世代別GCとマークアンドスイープのハイブリッドみたいです.
すごいですね.

いきなり難しいことをやろうとはせず,まずは自分のできる範囲から.
「1日30分Squeakを続けなさい」と自分に言ってみる.




研究室にあるSqueak入門をSqueakを知った頃に読んだときは意味不明でしたが,今読むと多少理解できるようになっていました.

読んでいたら,Squeak:Open Personal Computing and Mulimediaが欲しくなってきました.
アルバイトのお金が入ったら買おうと思います.

2008年3月7日金曜日

iPhone Developer Program

iPhone Developer Programが発表されました.

Keynoteの動画をみて,すごく感動しました.
ついに時代はここまで来たことと,それを自分の目で見れたことの喜びは何とも言えません.

ユビキタスな時代も遠くないかもしれません.

僕はiPhoneのアプリケーションは作ることはできませんが,こういうものを間接的に支援(例えばWeb上で)できるようなものを作ることができたらどれだけいいことかと思いました.





iPhone Developer Program

Traitsをやってみる

卒論が終わっても忙しかったのでなかなかSqueak自体の勉強ができなかったのですが,ようやく念願だったTraitsを使ってみました.

TraitsはSqueakで多重継承みたいなことができるようにするための仕組み?のようです.(RubyのMix-inとは違うらしい.)
本当にまだ勉強中なので実態はわからないのですが,非常に興味深いものです.
Squeak3.9から標準装備なので,使ってみました.


まずは,多重継承?(トレイトというべきなのでしょうか)するための定義を書きます.
Smalltalkおなじみの定義を書き換えます.
これは少しとまどいました.

Trait named: #Atok
uses: {}
category: 'Study-Traits'

あとはmethodを定義

Atok>>change
^ '日本語変換が得意です'


これで準備よし.非常に簡単ですね.(当たり前か)

あとはこんな感じでクラスを定義します.
Object subclass: #KanjiTalk

KanjiTalk>>henkan
^ '日本語変換は苦手かもしれません'

----

KanjiTalk subclass: #Kotoeri
uses: Atok
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Study-Traits'

KanjiTalk>>conversion
^ '日本語変換はまぁまぁです'


ここでのポイントはuses: Atokのあたりです.
これを記述すると,Kotoeriクラスにmethodペインにchangeというmethodも表示されます.

最後に実行です.
x := Kotoeri new.
x henkan. '日本語変換は苦手かもしれません'
x conversion. '日本語変換はまぁまぁです'
x change. '日本語変換が得意です'


一応,できたようです.

ちなみにプログラムの内容は実際に思っているわけではありません.
僕もMacユーザですし,イージーブリッジが終了したのでことえりを使っています.

これでまた一つSqueakの魅力が増えました.
あとはMix-inとの違いを知ることと,多重継承で有名な菱形継承とかを調べたらいいのかな.