2007年11月30日金曜日

BlockContext と BlockClosure

先日do~whileについて書きましたが,すみません.BlockContext Classです.

言い訳を言ってしまうと,method finderで検索したときにBlockClosureが見つかったので・・・.
BlockはBlockContext Classです.


さてここで,不思議におもったのはBlockContext と BlockClosureとありますが,これはなんのためにあるのでしょうか.


Closureでないみたいです.
関数型言語をほとんど知らないので,ラムダとClosureをしっかり理解していませんが,Squeakのブロックがそういうものだと思っていましたが,これはどうやら間違い?なのかもしれませんね.

う〜ん,VisualWorksもそうなのかな?

さて心配する前に目の前の卒研を取り組まないと.


参考 : ど素人のためのど素人によるSqueak入門

2007年11月29日木曜日

Seaside2.8

VisualWorksでSeaside2.8を動かすと速いと思っていました,どうやら2.8そのものが早いようです.
Squeakにも2.8をようやく入れてみました.ブラウザでのHaloがかわいいデザインになっていました.
とりあえず,サイトで変更点をさらっと読んでみる.(英語だから大変w)


The new backtracking system

Backtracking is no longer done by sending #registerObjectForBacktracking: or #registerForBacktracking but by implementing the #states selector. This allowed us to simplify and improve a lot of code. It's also very similar to the existing #children. You can have a look the implementors to see examples.


#registerForBacktracking がなくなり,
WAPresenter>>states でCollectionでbacktrackしたいオブジェクトを返せばいいようです.

children風でいいですね.
2.8はとくに何も入れなくて,日本語も扱えています?

ちょっと強い記事を読んだのですが,

Squeakers' Night in 未来パーティ 2.0 - yojik no life

その中に
P.S. そんなに活用している「継続」ですが、将来廃止される予定です!!

えええ!本当ですか?
かなり困ります.

今のうちに他の継続も探さないといけないのかな・・・.

2007年11月28日水曜日

Squeakでdo~while文

Javaを勉強しています.
do~while文がありました.

Squeakでdo~whileってあるのかなって思ったので(まぁあると思いますがw),探してみました.
BlockClosureクラスだと予測.
ありましたw

(BlockContext Classでした.すみません)


counter := 0.
[counter := counter + 1.
Transcript cr;show:counter]doWhileTrue:[counter < 10].

1
2
3
4
5
6
7
8
9
10

OKですね.
ついでにBlockClosure>>whileFalse:というのも発見.
面白いですね.

2007年11月25日日曜日

オブジェクト指向をもう一度勉強する

オブジェクト指向をもう一度勉強したいと思います.

なんとなくから,しっかりとした知識にしたいそう思っているのに実行できない.
無理をしてでも,やってみよう.

ちょっと個人的な用でJavaも勉強することになった.
Squeak Smalltalk,Javaを使いながらもう一度OOLを考えていきたい.

まずは計画.

2007年11月24日土曜日

Squeakで入力,出力

あるプログラミング言語の本を読んでいたら,気がついたこと.

入門書の始めに出力と入力があるが,出力はいいとして,入力というのはプログラム初心者にとって本当はかなり高度な話ではないかと思った.


そうではあるものの,Squeakで入力した文字を出力することをやってみた.

|io|
"入力"
io := FillInTheBlank request:''.
"出力"
Transcript cr;show:io.

どっかの言語と比べると非常に簡単だ.

2007年11月23日金曜日

VisualWorksの謎 [その2] の答え

前回まで書いていた謎について,紹介してあるブログを発見.

名前空間 - VisualWorks

やはり名前空間のようです.
詳しくは紹介したサイトに書いています.
ただ途中から僕のレベルでは途中からちょっと分からなくなりました.

VisualWorksをよく分からないうちに新しいことを学ぶからでしょう.
もうちょっとスキルがついたら読もうと思います.
オブジェクト指向も最初は難しいと思いましたが,今ではSqueakのおかげで普通に使えます.(むしろ他の言語はもう忘れて・・・w)

やっぱりSmalltakは楽しい.

2007年11月17日土曜日

VisualWorksの謎 [その2]

VisualWorksも使ってみたい!ということでダウンロードしたのはいいのですが,Squeak Smalltalkとはやはりちょっと違う様子.

VisualWorksのクラス定義はCore.Timeは

Smalltalk.Core defineClass: #Time
superclass: #{Core.Magnitude}
indexedType: #none
private: false
instanceVariableNames: 'hours minutes seconds '
classInstanceVariableNames: ''
imports: ''
category: 'Magnitude-General'

となっていた.

Squeak Smalltalkのように

Magnitude subclass: #Time
instanceVariableNames: 'seconds nanos'
classVariableNames: ''
poolDictionaries: 'ChronologyConstants'
category: 'Kernel-Chronology'

ではない.

う〜ん名前空間みたいなのがあるようですね・・・.
プール辞書がない?,privateみたいなものが存在しています(これはJavaのあれなのか?).

Squeakの親戚といっていても,似ているようで似ていないのかな.

おとなしくSqueakだけにしようかな.

2007年11月16日金曜日

VisualWorks謎

Seasideを入れたあと,Timeクラスを使おうとしたらReplace画面が表示された.

Core.Time dateAndTime

としないといけなくなってしまった.
このCoreはどういう意味なんだろう.




さて今日ももう寝なければ・・・.

VisualWorksにSeaside

sumim'sさんにVisualWorksについて教えていただいてから(今のSmalltalkは? - 参考),すごくVisualWorksが気になっています.

前回入れたVisualWorksにSeasideを入れても見ました.
Public RepositoryからSeasideWebforKitをloadで完了.

SeasideのSample codeとして含まれているalltest内のlinkを実行.
おお!何か早い.
Seaside2.8ということもあるかもしれませんが,すごくいい反応です.
Squeakでやるのはもちろんですが,こちらもいいですね.

春休みにVisualWorksで何か作ってみるとのいいかもしれません.

2007年11月15日木曜日

パッケージをネットワークから取得する言語

VisualWorksのPublic Repository,Squeak SmalltalkのSqueakMapを見ていると,本当に僕みたいな人にはありがたいと思います.

RubyもGemsがあって便利ですが,僕にはこちらの方がいいですね.
なんだかんだ言って,僕もやはりGUI世代なんでしょうね・・・.


それにしてもRubyは春以来勉強していないので,ほとんど忘れてしまいました.
やっぱりSqueak Smalltalkを見ているとこちらの方が落ち着くので,結局卒研もそちらなのですが,やはり他の言語も書けないと世の中に通じないのかなって思ってしまいます.

もっとSmalltalkを理解するためにLisp,Haskellかな.
それともやはりJavaかC++をやるべきだろうか.

Pythonというのもいいのですが,やはり僕の今の能力だとたくさんの言語を学べる力がないのでどれかに絞りたいと思っています.

それにしてもプログラミング言語というのは本当に面白いですね.可能であれば全部知りたい.

2007年11月12日月曜日

Transcript

先日の丸めを再び調べ始めているのですが(う〜ん,よくわからない・・・),ちょっと本当の親戚VisualWorksを使ってみたのですが,そのとき気がついたのがTranscirptがSqueakと少し違うようです.

Squeakは例えば
Transcript cr;show:1.

で引数にobjectを取れるのですが,
VisualWorksはStringのみみたいです.

Transcript cr;show:1. "error!!"

VisualWorksでSqueakみたいにTranscriptを使うには

Transcript cr;printOn:1.

でよさそうです.
他の方法としてはSpTranscript>>(class)show:でもよさそうです.

SqueakはTranscriptはTranscriptStreamでできているようですが,VisualWorksはTextCollectorでできているみたいです.

ちなみにSqueakのTranscriptStream>>show:のコメントには

"TextCollector compatibility"

と書いてあります.
いつもお世話になっているmethodですが,こうやって見てみると面白いですね.

Squeakの直感的な感じもいいですが,VisualWorksの豊富なClassたちも魅力的ですね.

言語を作る人ってやっぱりすごいなと思います.

さて丸めを調査しないと・・・.

2007年11月10日土曜日

丸め

大学の友人にSqueakで少数以下2桁まで表示させるにはどうすればいいかと聞かれたので,

1.2450 printShowingDecimalPlaces:2 '1.25'

よしと思っていたのですが・・・

1.2347 printShowingDecimalPlaces:2 '1.22'

なんだこれはと思い.大学で学んだ工業規格だと確かこれだと1.23になるはず,他にないか探索

1.2347 asScaledDecimal:2 1.23s2
ScaledDecimalとして返ってくる,何かよくわからないな.返ってきたものはどうやって扱えばいいのか・・・.

他ので実験
1.2450 printShowingDecimalPlaces:2 '1.25'

1.2350 printShowingDecimalPlaces:2 '1.22'
よくわかりません.
偶数丸めでもなさそう・・・.

1.2350 asScaledDecimal:2 1.23s2
1.2450 asScaledDecimal:2 1.24s2

こちらもそうじゃないみたい.

とりあえず,もう寝ないといけないので(学生は学生なりに忙しいのです)明日にします.