Smalltalk総合 Squeak Pharo at TECH
[2ch|▼Menu]
[前50を表示]
100:デフォルトの名無しさん
13/08/12 NY:AN:NY.AN .net
aTextMorph中で、改行部位は単語の区切りの空白に限るようにすることはできますか?
transcriptやworkspaceがやってるように、行末で英単語が分断されないようにしたいんです。

例えば下のようにダイアログの中に英語を書くと、単語の区切りとは関係なく改行されます。
つまり、行末でaaaaaaaaという単語が、aとかaaとか、途中で分断されてしまいます。

| string |
string := ''.
100 timesRepeat: [string := string, ' aaaaaaaa'].
LongMessageDialogWindow new
textFont: UIManager default theme textFont;
title: 'example';
text: string asText;
open

これを、workspaceやtranscriptみたいに、空白部分だけで改行するようにしたいんです。
どうすればいいのでしょうか?

Pharo1.4を使っています。'UIManager default theme textFont'はMS UI Gothicの10pointです。

101:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
>>100
例によってPharoは使っていないのでハズしていたらごめんなさい。

ちょっと調べてみたのですが、どうもPharo 1.4ではSqueakと違い、Workspaceや
Transcriptであっても単語の区切りで行を改めるようにはなっていないように見受けられます。

これは Paragraph>>#composeAll が常にマルチバイト文字列用の改行位置決めの機構を
使っているせいのようです。したがって、この部分をシングルバイト文字列用の当該機構を
使うように書き換えてやれば、ご呈示のスクリプトは変更無しに単語の区切りで改行される
ようになるはずです。

具体的には Paragraph の composeAll メソッドを探し、multiComposeLinesFrom: という
キーワード部分を composeLinesFrom: に書き換えて、黄ボタンメニューから Accespt (s) します。

102:デフォルトの名無しさん
13/08/18 NY:AN:NY.AN .net
ありがとうございます。>>101
TranscriptやWorkspaceを実際に開くと、単語区切りで行を改めてくれているんです。

英単語だけのダイアログの例を出しましたが、
もちろん日本語のダイアログを出したいこともあるので、
Paragraph>>composeAllを書き換えるべきかも、もう少し考えてみます。

103:デフォルトの名無しさん
13/08/18 NY:AN:NY.AN .net
お役に立てずすみません。Pharo 1.4 ですよね?

URLリンク(www.pharo-project.org)

を念のため落として調べてみたのですが、
やっぱり手元の環境ではWorkspaceは単語で折り返さないようです。

いずれにせよ、単語区切りで折り返すか否かは Paragraph が
何か挙動を代えている可能性が高いので、そこを意識して
折り返さない LongMessageDialogWindow と折り返す StringHolder など
とでコードや設定の違いを調べてみると、答えが見つかるかもしれません。

104:100
13/08/20 NY:AN:NY.AN .net
Paragraphは単語区切り作業をScannerに委譲しているはずですが、
委譲先を選ぶ際にどうも筋の悪いことをやっているように見えて、あきらめました。
実のところ、Pharo2.0を試したら、>>100のダイアログは簡単に単語区切りになったので、
移行しようと思ってます。
ありがとうございました。


なお、再度Pharo1.4を取り直して試しましたのですが、
私のところだとWorkspaceやTranscriptは何もせず単語で区切ってくれます。
MacでもWindowsでも。
Settings等を何もいじらない、取ってきたそのままの状態で試しました。

105:デフォルトの名無しさん
13/11/08 08:11:09.53 .net
Smalltalkで書かれたnative用のCompilerと
Smalltalkで書かれたvmのSourceて無いの?

Pharo当たりで、Nativeで動くVMを生成して、
そのVMでPharoを動かしたい。

106:デフォルトの名無しさん
13/11/08 08:17:37.26 .net
>>79
本番稼働前にimageのバックアップとっとけばいいだろう。

107:デフォルトの名無しさん
13/11/08 08:35:32.64 .net
VMMakerでVM作れるんだな

108:デフォルトの名無しさん
13/11/19 23:08:13.53 .net
>>105
自分で何を言ってんのかわかってんのか?

109:デフォルトの名無しさん
13/11/20 06:41:00.61 .net
>>108
VMMakerで作れるcog vmみたいなもんはないかって話です

110:デフォルトの名無しさん
13/11/20 08:58:02.68 .net
CogVM って VMMaker でビルドするんじゃないの?
URLリンク(www.mirandabanda.org)

111:デフォルトの名無しさん
13/11/29 12:24:59.77 .net
Pharoってデフォだとwindowsで、FileStreamのstdoutなんかから
取得した標準入出力がまともに動かんね。
そろそろなおらねぇかなぁ。

112:デフォルトの名無しさん
13/12/08 10:27:33.97 .net
7.10pulのOSX版、各種描画や日本語表示入力関連がやっと直ってきたね
今までストレスマッハだっただけにこれはとてもありがたい
しかしVMが64bitじゃないのは今後に期待か・・
roadmap見ると一応いつかはやるらしいが

113:デフォルトの名無しさん
13/12/14 12:17:15.89 .net
linux版は未だInput Methodがマトモに動かねえ

114:デフォルトの名無しさん
13/12/19 13:19:32.62 .net
MatriXが面白すぎてブロック投げまくってる
Polycephaly1がpipe動作だったのに対してMatrix(Polycephaly2)がsocket動作になったようだ

異なるマシン間でVisualWorks専用のプロトコル流すって話題があったと思って
store見たらPolycephaly-Networkなんてのがあるんだね

115:デフォルトの名無しさん
14/04/29 20:33:59.74 K0C+/bQ4.net
全画面表示のソフト作るのはこんだけ。

| os layout |

layout :=
'<?xml
version="1.0"
encoding="utf-8"?>

<LinearLayout
xmlns:android="URLリンク(schemas.android.com)
android:id = "@+id/BackGround"
android:orientation = "vertical"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background= "#ff000000">

<Button
android:id = "@+id/Hello"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "Hello"
>
</Button>

</LinearLayout>
'.

PackageLoader fileInPackage: 'Android'.

os := Android new.
os fullShow: layout.

116:デフォルトの名無しさん
14/05/01 12:21:18.29 GNekxPqX.net
>>115
これいいね!

117:デフォルトの名無しさん
14/05/01 21:33:12.56 lq2q/fJ2.net
>>116
でしょ。
電車の中の暇つぶしにゲームやらずにこれでプログラム書いてるわ。

118:デフォルトの名無しさん
14/05/05 01:35:25.99 4JocqGrP.net
VisualWorks以外はゴミ

119:デフォルトの名無しさん
14/05/05 15:43:39.05 s/emtMHD.net
VisualWorksいいっちゃいいけど、
Linux Unix 環境じゃ
全角文字の表示がダメダメ。
あと、OSのapi呼び出すときに使うthapiが遅すぎ。
job queue 方式にするなり何とかしてほしい。

120:デフォルトの名無しさん
14/05/05 18:48:39.73 X+SWFRhD.net
Smalltalkって、html5+javascriptと比べて、どの辺りにアドバンテージあるの?

121:デフォルトの名無しさん
14/05/06 00:36:20.51 lmYR+WVl.net
>>120
殆どドラッグ&ドロップでWebサイト作れたりする。
しかも、サーバーと区別がいらない。率直にいって比較にならん。

具体例:
 Seaside

難点は、OOが解らない人には使えないとこか。
多態やセレクターの指定で切り替えれば済む事を、
bool値とifで凌ごうとするヤツや、引数や戻り値は
色んなオブジェクトを使えばいいのに、数値や文字、
日付ぐらいしかつかわないみたいなヤツは使えないだろ。
オブジェクトの入れ替えで動作を切り替えていくからな。

122:デフォルトの名無しさん
14/05/06 00:54:28.37 jLlWJyza.net
どうでもいいけどHTML5なんて規格は存在しないから
正確にはDOM4規格だよね。

123:デフォルトの名無しさん
14/05/06 11:11:37.19 t6gEhEsD.net
ほとんどリクエストの無いしょぼいサイトなら
Seasideが向いてる

124:デフォルトの名無しさん
14/05/06 11:59:07.81 07rd5qp2.net
つまり、ほとんどのサイトならSeasideが向いている。

125:デフォルトの名無しさん
14/05/06 23:19:21.81 4OvGFEoo.net
小規模社内システムとかSeasideで十分だよな。
あんなんにJavaとPHPとかオーバースペックで効率悪すぎるわ。

126:デフォルトの名無しさん
14/05/07 22:43:21.01 4Qw1Q+lJ.net
そういやPharo 3.0が出たな。
そろそろVisualWorksやGSTみたいに名前空間搭載すればいいのに。

127:デフォルトの名無しさん
14/05/08 05:21:34.65 /w4sAsq6.net
ラルフ先生はVWが名前空間導入した時大喜びしてたなー

128:デフォルトの名無しさん
14/05/09 21:30:16.60 gPiH2iVe.net
そらやっぱ接頭辞と違って空間名の変更が楽だもの。
それにSmalltalk環境がClass名とちゃんと別扱いしてくれるし。

129:デフォルトの名無しさん
14/05/28 08:00:49.57 LnZUrzDK.net
GNU SmalltalkでImageに保存したClassの削除方法がわかんねー

removeFromSystemとか無いんかい

130:デフォルトの名無しさん
14/06/01 07:14:55.11 Q3FUAo9P.net
Seasideの新しいバージョンでてるな
パフォーマンスも向上したとかなんとか
あれの使い方分かってないんでまだ手出してないが

131:デフォルトの名無しさん
14/06/13 03:19:29.47 pu2H4m/c.net
どうにも詰まって進みようがなくなったので質問です

やりたいことはHTMLをparseしてタグ単位にnode化しtree状にばらして
rootから各nodeを辿れるようにしてelementを適当に参照したいわけです

XML.XMLParserに読ませるとまず通らないというか
HTML ≠ XML なので当然なのかも知れないですが
XMLMarshaler(これと連動しているXPath) , SIXX これらも見てみましたが
HTMLを読ませることはできないような気がします。

いい加減に書かれているHTMLをこれまた適当にparseしてくれるようなクラスはないんでしょうか。
自力で書くことも出来ないわけじゃないと思いますが、WebServiceのドキュメントを見る限りはHTMLを読めるようにも見えるので情報不足過ぎて困ってます。

これを使えとか何かヒントがあったらお願いします!

132:デフォルトの名無しさん
14/06/13 20:19:37.10 NLaaux3h.net
>>131
古いWebBrowserの実装がコントリビュートかPublic Repositoryにあったはず。
それとは別に、埋め込みのWebBrowserコンポーネントが使えるから、パースはそちらに任せることができるかもしれない。

133:デフォルトの名無しさん
14/06/13 21:24:23.03 92n3YvIq.net
>>131
URLリンク(www.pharocasts.com)
こんなようなこと? Pharoだけど

134:132
14/06/14 04:06:56.16 ITyiT+1l.net
>>132
探してみます

>>133
^true

135:132
14/06/18 05:38:46.87 RDasuJfa.net
うまくいかないのと追加したい機能があるんで
イチから作ることにしました
助言ありがとうでした

136:デフォルトの名無しさん
14/06/22 19:01:35.83 LtMDfcfl.net
>>131
本当にしたい事は何なの?
昔Web巡回ソフトつくったけど、その時は必要な情報以外は正規表現で消したよ。
この方法だと汎用性は無いけど結果はすぐ出せる。

137:132
14/06/24 03:53:12.30 XA65lbe0.net
>>136
特定キーワードの後に来ているtableを特定して要素抜き出したりとか
iframe分割するとかそんなとこです
csv入出力に加えてタグの値をセルから拾って再加工してhtmlに吐いたりとかそのへんも必要です
parseして再帰構造作るところまでは終わったので
/html/body/table/3@4
とかのString pathからelementを取得できるところを書いてます

138:デフォルトの名無しさん
14/07/27 18:29:02.03 JHUQ8wq7.net
VistaScript(VistaSmalltalk)使ったことあるヤツ居る?

139:デフォルトの名無しさん
14/09/14 01:26:41.03 kCUGk4im.net
VistaScriptには思い出もなにもあったもんじゃないらしい
やっぱりSmalltalkは言語だけを切り離せないんじゃないの

140:デフォルトの名無しさん
14/09/16 02:38:28.82 mnt6aMSR.net
そりゃね
フレームワークなしじゃ何の役にも立たないし

141:デフォルトの名無しさん
14/09/19 21:05:53.28 ZWHyR95u.net
Frameworkって嫌な響き。
Class Libraryでええやん。

142:デフォルトの名無しさん
14/09/22 23:08:42.78 vh/Af1aB.net
Frameworkの場合は、あらかじめ必要なクラスがあるわけじゃないし…

143:デフォルトの名無しさん
14/11/03 11:33:07.14 1HqxpQO9.net
青木導師の「Smalltalkイディオム」買いましたが、やっぱこれ、逝ちゃって
ませんか?
さまざまな文献からの綺羅星のごとき引用も、変化自在な例え話も、「ために
する」感じがして読み手のこと考えているのかなと。
例えば城砦都市の話とかでセキュリティの話をしているかとおもうと、それが
Smalltalkのオブジェクト間の通信の自由さと比較されたり。
それってぜんぜん別の話じゃあ・・・?
引用も多すぎて、なんか引用が多すぎる文章をからかった、パロディみたいだ
と思いました。本気ならコワイ。
でも内容は高度で、Smalltalk関連情報に飢えている心の隙間を埋めてくれる
良書であるとは思います。
結論:自意識過剰

144:デフォルトの名無しさん
14/11/05 09:21:18.62 DTvjdF5c.net
あの人の本は読んでも役に立たないから
MLでもそうだったけどわざわざ理解が遠くなるような投稿ばかりしてたり
本質そらすような誘導してたり

145:デフォルトの名無しさん
14/11/05 17:51:18.70 6GFXxFbP.net
あなたにはわからなかったのですねw

146:デフォルトの名無しさん
14/11/05 19:09:55.76 DTvjdF5c.net
読み物として買うならいいけどあの人の本は入門させる気がないって内容が多すぎる
どうでもいいことばかり書いてあるだけで何かできるようになるわけじゃないからね・・

一応それなりのポジション扱いされてるから表立って批判されることはないけど
MLでも登場すると他の人がいちいちフォローしなきゃいけなかったりとなかなか困った存在ではあったと思う
VWに関しては公式pdf読んだりExampleやったほうが早いしね

147:デフォルトの名無しさん
14/11/08 20:32:56.18 PCfU+KcI.net
Cincomに連絡すれば日本語版を送ってくれる。うれしいことにドキュメントも
日本語。

148:デフォルトの名無しさん
14/11/09 18:24:39.92 9lUKKrj+.net
まじすか?

149:デフォルトの名無しさん
14/11/09 18:49:12.32 EfnQMxIS.net
>>148

URLリンク(smalltalk.cincom.jp)

150:デフォルトの名無しさん
14/11/09 18:51:55.85 EfnQMxIS.net
 Cincomは、オブジェクト脳育成ツールとか、分析技術育成ツールと
して割り切って使うようにプロモートすればいいのにな。

 

151:デフォルトの名無しさん
14/11/09 20:41:10.43 TyKSlevg.net
それよりいい加減ネイティブなGUIを使うようにしてほしい
7.10からUISkinningとか入って来てるけど

152:デフォルトの名無しさん
14/11/09 20:45:09.29 ynWG2Vzt.net
smalltalk OSを作れば全部解決する

153:130
14/12/04 00:22:48.12 iyLFTAd9.net
GNU Smalltalkを使ってるとき
ObjectMemory snapshotで保存したClassを
削除できなかった件自己解決しました。

ClassだけじゃなくMetaClassの削除と
Namespaceからの削除が必要らしい。

Classを削除する手続の例:
! ClassManager methodsFor: ''!
deleteClass: aClass
 | superClass nameSpace |

 superClass := aClass superclass.
 nameSpace := aClass environment.

 nameSpace removeKey: aClass name.
 superClass removeSubclass: aClass.
 superClass class removeSubclass: aClass class.
!!

154:デフォルトの名無しさん
14/12/04 08:42:10.35 TqunBxc9.net
>>153
それはひどい…

155:デフォルトの名無しさん
14/12/04 10:07:55.55 2ZRM6z5g.net
8.0出たけどNC版まだ?

156:デフォルトの名無しさん
14/12/10 01:19:33.75 qqm0TT3x.net
64bit化されてなかった
そろそろ10.5以下切ってもいいのに

157:デフォルトの名無しさん
14/12/10 21:19:55.43 p5128+HO.net
Pharoいいな
Squeakが子供向けっぽくなったから敬遠してたけどまたSmalltalk系を
触ってみたくなった

158:デフォルトの名無しさん
14/12/11 00:09:29.09 mbz3wuYK.net
rasberry pi に scratch が入ってるらしいから、これから買ってポータブルの squeak 専用マシンにしようと思う

159:デフォルトの名無しさん
14/12/17 22:33:40.79 HhMJUnCz.net
Seaside を動かすサーバってログインしてSmalltalk動かしっぱなしにしとかなきゃ駄目なんか?
それとWebサーバ落ちたらどうやって再起動するの?

160:デフォルトの名無しさん
14/12/17 23:05:41.24 GPjgNjwM.net
>>159
Webアプリケーションサーバとはそういうものだ。

Webサーバが落ちたら、先に起動したときと同じ手順を踏むだけだと思うが、何がわからないのかがわからん。

161:デフォルトの名無しさん
14/12/17 23:45:39.59 GPjgNjwM.net
>>159
画面が邪魔ならheadlessで起動すれ

162:デフォルトの名無しさん
14/12/18 07:03:50.12 r0K9Q3c7.net
>>160
普通のWebサーバならデーモンやサービスで動いているんでログオンしてる必要は無いし
死活監視があるので落ちても自動でサーバ立ち上がるし
サーバがバックグランドで動かいななんてあるんかと思っただけ

>>161
Smalltalkをデーモン化するようなものか?

163:デフォルトの名無しさん
14/12/18 07:05:42.31 r0K9Q3c7.net
Smalltalkのオススメの本かサイト教えてください。
正月休みに遊んでみたいんで。

164:デフォルトの名無しさん
14/12/18 14:56:48.01 Rd12tJlC.net
>>163
ここらへんからよさげなのを選んでみてはどうでしょう。↓

Smalltalkをちょっとかじってみたい人のための、チュートリアルまとめ
URLリンク(qiita.com)

165:デフォルトの名無しさん
14/12/18 17:11:18.79 2R4zikfv.net
>>162
deployすれば一つのアプリケーションになるよ
運用がうまくいくかは不明

166:デフォルトの名無しさん
14/12/18 20:38:12.20 r0K9Q3c7.net
>>164
有難う御座います〜♪

Squeak見て、何じゃこりゃ〜分けわからんになって
Pharo見てこれなら使えるかと思ってるところです。

167:デフォルトの名無しさん
14/12/18 20:39:28.82 r0K9Q3c7.net
>>165
deploy? なんかわからんが調べてみます

168:デフォルトの名無しさん
14/12/18 23:13:56.99 2R4zikfv.net
>>167
VisualWorksだけね
SqueakやPharoは知らない

169:デフォルトの名無しさん
14/12/19 09:22:17.06 5b1jdacN.net
>>159
Smalltalk にはいわゆる方言がたくさんあって、それぞれに事情が異なります。
さらに Seaside は人気で、処理系の差異も乗り越えて比較的多くの処理系に移植されているという
特殊な事情があるので、質問するときは特にどの処理系を想定しているか限定したほうがいいですよ。

Smalltalk を学び始めるタイミングでは、すでに他の言語にかなり精通している人が多いので
めんどくさい手続きかもしれませんが…

170:デフォルトの名無しさん
14/12/20 08:59:38.29 1etDexZj.net
もっと青木尊師にハードは帰依したい

171:デフォルトの名無しさん
14/12/28 23:14:19.55 R3dzA+5K.net
squeak eToysでキーボード入力を取得するにはどうしたらいいの?

172:デフォルトの名無しさん
14/12/29 19:19:35.25 b80nJbK+.net
>>171
URLリンク(wiki.squeak.org)
ここ見た?このページにある、
URLリンク(bike-nomad.com)
このプロジェクトをSqueakland 2005Jで読み込んだら矢印キーで操作できた。
worldのkeyWatcherスクリプトに書いてある。詳しくはわかんない。

173:デフォルトの名無しさん
14/12/29 20:09:43.03 Gybf5FK3.net
ありがとう
けれどそれeToys 5.0じゃダメみたい
でもそのページのワールドのキーストロークを使えるみたいな説明があったので
部分的には使えるかな
そこのページに書かれているけどモディファイやキーや複数キーの同時押しなんかには対応できないらしいのが残念
右と上の矢印キーの同時押しで右上に動くとかやりたいけど無理みたいね

174:デフォルトの名無しさん
14/12/31 15:15:04.47 eZK8RP2d.net
今年を振り返って一行プログラムでもやろうかと思ったけど
特に何も思いつかなかった

175:デフォルトの名無しさん
15/02/01 10:27:33.83 9dLdzSOD.net
大使館に姉妹スレ立てといた
誰もこん
Smalltalk [転載禁止]?2ch.net
スレリンク(prog8板)

176:デフォルトの名無しさん
15/02/01 21:47:48.16 oqChC4NJ.net
>>4
超重要なのは君の頭の中だけで
誰も必要としてないからだよ
というツッコミがないのが凄いスレ

177:デフォルトの名無しさん
15/02/01 22:14:37.31 QJWUHP7z.net
Smalltalkより
キミがどうしてそんな書き込みを
今、わざわざしたくなったのかの方に興味がわく

178:デフォルトの名無しさん
15/02/02 02:00:32.21 P3dUQVzv.net
そういや昔アラン・ケイが来日したときサインして貰った本がでてきた

179:デフォルトの名無しさん
15/02/05 01:14:54.06 Eev1wDUX.net
>>177
オブジェクト指向の元祖はSimulaだしSmalltalkなどは完全に無視できる派
ストラウストラップがSmalltalkを重要視してないので
かつてはC++ユーザーにもそういう人がいたのだという。

180:デフォルトの名無しさん
15/02/05 08:44:08.12 h79vg6iD.net
うん。
世の中にはそういう主張をする派があって、キミがその派に属することはわかった。
で、ならばその完全に無視していいはずの Smalltalk のスレを
今、ここにきてどうして無視できなくなったのかに興味がわく

181:デフォルトの名無しさん
15/02/05 11:22:44.97 I9l1mGeI.net
そんなことより
WindowsのVMはIMEのインライン化がいまだにできないことと
OSXのVMはネイティブのMenuBar(NSMenu)を使えるようにならないことが不満ではある
Windowにメニューが張り付くのはあんまりいい気がしない・・

182:デフォルトの名無しさん
15/02/05 21:34:10.11 axWRz5yo.net
これ最近さわりはじめて
発想がすごく面白いと思ったけど
やっぱ実用的な面で欲しい機能もある
たとえば作ったアプリは実行ファイル
(Windowsでいう .exeファイル)で配布したい
実行形式じゃないと絶対ダメってほど頭固くないけど
(速度が)早い・(容量が)小さい・(コードを)隠せる
ってメリットがあるから便利だと思う
それ(に近いこと)ができる処理系もあるようだけど
もともと少数派のSmalltalkの中で分家筋を使うと
さらに日本語ドキュメント少なくなって使いにくいし
(というわけでとりあえずSqueakさわってる)
Webアプリならサーバの部分はクライアントから見えないけど
今度はレンサバに入ってないからPHPのほうが早いってなる
そういうCファミリーのメジャー言語のいろんな恩恵に
どっぷり漬かっちゃってるから参入障壁になってる
自分ひとり用の環境としては面白いけど……
Smalltalkは初心者だから
なにか初歩的な誤解があるかもしれないが
あったらツッコミしてくれ

183:デフォルトの名無しさん
15/02/05 22:37:03.73 gaBdO10c.net
>>182
俺はずっと初心者だけど
やはり最初は.exe作りたいと思ってた
できることが面白くなってからは、そういうこだわりは無くなったかな
まぁ配布したいものもないんだけど
Scratchもそうだけどpr、sar、imageで配布だし、そういうプラットフォームなんだと割り切ってる
他の人に使ってもらうにはインストールから説明しないといけないから、
確かに寂しいと思うけどね
SqueakだとWindowsの.exe作る方法もあったと思うけど...
そうね 自分ひとり用の環境としては面白いからSqueakでArduinoと通信するものとか
自宅LAN用のComSwikiのプラグインたまに作るくらいだけど

184:183
15/02/06 00:21:36.08 gqKhZAaO.net
>>183
>そういうこだわりは無くなった
>自分ひとり用の環境としては面白い
オレもひとり用で完結した環境でいいかなとも思ってるんだけど
やっぱ最終的にはアウトプットを外に出したいって気持ちもある
それでプログラムの開発環境(言語)としてこれを使いたい
とりあえず動くプロトタイプ作るなら早そうだから
もし配布までになんかしら難があるようなら
本格的に開発するときは他言語に移植してもいい
二度手間だけど設計ツールとして割り切って使う
>他の人に使ってもらうには
>インストールから説明しないといけない
独自形式の配布は一般ユーザにとって障壁になるよな
>SqueakだとWindowsの.exe作る方法もあった
サンクス
それは知らなかった
探してみる

185:デフォルトの名無しさん
15/02/06 02:31:41.92 uSk5yObJ.net
>>183
VisualWorksもexeやappで配布することはできる
やり方が大変面倒だがApplication Deliveryの項目を一通り見ればわかると思う

186:デフォルトの名無しさん
15/02/07 02:31:03.91 zaVZWxk9.net
Smalltalkはどんな分野に向いてるの?
なんでもいいんだけど、昔Perlが流行ってた頃
文字列処理が得意って言われてたみたいなの

187:デフォルトの名無しさん
15/02/07 08:56:47.57 794JOOqUX
Smalltalkに詳しいわけじゃないけど、走ってるシステムを簡単に変更できてすぐに結果がわかる言語って他に余り無いんじゃない。
common lispでも走ってるシステムを変更しながら開発をするような言語仕様になってるけどSmalltalkほど徹底してないと思う。

188:デフォルトの名無しさん
15/02/07 08:59:03.24 794JOOqUX
erlangも動的なソフトの入れ替えの仕組みがあるか

189:デフォルトの名無しさん
15/02/07 10:14:31.87 ZhhiW774.net
>>186
sc187 :デフォルトの名無しさん:2015/02/07(土) 08:56:47.57 ID:794JOOqUX[1/2]
Smalltalkに詳しいわけじゃないけど、走ってるシステムを簡単に変更できてすぐに結果がわかる言語って他に余り無いんじゃない。
common lispでも走ってるシステムを変更しながら開発をするような言語仕様になってるけどSmalltalkほど徹底してないと思う。
sc188 :デフォルトの名無しさん:2015/02/07(土) 08:59:03.24 ID:794JOOqUX[2/2]
erlangも動的なソフトの入れ替えの仕組みがあるか

190:デフォルトの名無しさん
15/02/07 15:09:27.85 zaVZWxk9.net
>>189
> 走ってるシステムを簡単に変更できてすぐに結果がわかる言語
そうだね
開発環境の部分はすごくとっつきやすく感じた
逆に他言語だと今まで動作確認のたびに
いちいちビルドしてたのがめんどうくさく感じてくる
でもいざ実用的なソフトを開発しようとなると
巨大なクラスライブラリを覚える必要がある
しかもそれはロクに説明なくて
ソース(か英語ドキュメント)を読まないといけない
GUIの部分はやさしいし
言語仕様もシンプルだけど
ライブラリを使うのが難しい

191:デフォルトの名無しさん
15/02/07 15:55:49.77 O0c7oskK.net
>>190
「お勧めなのは、エキスパートによって作られた、広大なライブラリの類に頼らないことです。それは安易な解決策になってくれるように思えるだけです。代わりに、何もないところから、素早くプログラミングです。Squeakはそうした目的のために作られています。」
特別寄稿 ー Alan Kayからのメッセージ『ダイナミック・オブジェクト』(『自由自在Squeakプログラミング』梅澤真史著)
まぁそうは言っても...だけどね
VWを業務で使ってる人達はどう思うのかしら?
でもライブラリの機能や使用例もソースから調べやすいし、テストしやすいとは思うけど、
最近何も作ってないや

192:デフォルトの名無しさん
15/02/07 21:15:51.86 zaVZWxk9.net
>>191
それ読んだとき半分くらいは共感したんだけど
(C++とWin32APIがめんどくさすぎるから)
できる範囲で車輪の再発明するとしても
入出力とか、画像処理、通信みたいな低レイヤーは
ほんとに何もないとこからは作れない
どんな言語でもライブラリ覚える必要はあるんだけど
これは日本語リファレンスがすごい欲しくなる
まあアウトプットが文字列みたいな
小物アプリをぼちぼち作りつつライブラリを
少しずつ覚えていこうみたいな感じなのかな

193:デフォルトの名無しさん
15/02/07 21:57:43.31 O0c7oskK.net
>>192
そうだね そう思う
ググれば日本語でも参考になる例はあるから、なんとかなるけど、
ライブラリ覚える気はないけど、知らなければ発想できないこともあるしね。
『自由自在〜』読み返したり、Pharocast見たりしてできること、アイデアを学ぼうとするけど、
それより何か作ろうとしなくちゃダメかな、と思ってる

194:デフォルトの名無しさん
15/02/08 09:17:41.26 1GzhtbkP.net
一生思ってろ

195:デフォルトの名無しさん
15/02/08 10:37:51.19 c8TnjZ8K.net
Smalltalk ほど単純なルールで構成されてる言語・環境を
どうしてだか理解できない人がいるのはしょうがないとしても
逆恨みして粘着アンチ化するのをどうにか避けられないものか。

196:デフォルトの名無しさん
15/02/08 12:16:09.65 lYLvg9qm.net
Squeakでプロトタイプ作って来られるとか経験すれば、逆恨みする人の気持ちも分かると思う

197:デフォルトの名無しさん
15/02/08 13:49:06.94 zJSS0tq2.net
Smalltalkで受託開発してるけど逆恨みする人の気持ちは全くわからない。

198:デフォルトの名無しさん
15/02/08 20:51:02.21 CyqMlARA.net
Smalltalkはメッセージングみたいなルールが
全体で一貫してるから理解しやすいと思うけど
なぜかキラーアプリがないよな
代表的なキラーアプリがあれば
もっと広まってたと思うんだけど

199:デフォルトの名無しさん
15/02/08 21:49:39.42 c8TnjZ8K.net
それは「計算機の言語を狭い意味でとらえる人」がいかにも言いそうな Smalltalk評かと
URLリンク(web.archive.org)

200:デフォルトの名無しさん
15/02/08 21:57:44.05 c8TnjZ8K.net
てなことをいうと反感かってアンチが増えるわけか… 失敬、失敬^^;
たしかに Ruby におけるとっついやすい Rails みたいなキラーアプリがあるといいのかも。

201:デフォルトの名無しさん
15/02/08 22:19:38.46 p8em6OkY.net
そういえば単なる言語ではないんだったな
言ってることのカッコ良さに当時はしびれた(死語)ものだけど
まあ先を読むのって難しいってことで

202:デフォルトの名無しさん
15/02/09 04:53:09.54 f40HLejb.net
利用者が全体を俯瞰して
際限なくカスタマイズできるのは
良いコンセプトだと思う
でもイメージが肥大化してきたときに
収拾をどうつけるのか
クラスを足すのはかんたんでも削るのは難しい
使い始めちゃうと依存関係ができるから
それとガベージコレクションをすりぬけた
メモリのゴミがたまっていきそうなもんだけど
毎日手を入れ続けてる
秘伝のタレ状態でいいのか
それともOSの再インストや
新OSへの乗り換えみたいに
ファイルでバックアップとっといて
定期的にリセットするのか
長く使ってる人はソース管理どうやってんの?

203:デフォルトの名無しさん
15/02/09 05:47:32.02 UYOrkYUA.net
>>202
20年ぐらい昔のSmalltalkの話をしていないか?

204:デフォルトの名無しさん
15/02/09 06:01:28.91 f40HLejb.net
>>203
いや使い方調べてて気になったんだけど
ネットの記事は1年前でも20年前でも
同じように並んで表示されてるし
問題ある場合のほうが記事多いから
じゃ今はもうそういう問題
起こらないように進化してるんだ?

205:デフォルトの名無しさん
15/02/09 06:09:40.75 UYOrkYUA.net
PharoやSqueakならコードはmonticelloで管理するのが普通だし、
filetreeでgitでコード管理する人もいるしで、
イメージの中でこねくり回し続ける人はそう多くないと思うよ。
自分もイメージなんて1週間も経たないうちに捨てる。
新しいイメージに必要なパッケージ群を一通り入れるのは
metacello使えば1行のコードで各パッケージをそれぞれの
レポジトリから最新版をダウンロードしてきて初期化まで
自動的にやってくれる。

206:デフォルトの名無しさん
15/02/09 06:38:17.09 f40HLejb.net
>>205
サンクスなるほど
今はそうやって管理するのか

207:デフォルトの名無しさん
15/02/09 08:33:43.52 Sty7eEqu.net
つまりSmalltalkerが他言語との差異のひとつとして挙げる事が多い
イメージ方式は問題だらけのオワコンで
結局は普通の言語と同じ方式に落ち着いたわけだ

208:デフォルトの名無しさん
15/02/09 09:08:37.00 u8pz/p6G.net
>>207
そう。だからキミは Smalltalk のことなんか気にせず
先進の他言語ライフをエンジョイしてください。おしあわせに。

209:デフォルトの名無しさん
15/02/09 09:35:59.91 u8pz/p6G.net
ただ口が悪いだけで悪意は無かったという可能性もあるから
念のためマジレスしておくと(でもなきゃ煽って情報を得ようとする方略を助長するようで残念なんだけど)
イメージベースのメリットはソース管理だけじゃなくて
たとえば再現困難なデバッグの状態を保存できるとか
(いうまでもなく保存できるかは状況にもよるけど、同等機能をいっさい欠いているよりはマシというレベルで)
オブジェクトメモリ内のオブジェクトの状態保持が主なので
ソース管理の方法が他言語に倣ったからっていちがいにオワコンということはないと思う。

210:デフォルトの名無しさん
15/02/09 17:36:40.61 UYOrkYUA.net
>>207
外部ストレージにパッケージを保存できることとイメージベースは全く矛盾しないどころか
むしろ長所を伸ばしあう関係にあるわけだけど、まあ君には関係ない話だね。さよなら。

211:デフォルトの名無しさん
15/02/10 07:31:44.72 Ojr93FaP.net
これからはスマホの時代だけど
Smalltalkでスマホ開発ってどしたらいいの?
やっぱWebアプリにするのかな

212:デフォルトの名無しさん
15/02/10 09:28:09.28 sCqZIsHm.net
>>182
VisualWorksならexe作れるよ

213:デフォルトの名無しさん
15/02/10 09:34:05.05 sCqZIsHm.net
>>211
>>115

214:デフォルトの名無しさん
15/02/10 10:17:11.93 TIteOp3H.net
>>211
Pyonkee とか Dr. Geo とか調べてみそ。

215:デフォルトの名無しさん
15/02/10 10:37:51.08 SrGhIMrb.net
Smalltalkの最大の欠点はOSの上にOSモドキを乗っけるナンセンスさと
マイナーな独自UIを強制するところにあるから、
一からスマホOSをSmalltalkで作って
UIをiPhoneに似せれば天下取れるかもよ

216:デフォルトの名無しさん
15/02/10 13:36:11.97 TIteOp3H.net
まだいたのか、キミ… ^^;
ナンセンスということなら、キミがここにいること自体がナンセンスだよ。
とりあえず、これ↓を10ぺんくらい読んでみることをお薦めすることしか今はできない。
「Smalltalkの底を流れる設計思想」
URLリンク(web.archive.org)

217:デフォルトの名無しさん
15/02/10 17:42:43.44 f6VLwhXv.net
>>215
UIが気になるんなら、下みたいに簡単にOSの関数呼べるんだから関数のUI使えばいいじゃん。
俺はGNU Smalltalkを使うときAndroidのUI使ってるぞ。
Object subclass: #Bridge.
DLD addLibrary: 'libc'.
! Bridge class methodsFor: 'cross language' !
abs: anInteger
 <
  cCall: 'abs'
  returning: #int
  args: #( #int )
 >.
!!
Bridge abs: 0.

218:デフォルトの名無しさん
15/02/10 18:42:43.24 Ojr93FaP.net
>>213-214
あんがと
しかし情報すくなすぎる

219:デフォルトの名無しさん
15/02/10 20:05:21.93 yCYSfpHb.net
>>216
「Smalltalkの底が知れた設計思想」だね。10回読んでみるわ

220:デフォルトの名無しさん
15/02/10 20:38:10.59 R+rkRsMj.net
誰うまw

221:デフォルトの名無しさん
15/02/11 02:48:11.00 kCQdnFWd.net
クラスライブラリの実装見ると
たいてい使える機能から予想するよりも
短い記述になってる印象なんだけど
なんで?
文法が簡潔で記述量が少なく書けるから?
書き手がOOマスターしてるから?
それとも継承しまくってるから
(継承を追って見るくらいはしてる)
総量は多くても個々が少なく感じるだけ?
じつはシステムブラウザから見えない部分
(インライン)で下処理を済ましてるから?

222:デフォルトの名無しさん
15/02/11 06:47:42.77 Ids2Eeke.net
>>221
本当に実装量程度の機能かもしれないし、
からくりがある場合もある。
具体的には、どのクラス?(できれば処理系も)

223:デフォルトの名無しさん
15/02/11 09:08:37.73 WHehhV2d.net
>>218
基本的にGNU SmalltalkにAndroid用の追加Packageがちょこっと乗ってるだけ。
GNU Smalltalkの部分はLinuxやWindows上と使い勝手は変わんないよ。
因みにGNU Smalltalkは方言が激しすぎると思うかもしれないけど、
他の環境と同じような書き方もできるよ。
"Smalltalk User Exampleといい名前空間を作る。"
Smalltalk addSubspace: #User.
Smalltalk User addSubspace: #Example.
"Smalltalk User Example に移動する"
! Namespace current: Smalltalk User Example !
Object
 subclass: #Someoen
 instanceVariableNames: 'name'
 classVariableNames: ''
 poolDirectory: ''.
"ClassのInstance変数の登録(省略可)"
Someone class instanceVariableNames: ''.
"name変数の読み書き用Method登録。defaultは初期値"
Someone
 createSetMethod: 'name';
 createGetMethod: 'name' default: ''.

224:デフォルトの名無しさん
15/02/11 09:09:08.40 WHehhV2d.net
"Instance用のMethod登録"
! Someone methodsFor: 'example' !
something
^ '何か処理を書く'.
!!
"Class用のMethod登録"
! Someone
class methodsFor: 'instance creation' !
withName: aString
^ self
 basicNew
  name: aString.
!!
"現在の名前空間を変更して保存すると、名前空間が変更しっぱなしになるので戻す。"
! Namespace current: Smalltalk !
"
Imageに保存。引数を指定しなければ/mnt/sdcard/ls4a/gst.imに保存される。
元のgst.imはどこかに保存しとくこと。
"
ObjectMemory snapshot.

225:デフォルトの名無しさん
15/02/11 09:36:26.45 WHehhV2d.net
GNU Smalltalkの注意点
1. 親の名前空間が持っている名前空間を子の名前空間は作れない
ダメな例
 Smalltalk Test Something Test.
大丈夫な例
 Smalltalk SomethingA Test.
 Smalltalk SomethingB Test.
代わりに子の名前空間から親の名前空間を参照するとき
参照する親より上の名前空間を省略できる。
Smalltalk Test Something ExampleAという構成の時ExampleAから
TestのClassをExampleBを参照するとき
下記のいづれでも参照できる。
ExampleB
Test ExampleB
Smalltalk Test ExampleB
2. 大文字で始める変数、または大域は宣言してないとnilになる。
つづりを間違えた時に結構ハマる。
Method内で書いた小文字の変数は宣言が無いと翻訳失敗になる。
また、名前空間をSmalltalk.Something.と「.」で区切れば、
親の名前空間が存在しない時翻訳失敗にしてくれる。
ただし、最後の名前空間名やClass名まで存在するか見てくれない。

226:デフォルトの名無しさん
15/02/11 09:53:20.80 WHehhV2d.net
3. 例外を捕まえるClassの種類ににExceptionから派生した
 Class以外を指定すると訳の分からない例外になる。
[
]
 on: NotFound "NotFoundが存在しない場合nilになっており例外処理が暴走する。"
 do:
 [ :exception |
 ].
4. nilを継承できる。nilを継承するとMessageに
 存在しないMethodを指定されてもErrorにしない。
"SuperSomethingは実はnilだが継承できてしまう。"
SuperSomething subclass: #Something.
"helloは無視される。"
Something new hello.
ただし、nilを継承すればあらゆるMessageを
doesNotUnderstaedで受け取ることができるいう利点もある。
Objectを継承しているとObjectが実装しているMessageは受け取れない。

227:デフォルトの名無しさん
15/02/11 10:04:46.87 WHehhV2d.net
sl4aでGNU Smalltalkを使う時のヒント。
GUI は下記のような感じで作ることができる。
PackageLoader fileInPackage: 'Android'.
| os event |
os := Android.
"UI表示"
os fullShow:
'<?xml
version = "1.0"
encoding = "utf-8"
?>
<LinearLayout
xmlns:os = "URLリンク(schemas.android.com)
os:layout_width = "match_parent"
os:layout_height = "match_parent"
os:orientation = "vertical"
>
<EditText
os:layout_width = "match_parent"
os:layout_height = "wrap_content"
/>
</LinearLayout>
'
"Event待ち"
event := os eventWait.

228:デフォルトの名無しさん
15/02/11 19:11:13.96 kCQdnFWd.net
>>222
処理系はSqueak
クラスは「Kernel-」系のクラス
こんなコアな部分でもこれだけで済むの?
ってのが素朴な疑問だった
(とくに昔の)C++とかのソースだと
1ファイルに何千行もドバッと書かれてるから
小分けで錯覚してるだけかもしれないけど
自力で分かったのは
Kernel-Objects BooleanのifTrueが
インライン展開されてるから書かれてないってこと

229:デフォルトの名無しさん
15/02/11 20:49:58.18 Ids2Eeke.net
>>228
> Kernel-Objects BooleanのifTrueが
> インライン展開されてるから書かれてない
もし Boolean >> ifTrue: のことなら、処理が書かれていないのではなくて、
self subclassResponsibility 、つまりサブクラスでオーバーライドせよというコードで指示がされているだけで、
実際にそれに従い、True >> ifTrue: 、False >> ifTrue: の方に(普段はインライン展開されてしまうので
無視されますが、明示的にコールしてやりさえすれば)動くコードが書かれています。
たとえば True >> ifTrue: メソッドは、こんな風に明示的にコールできます。
true perform: #ifTrue: with: [3] "=> 3 "
True >> #ifTrue: valueWithReceiver: true arguments: {[4]} "=> 4 "
他のインラインされるメソッド群は MessageNode class >> initialize で確認できますが、
(Kernel-Objects MessageNode の class 側に切り替えてでてくる initialize メソッド定義内)
whileTrue: を除いては、前述の ifTrue: 同様、明示的にコールしても
動くコードで書かれているので短い記述になっていることにはあまり寄与していないように思います。
そういう意味では Float >> + のように <primitive: 41> などといった記述があるメソッドは
実処理が仮想マシンやプラグインにあるので、具体的なソースは書かれていないことになります。
これはちょっとコード量の削減に寄与しているかもしれません。
余談ですが、<primitive: 41> などの後に書かれているのは、仮想マシンなどに記述された関数のコールが
失敗した場合に実行されるフォールバックコードで、これは Smalltak で記述されています。
個人的には Smalltalk のコードが短く感じるのは、出来ることの印象に反して
実質的にはコード量なりの機能しか実装されていないからだと思います。
C++ などで書かれたものと厳密に(たとえば数理学的に)同等の機能を記述しようと思ったら
それなりのコード量になるのではないでしょうか。

230:デフォルトの名無しさん
15/02/11 22:16:32.83 kCQdnFWd.net
>>229
うわー詳しい!
触ったばかりとはいえ雑な理解で恥ずかしいです^^;
>実質的にはコード量なりの機能しか実装されていない
パッと見で気づかれないていどに
うまく手を抜いてるってことですかね
たしかにC++みたいな巨大な仕様の言語と
細部の挙動が違うのは想像できます
もしそれが気に入らなければ
Smalltalkは仕様自体をカスタマイズできるんだし
YAGNI的にも開発リソース的にも
それが現実解の気がします
なぜそこが気になったかというと
少ないコード量で実現してるというのは
設計の参考になるからです

231:デフォルトの名無しさん
15/02/11 22:52:16.50 Ids2Eeke.net
正直、どうしてこんないい加減なものが動くのか、私もかねてから不思議に思っています。^^;
まあそこが興味の対象であり、数理学的に論じると味わいのなくなる面白いところでもあるわけですが。
手抜きのことも含めて、もちろん他にも短く書くための工夫らしきことはあるので
もう少し、システムの中身を覗いてみてください。
設計の参考ということでは、しばらくいじってみて興味をひかれた機能を
その動作から実装を予想し、実際にそう実装されているか確認してみると
「その手があったか!」というような発見もあって楽しみながら学べると思います。
(あるいは時間の無駄で終わるかもしれませんが…)
個人的によくお薦めするところでは、print it(式を選択して右クリックメニューなどから
print it すると返値が挿入される機構)がどのように実装されているか、コンパイラの
実装やその動作などと併せて予想・確認してみるのは比較的よい題材かと思います。

232:デフォルトの名無しさん
15/02/11 23:29:09.42 kCQdnFWd.net
>>231
>どうしてこんないい加減なものが動くのか
不思議ですよねー
古くからあるから職人芸なのかな
記述が短いから拡張や改造が楽で
助かる面はあります
>実装やその動作などと併せて
>予想・確認してみるのは比較的よい題材
それは良さそうですね
じっくり取り組んでみます

233:デフォルトの名無しさん
15/02/12 00:10:33.54 EWCUv8cS.net
>>229
value := 1 < 2 ifTrue: 3 asValue ifFalse: 4 asValue.
こんな場合もInline展開されないでしょ。
VisualWorksだと最適化しないって警告がでる。

234:デフォルトの名無しさん
15/02/12 01:13:27.37 DTXdCLax.net
>>223-227
> 基本的にGNU SmalltalkにAndroid用の追加Packageがちょこっと乗ってるだけ。
> GNU Smalltalkの部分はLinuxやWindows上と使い勝手は変わんないよ。
それならSmalltalk使う意味あるね
ほかの処理系でももっと出てきて欲しい
WindowsPC全盛期はマルチプラットフォームに
あんま魅力感じなかったけど
今みたいにPCもスマホもでOS乱立してると
同じように書けることって大きいと思う
PCはC++かC#で
WebアプリはPerlとかPHPで
AndroidはJavaで
iPhoneはObjective-Cでとか
覚えることがあまりにも多すぎる
PCもWebもスマホも
同じ言語で書けたら楽だなと思う
まあその本命は一昔前ならJavaだったし
今ならJavaScriptなんだろうけど

235:デフォルトの名無しさん
15/02/12 05:57:58.02 0kpAIZ2u.net
>>232 長い時間をかけたリファクタリングの結果です。

236:デフォルトの名無しさん
15/02/12 09:00:56.49 FbfONYzU.net
>>233 あ、ほんとだ。ブロックリテラルで書かないと、インライン展開されないんですね。…とのことです。>>230
true ifTrue: [3] ifFalse: [4]. thisContext method symbolic "=> '33 <71> pushConstant: true
34 <99> jumpFalse: 37
35 <21> pushConstant: 3
36 <90> jumpTo: 38
37 <20> pushConstant: 4
38 <87> pop
39 <89> pushThisContext:
40 <D3> send: method
41 <D2> send: symbolic
42 <7C> returnTop' "
true ifTrue: 3 ifFalse: 4. thisContext method symbolic "=> '33 <71> pushConstant: true
34 <21> pushConstant: 3
35 <22> pushConstant: 4
36 <F0> send: ifTrue:ifFalse:
37 <87> pop
38 <89> pushThisContext:
39 <D4> send: method
40 <D3> send: symbolic
41 <7C> returnTop' "
| block | block := [3]. true ifTrue: block. thisContext method symbolic
"=> '<略> 36 <71> pushConstant: true
37 <10> pushTemp: 0
38 <E1> send: ifTrue:
39 <87> pop
40 <89> pushThisContext:
41 <D3> send: method
42 <D2> send: symbolic
43 <7C> returnTop' "

237:デフォルトの名無しさん
15/02/12 09:26:20.70 FbfONYzU.net
>>233
調べてみました。なるほど。
引数がブロックかどうかをチェックしてインライン化を判断しているのですね。
(以下は Squeak の場合ですが、VisualWorks でも似たようなことをしていました。)
MessageNode >> transformIfTrue: encoder
 (self transformBoolean: encoder)
  ifTrue:
   [arguments :=
    Array
     with: ((arguments at: 1) noteOptimizedIn: self)
     with: ((BlockNode withJust: NodeNil) noteOptimizedIn: self).
   ^true]
  ifFalse:
   [^false]
MessageNode >> transformBoolean: encoder
 ^self
  checkBlock: (arguments at: 1)
  as: 'argument'
  from: encoder

238:デフォルトの名無しさん
15/02/12 15:47:56.01 1WRWm2Rj.net
>>236
自作ClassのObjectに対してはMessage送信省略しないお陰で、
数値計算に自作ClassのObjectをツッコむことができるんだよね。
以下はGNU Smalltalkの例。
nil
subclass: #NumberDelegator
instanceVariableNames: 'delegate'
classVariableNames: ''
poolDictionaries: ''
category: 'Example'.
! NumberDelegator methodsFor: 'accessing' !
delegate: aNumber
delegate := aNumber
!
generality
"primitive扱いされると例外を吐くことになるので、primitive扱いできないようにする。"
^ 0.
!!
! NumberDelegator methodsFor: 'forwarding' !
doesNotUnderstand: aMessage
^ aMessage sendTo: delegate.
!!
! NumberDelegator class methodsFor: 'instance creation' !
forwardTo: aNumber
^ self basicNew delegate: aNumber.
!!
| result |
result := 1 + ( NumberDelegator forwardTo: 10 ).


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1081日前に更新/189 KB
担当:undef