Squeak
http://www.squeak.org/
Pharo
http://www.pharo-project.org/home
商用
Cincom VisualWorks
http://smalltalk.cincom.jp/main/products/visualworks/
Smalltalk総合 Squeak Pharo
2013/02/16(土) 14:10:29.12
173デフォルトの名無しさん
2014/12/29(月) 19:19:35.25ID:b80nJbK+ >>172
http://wiki.squeak.org/squeak/488
ここ見た?このページにある、
http://bike-nomad.com/squeak/DriveUsingKeyboard.002.pr
このプロジェクトをSqueakland 2005Jで読み込んだら矢印キーで操作できた。
worldのkeyWatcherスクリプトに書いてある。詳しくはわかんない。
http://wiki.squeak.org/squeak/488
ここ見た?このページにある、
http://bike-nomad.com/squeak/DriveUsingKeyboard.002.pr
このプロジェクトをSqueakland 2005Jで読み込んだら矢印キーで操作できた。
worldのkeyWatcherスクリプトに書いてある。詳しくはわかんない。
174デフォルトの名無しさん
2014/12/29(月) 20:09:43.03ID:Gybf5FK3 ありがとう
けれどそれeToys 5.0じゃダメみたい
でもそのページのワールドのキーストロークを使えるみたいな説明があったので
部分的には使えるかな
そこのページに書かれているけどモディファイやキーや複数キーの同時押しなんかには対応できないらしいのが残念
右と上の矢印キーの同時押しで右上に動くとかやりたいけど無理みたいね
けれどそれeToys 5.0じゃダメみたい
でもそのページのワールドのキーストロークを使えるみたいな説明があったので
部分的には使えるかな
そこのページに書かれているけどモディファイやキーや複数キーの同時押しなんかには対応できないらしいのが残念
右と上の矢印キーの同時押しで右上に動くとかやりたいけど無理みたいね
175デフォルトの名無しさん
2014/12/31(水) 15:15:04.47ID:eZK8RP2d 今年を振り返って一行プログラムでもやろうかと思ったけど
特に何も思いつかなかった
特に何も思いつかなかった
176デフォルトの名無しさん
2015/02/01(日) 10:27:33.83ID:9dLdzSOD177デフォルトの名無しさん
2015/02/01(日) 21:47:48.16ID:oqChC4NJ178デフォルトの名無しさん
2015/02/01(日) 22:14:37.31ID:QJWUHP7z Smalltalkより
キミがどうしてそんな書き込みを
今、わざわざしたくなったのかの方に興味がわく
キミがどうしてそんな書き込みを
今、わざわざしたくなったのかの方に興味がわく
179デフォルトの名無しさん
2015/02/02(月) 02:00:32.21ID:P3dUQVzv そういや昔アラン・ケイが来日したときサインして貰った本がでてきた
180デフォルトの名無しさん
2015/02/05(木) 01:14:54.06ID:Eev1wDUX >>178
オブジェクト指向の元祖はSimulaだしSmalltalkなどは完全に無視できる派
ストラウストラップがSmalltalkを重要視してないので
かつてはC++ユーザーにもそういう人がいたのだという。
オブジェクト指向の元祖はSimulaだしSmalltalkなどは完全に無視できる派
ストラウストラップがSmalltalkを重要視してないので
かつてはC++ユーザーにもそういう人がいたのだという。
181デフォルトの名無しさん
2015/02/05(木) 08:44:08.12ID:h79vg6iD うん。
世の中にはそういう主張をする派があって、キミがその派に属することはわかった。
で、ならばその完全に無視していいはずの Smalltalk のスレを
今、ここにきてどうして無視できなくなったのかに興味がわく
世の中にはそういう主張をする派があって、キミがその派に属することはわかった。
で、ならばその完全に無視していいはずの Smalltalk のスレを
今、ここにきてどうして無視できなくなったのかに興味がわく
182デフォルトの名無しさん
2015/02/05(木) 11:22:44.97ID:I9l1mGeI そんなことより
WindowsのVMはIMEのインライン化がいまだにできないことと
OSXのVMはネイティブのMenuBar(NSMenu)を使えるようにならないことが不満ではある
Windowにメニューが張り付くのはあんまりいい気がしない・・
WindowsのVMはIMEのインライン化がいまだにできないことと
OSXのVMはネイティブのMenuBar(NSMenu)を使えるようにならないことが不満ではある
Windowにメニューが張り付くのはあんまりいい気がしない・・
183デフォルトの名無しさん
2015/02/05(木) 21:34:10.11ID:axWRz5yo これ最近さわりはじめて
発想がすごく面白いと思ったけど
やっぱ実用的な面で欲しい機能もある
たとえば作ったアプリは実行ファイル
(Windowsでいう .exeファイル)で配布したい
実行形式じゃないと絶対ダメってほど頭固くないけど
(速度が)早い・(容量が)小さい・(コードを)隠せる
ってメリットがあるから便利だと思う
それ(に近いこと)ができる処理系もあるようだけど
もともと少数派のSmalltalkの中で分家筋を使うと
さらに日本語ドキュメント少なくなって使いにくいし
(というわけでとりあえずSqueakさわってる)
Webアプリならサーバの部分はクライアントから見えないけど
今度はレンサバに入ってないからPHPのほうが早いってなる
そういうCファミリーのメジャー言語のいろんな恩恵に
どっぷり漬かっちゃってるから参入障壁になってる
自分ひとり用の環境としては面白いけど……
Smalltalkは初心者だから
なにか初歩的な誤解があるかもしれないが
あったらツッコミしてくれ
発想がすごく面白いと思ったけど
やっぱ実用的な面で欲しい機能もある
たとえば作ったアプリは実行ファイル
(Windowsでいう .exeファイル)で配布したい
実行形式じゃないと絶対ダメってほど頭固くないけど
(速度が)早い・(容量が)小さい・(コードを)隠せる
ってメリットがあるから便利だと思う
それ(に近いこと)ができる処理系もあるようだけど
もともと少数派のSmalltalkの中で分家筋を使うと
さらに日本語ドキュメント少なくなって使いにくいし
(というわけでとりあえずSqueakさわってる)
Webアプリならサーバの部分はクライアントから見えないけど
今度はレンサバに入ってないからPHPのほうが早いってなる
そういうCファミリーのメジャー言語のいろんな恩恵に
どっぷり漬かっちゃってるから参入障壁になってる
自分ひとり用の環境としては面白いけど……
Smalltalkは初心者だから
なにか初歩的な誤解があるかもしれないが
あったらツッコミしてくれ
184デフォルトの名無しさん
2015/02/05(木) 22:37:03.73ID:gaBdO10c >>183
俺はずっと初心者だけど
やはり最初は.exe作りたいと思ってた
できることが面白くなってからは、そういうこだわりは無くなったかな
まぁ配布したいものもないんだけど
Scratchもそうだけどpr、sar、imageで配布だし、そういうプラットフォームなんだと割り切ってる
他の人に使ってもらうにはインストールから説明しないといけないから、
確かに寂しいと思うけどね
SqueakだとWindowsの.exe作る方法もあったと思うけど...
そうね 自分ひとり用の環境としては面白いからSqueakでArduinoと通信するものとか
自宅LAN用のComSwikiのプラグインたまに作るくらいだけど
俺はずっと初心者だけど
やはり最初は.exe作りたいと思ってた
できることが面白くなってからは、そういうこだわりは無くなったかな
まぁ配布したいものもないんだけど
Scratchもそうだけどpr、sar、imageで配布だし、そういうプラットフォームなんだと割り切ってる
他の人に使ってもらうにはインストールから説明しないといけないから、
確かに寂しいと思うけどね
SqueakだとWindowsの.exe作る方法もあったと思うけど...
そうね 自分ひとり用の環境としては面白いからSqueakでArduinoと通信するものとか
自宅LAN用のComSwikiのプラグインたまに作るくらいだけど
185183
2015/02/06(金) 00:21:36.08ID:gqKhZAaO >>184
>そういうこだわりは無くなった
>自分ひとり用の環境としては面白い
オレもひとり用で完結した環境でいいかなとも思ってるんだけど
やっぱ最終的にはアウトプットを外に出したいって気持ちもある
それでプログラムの開発環境(言語)としてこれを使いたい
とりあえず動くプロトタイプ作るなら早そうだから
もし配布までになんかしら難があるようなら
本格的に開発するときは他言語に移植してもいい
二度手間だけど設計ツールとして割り切って使う
>他の人に使ってもらうには
>インストールから説明しないといけない
独自形式の配布は一般ユーザにとって障壁になるよな
>SqueakだとWindowsの.exe作る方法もあった
サンクス
それは知らなかった
探してみる
>そういうこだわりは無くなった
>自分ひとり用の環境としては面白い
オレもひとり用で完結した環境でいいかなとも思ってるんだけど
やっぱ最終的にはアウトプットを外に出したいって気持ちもある
それでプログラムの開発環境(言語)としてこれを使いたい
とりあえず動くプロトタイプ作るなら早そうだから
もし配布までになんかしら難があるようなら
本格的に開発するときは他言語に移植してもいい
二度手間だけど設計ツールとして割り切って使う
>他の人に使ってもらうには
>インストールから説明しないといけない
独自形式の配布は一般ユーザにとって障壁になるよな
>SqueakだとWindowsの.exe作る方法もあった
サンクス
それは知らなかった
探してみる
186デフォルトの名無しさん
2015/02/06(金) 02:31:41.92ID:uSk5yObJ187デフォルトの名無しさん
2015/02/07(土) 02:31:03.91ID:zaVZWxk9 Smalltalkはどんな分野に向いてるの?
なんでもいいんだけど、昔Perlが流行ってた頃
文字列処理が得意って言われてたみたいなの
なんでもいいんだけど、昔Perlが流行ってた頃
文字列処理が得意って言われてたみたいなの
188デフォルトの名無しさん
2015/02/07(土) 10:14:31.87ID:ZhhiW774 >>187
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も動的なソフトの入れ替えの仕組みがあるか
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も動的なソフトの入れ替えの仕組みがあるか
189デフォルトの名無しさん
2015/02/07(土) 15:09:27.85ID:zaVZWxk9 >>188
> 走ってるシステムを簡単に変更できてすぐに結果がわかる言語
そうだね
開発環境の部分はすごくとっつきやすく感じた
逆に他言語だと今まで動作確認のたびに
いちいちビルドしてたのがめんどうくさく感じてくる
でもいざ実用的なソフトを開発しようとなると
巨大なクラスライブラリを覚える必要がある
しかもそれはロクに説明なくて
ソース(か英語ドキュメント)を読まないといけない
GUIの部分はやさしいし
言語仕様もシンプルだけど
ライブラリを使うのが難しい
> 走ってるシステムを簡単に変更できてすぐに結果がわかる言語
そうだね
開発環境の部分はすごくとっつきやすく感じた
逆に他言語だと今まで動作確認のたびに
いちいちビルドしてたのがめんどうくさく感じてくる
でもいざ実用的なソフトを開発しようとなると
巨大なクラスライブラリを覚える必要がある
しかもそれはロクに説明なくて
ソース(か英語ドキュメント)を読まないといけない
GUIの部分はやさしいし
言語仕様もシンプルだけど
ライブラリを使うのが難しい
190デフォルトの名無しさん
2015/02/07(土) 15:55:49.77ID:O0c7oskK >>189
「お勧めなのは、エキスパートによって作られた、広大なライブラリの類に頼らないことです。それは安易な解決策になってくれるように思えるだけです。代わりに、何もないところから、素早くプログラミングです。Squeakはそうした目的のために作られています。」
特別寄稿 ー Alan Kayからのメッセージ『ダイナミック・オブジェクト』(『自由自在Squeakプログラミング』梅澤真史著)
まぁそうは言っても...だけどね
VWを業務で使ってる人達はどう思うのかしら?
でもライブラリの機能や使用例もソースから調べやすいし、テストしやすいとは思うけど、
最近何も作ってないや
「お勧めなのは、エキスパートによって作られた、広大なライブラリの類に頼らないことです。それは安易な解決策になってくれるように思えるだけです。代わりに、何もないところから、素早くプログラミングです。Squeakはそうした目的のために作られています。」
特別寄稿 ー Alan Kayからのメッセージ『ダイナミック・オブジェクト』(『自由自在Squeakプログラミング』梅澤真史著)
まぁそうは言っても...だけどね
VWを業務で使ってる人達はどう思うのかしら?
でもライブラリの機能や使用例もソースから調べやすいし、テストしやすいとは思うけど、
最近何も作ってないや
191デフォルトの名無しさん
2015/02/07(土) 21:15:51.86ID:zaVZWxk9 >>190
それ読んだとき半分くらいは共感したんだけど
(C++とWin32APIがめんどくさすぎるから)
できる範囲で車輪の再発明するとしても
入出力とか、画像処理、通信みたいな低レイヤーは
ほんとに何もないとこからは作れない
どんな言語でもライブラリ覚える必要はあるんだけど
これは日本語リファレンスがすごい欲しくなる
まあアウトプットが文字列みたいな
小物アプリをぼちぼち作りつつライブラリを
少しずつ覚えていこうみたいな感じなのかな
それ読んだとき半分くらいは共感したんだけど
(C++とWin32APIがめんどくさすぎるから)
できる範囲で車輪の再発明するとしても
入出力とか、画像処理、通信みたいな低レイヤーは
ほんとに何もないとこからは作れない
どんな言語でもライブラリ覚える必要はあるんだけど
これは日本語リファレンスがすごい欲しくなる
まあアウトプットが文字列みたいな
小物アプリをぼちぼち作りつつライブラリを
少しずつ覚えていこうみたいな感じなのかな
192デフォルトの名無しさん
2015/02/07(土) 21:57:43.31ID:O0c7oskK >>191
そうだね そう思う
ググれば日本語でも参考になる例はあるから、なんとかなるけど、
ライブラリ覚える気はないけど、知らなければ発想できないこともあるしね。
『自由自在〜』読み返したり、Pharocast見たりしてできること、アイデアを学ぼうとするけど、
それより何か作ろうとしなくちゃダメかな、と思ってる
そうだね そう思う
ググれば日本語でも参考になる例はあるから、なんとかなるけど、
ライブラリ覚える気はないけど、知らなければ発想できないこともあるしね。
『自由自在〜』読み返したり、Pharocast見たりしてできること、アイデアを学ぼうとするけど、
それより何か作ろうとしなくちゃダメかな、と思ってる
193デフォルトの名無しさん
2015/02/08(日) 09:17:41.26ID:1GzhtbkP 一生思ってろ
194デフォルトの名無しさん
2015/02/08(日) 10:37:51.19ID:c8TnjZ8K Smalltalk ほど単純なルールで構成されてる言語・環境を
どうしてだか理解できない人がいるのはしょうがないとしても
逆恨みして粘着アンチ化するのをどうにか避けられないものか。
どうしてだか理解できない人がいるのはしょうがないとしても
逆恨みして粘着アンチ化するのをどうにか避けられないものか。
195デフォルトの名無しさん
2015/02/08(日) 12:16:09.65ID:lYLvg9qm Squeakでプロトタイプ作って来られるとか経験すれば、逆恨みする人の気持ちも分かると思う
196デフォルトの名無しさん
2015/02/08(日) 13:49:06.94ID:zJSS0tq2 Smalltalkで受託開発してるけど逆恨みする人の気持ちは全くわからない。
197デフォルトの名無しさん
2015/02/08(日) 20:51:02.21ID:CyqMlARA Smalltalkはメッセージングみたいなルールが
全体で一貫してるから理解しやすいと思うけど
なぜかキラーアプリがないよな
代表的なキラーアプリがあれば
もっと広まってたと思うんだけど
全体で一貫してるから理解しやすいと思うけど
なぜかキラーアプリがないよな
代表的なキラーアプリがあれば
もっと広まってたと思うんだけど
198デフォルトの名無しさん
2015/02/08(日) 21:49:39.42ID:c8TnjZ8K それは「計算機の言語を狭い意味でとらえる人」がいかにも言いそうな Smalltalk評かと
http://web.archive.org/web/20041016084842/http://marimpod.homeip.net/chomswiki/24#
http://web.archive.org/web/20041016084842/http://marimpod.homeip.net/chomswiki/24#
199デフォルトの名無しさん
2015/02/08(日) 21:57:44.05ID:c8TnjZ8K てなことをいうと反感かってアンチが増えるわけか… 失敬、失敬^^;
たしかに Ruby におけるとっついやすい Rails みたいなキラーアプリがあるといいのかも。
たしかに Ruby におけるとっついやすい Rails みたいなキラーアプリがあるといいのかも。
200デフォルトの名無しさん
2015/02/08(日) 22:19:38.46ID:p8em6OkY そういえば単なる言語ではないんだったな
言ってることのカッコ良さに当時はしびれた(死語)ものだけど
まあ先を読むのって難しいってことで
言ってることのカッコ良さに当時はしびれた(死語)ものだけど
まあ先を読むのって難しいってことで
201デフォルトの名無しさん
2015/02/09(月) 04:53:09.54ID:f40HLejb 利用者が全体を俯瞰して
際限なくカスタマイズできるのは
良いコンセプトだと思う
でもイメージが肥大化してきたときに
収拾をどうつけるのか
クラスを足すのはかんたんでも削るのは難しい
使い始めちゃうと依存関係ができるから
それとガベージコレクションをすりぬけた
メモリのゴミがたまっていきそうなもんだけど
毎日手を入れ続けてる
秘伝のタレ状態でいいのか
それともOSの再インストや
新OSへの乗り換えみたいに
ファイルでバックアップとっといて
定期的にリセットするのか
長く使ってる人はソース管理どうやってんの?
際限なくカスタマイズできるのは
良いコンセプトだと思う
でもイメージが肥大化してきたときに
収拾をどうつけるのか
クラスを足すのはかんたんでも削るのは難しい
使い始めちゃうと依存関係ができるから
それとガベージコレクションをすりぬけた
メモリのゴミがたまっていきそうなもんだけど
毎日手を入れ続けてる
秘伝のタレ状態でいいのか
それともOSの再インストや
新OSへの乗り換えみたいに
ファイルでバックアップとっといて
定期的にリセットするのか
長く使ってる人はソース管理どうやってんの?
202デフォルトの名無しさん
2015/02/09(月) 05:47:32.02ID:UYOrkYUA >>201
20年ぐらい昔のSmalltalkの話をしていないか?
20年ぐらい昔のSmalltalkの話をしていないか?
203デフォルトの名無しさん
2015/02/09(月) 06:01:28.91ID:f40HLejb >>202
いや使い方調べてて気になったんだけど
ネットの記事は1年前でも20年前でも
同じように並んで表示されてるし
問題ある場合のほうが記事多いから
じゃ今はもうそういう問題
起こらないように進化してるんだ?
いや使い方調べてて気になったんだけど
ネットの記事は1年前でも20年前でも
同じように並んで表示されてるし
問題ある場合のほうが記事多いから
じゃ今はもうそういう問題
起こらないように進化してるんだ?
204デフォルトの名無しさん
2015/02/09(月) 06:09:40.75ID:UYOrkYUA PharoやSqueakならコードはmonticelloで管理するのが普通だし、
filetreeでgitでコード管理する人もいるしで、
イメージの中でこねくり回し続ける人はそう多くないと思うよ。
自分もイメージなんて1週間も経たないうちに捨てる。
新しいイメージに必要なパッケージ群を一通り入れるのは
metacello使えば1行のコードで各パッケージをそれぞれの
レポジトリから最新版をダウンロードしてきて初期化まで
自動的にやってくれる。
filetreeでgitでコード管理する人もいるしで、
イメージの中でこねくり回し続ける人はそう多くないと思うよ。
自分もイメージなんて1週間も経たないうちに捨てる。
新しいイメージに必要なパッケージ群を一通り入れるのは
metacello使えば1行のコードで各パッケージをそれぞれの
レポジトリから最新版をダウンロードしてきて初期化まで
自動的にやってくれる。
205デフォルトの名無しさん
2015/02/09(月) 06:38:17.09ID:f40HLejb206デフォルトの名無しさん
2015/02/09(月) 08:33:43.52ID:Sty7eEqu つまりSmalltalkerが他言語との差異のひとつとして挙げる事が多い
イメージ方式は問題だらけのオワコンで
結局は普通の言語と同じ方式に落ち着いたわけだ
イメージ方式は問題だらけのオワコンで
結局は普通の言語と同じ方式に落ち着いたわけだ
207デフォルトの名無しさん
2015/02/09(月) 09:08:37.00ID:u8pz/p6G208デフォルトの名無しさん
2015/02/09(月) 09:35:59.91ID:u8pz/p6G ただ口が悪いだけで悪意は無かったという可能性もあるから
念のためマジレスしておくと(でもなきゃ煽って情報を得ようとする方略を助長するようで残念なんだけど)
イメージベースのメリットはソース管理だけじゃなくて
たとえば再現困難なデバッグの状態を保存できるとか
(いうまでもなく保存できるかは状況にもよるけど、同等機能をいっさい欠いているよりはマシというレベルで)
オブジェクトメモリ内のオブジェクトの状態保持が主なので
ソース管理の方法が他言語に倣ったからっていちがいにオワコンということはないと思う。
念のためマジレスしておくと(でもなきゃ煽って情報を得ようとする方略を助長するようで残念なんだけど)
イメージベースのメリットはソース管理だけじゃなくて
たとえば再現困難なデバッグの状態を保存できるとか
(いうまでもなく保存できるかは状況にもよるけど、同等機能をいっさい欠いているよりはマシというレベルで)
オブジェクトメモリ内のオブジェクトの状態保持が主なので
ソース管理の方法が他言語に倣ったからっていちがいにオワコンということはないと思う。
209デフォルトの名無しさん
2015/02/09(月) 17:36:40.61ID:UYOrkYUA210デフォルトの名無しさん
2015/02/10(火) 07:31:44.72ID:Ojr93FaP これからはスマホの時代だけど
Smalltalkでスマホ開発ってどしたらいいの?
やっぱWebアプリにするのかな
Smalltalkでスマホ開発ってどしたらいいの?
やっぱWebアプリにするのかな
211デフォルトの名無しさん
2015/02/10(火) 09:28:09.28ID:sCqZIsHm >>183
VisualWorksならexe作れるよ
VisualWorksならexe作れるよ
212デフォルトの名無しさん
2015/02/10(火) 09:34:05.05ID:sCqZIsHm213デフォルトの名無しさん
2015/02/10(火) 10:17:11.93ID:TIteOp3H >>210
Pyonkee とか Dr. Geo とか調べてみそ。
Pyonkee とか Dr. Geo とか調べてみそ。
214デフォルトの名無しさん
2015/02/10(火) 10:37:51.08ID:SrGhIMrb Smalltalkの最大の欠点はOSの上にOSモドキを乗っけるナンセンスさと
マイナーな独自UIを強制するところにあるから、
一からスマホOSをSmalltalkで作って
UIをiPhoneに似せれば天下取れるかもよ
マイナーな独自UIを強制するところにあるから、
一からスマホOSをSmalltalkで作って
UIをiPhoneに似せれば天下取れるかもよ
215デフォルトの名無しさん
2015/02/10(火) 13:36:11.97ID:TIteOp3H まだいたのか、キミ… ^^;
ナンセンスということなら、キミがここにいること自体がナンセンスだよ。
とりあえず、これ↓を10ぺんくらい読んでみることをお薦めすることしか今はできない。
「Smalltalkの底を流れる設計思想」
http://web.archive.org/web/20041016084842/http://marimpod.homeip.net/chomswiki/24#
ナンセンスということなら、キミがここにいること自体がナンセンスだよ。
とりあえず、これ↓を10ぺんくらい読んでみることをお薦めすることしか今はできない。
「Smalltalkの底を流れる設計思想」
http://web.archive.org/web/20041016084842/http://marimpod.homeip.net/chomswiki/24#
216デフォルトの名無しさん
2015/02/10(火) 17:42:43.44ID:f6VLwhXv >>214
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.
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.
217デフォルトの名無しさん
2015/02/10(火) 18:42:43.24ID:Ojr93FaP218デフォルトの名無しさん
2015/02/10(火) 20:05:21.93ID:yCYSfpHb >>215
「Smalltalkの底が知れた設計思想」だね。10回読んでみるわ
「Smalltalkの底が知れた設計思想」だね。10回読んでみるわ
219デフォルトの名無しさん
2015/02/10(火) 20:38:10.59ID:R+rkRsMj 誰うまw
220デフォルトの名無しさん
2015/02/11(水) 02:48:11.00ID:kCQdnFWd クラスライブラリの実装見ると
たいてい使える機能から予想するよりも
短い記述になってる印象なんだけど
なんで?
文法が簡潔で記述量が少なく書けるから?
書き手がOOマスターしてるから?
それとも継承しまくってるから
(継承を追って見るくらいはしてる)
総量は多くても個々が少なく感じるだけ?
じつはシステムブラウザから見えない部分
(インライン)で下処理を済ましてるから?
たいてい使える機能から予想するよりも
短い記述になってる印象なんだけど
なんで?
文法が簡潔で記述量が少なく書けるから?
書き手がOOマスターしてるから?
それとも継承しまくってるから
(継承を追って見るくらいはしてる)
総量は多くても個々が少なく感じるだけ?
じつはシステムブラウザから見えない部分
(インライン)で下処理を済ましてるから?
221デフォルトの名無しさん
2015/02/11(水) 06:47:42.77ID:Ids2Eeke222デフォルトの名無しさん
2015/02/11(水) 09:08:37.73ID:WHehhV2d >>217
基本的に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: ''.
基本的に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: ''.
223デフォルトの名無しさん
2015/02/11(水) 09:09:08.40ID:WHehhV2d "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.
! 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.
224デフォルトの名無しさん
2015/02/11(水) 09:36:26.45ID:WHehhV2d 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名まで存在するか見てくれない。
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名まで存在するか見てくれない。
225デフォルトの名無しさん
2015/02/11(水) 09:53:20.80ID:WHehhV2d 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は受け取れない。
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は受け取れない。
226デフォルトの名無しさん
2015/02/11(水) 10:04:46.87ID:WHehhV2d sl4aでGNU Smalltalkを使う時のヒント。
GUI は下記のような感じで作ることができる。
PackageLoader fileInPackage: 'Android'.
| os event |
os := Android.
"UI表示"
os fullShow:
'<?xml
version = "1.0"
encoding = "utf-8"
?>
<LinearLayout
xmlns:os = "http://schemas.android.com/apk/res/android"
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.
GUI は下記のような感じで作ることができる。
PackageLoader fileInPackage: 'Android'.
| os event |
os := Android.
"UI表示"
os fullShow:
'<?xml
version = "1.0"
encoding = "utf-8"
?>
<LinearLayout
xmlns:os = "http://schemas.android.com/apk/res/android"
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.
227デフォルトの名無しさん
2015/02/11(水) 19:11:13.96ID:kCQdnFWd >>221
処理系はSqueak
クラスは「Kernel-」系のクラス
こんなコアな部分でもこれだけで済むの?
ってのが素朴な疑問だった
(とくに昔の)C++とかのソースだと
1ファイルに何千行もドバッと書かれてるから
小分けで錯覚してるだけかもしれないけど
自力で分かったのは
Kernel-Objects BooleanのifTrueが
インライン展開されてるから書かれてないってこと
処理系はSqueak
クラスは「Kernel-」系のクラス
こんなコアな部分でもこれだけで済むの?
ってのが素朴な疑問だった
(とくに昔の)C++とかのソースだと
1ファイルに何千行もドバッと書かれてるから
小分けで錯覚してるだけかもしれないけど
自力で分かったのは
Kernel-Objects BooleanのifTrueが
インライン展開されてるから書かれてないってこと
228デフォルトの名無しさん
2015/02/11(水) 20:49:58.18ID:Ids2Eeke >>227
> 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++ などで書かれたものと厳密に(たとえば数理学的に)同等の機能を記述しようと思ったら
それなりのコード量になるのではないでしょうか。
> 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++ などで書かれたものと厳密に(たとえば数理学的に)同等の機能を記述しようと思ったら
それなりのコード量になるのではないでしょうか。
229デフォルトの名無しさん
2015/02/11(水) 22:16:32.83ID:kCQdnFWd >>228
うわー詳しい!
触ったばかりとはいえ雑な理解で恥ずかしいです^^;
>実質的にはコード量なりの機能しか実装されていない
パッと見で気づかれないていどに
うまく手を抜いてるってことですかね
たしかにC++みたいな巨大な仕様の言語と
細部の挙動が違うのは想像できます
もしそれが気に入らなければ
Smalltalkは仕様自体をカスタマイズできるんだし
YAGNI的にも開発リソース的にも
それが現実解の気がします
なぜそこが気になったかというと
少ないコード量で実現してるというのは
設計の参考になるからです
うわー詳しい!
触ったばかりとはいえ雑な理解で恥ずかしいです^^;
>実質的にはコード量なりの機能しか実装されていない
パッと見で気づかれないていどに
うまく手を抜いてるってことですかね
たしかにC++みたいな巨大な仕様の言語と
細部の挙動が違うのは想像できます
もしそれが気に入らなければ
Smalltalkは仕様自体をカスタマイズできるんだし
YAGNI的にも開発リソース的にも
それが現実解の気がします
なぜそこが気になったかというと
少ないコード量で実現してるというのは
設計の参考になるからです
230デフォルトの名無しさん
2015/02/11(水) 22:52:16.50ID:Ids2Eeke 正直、どうしてこんないい加減なものが動くのか、私もかねてから不思議に思っています。^^;
まあそこが興味の対象であり、数理学的に論じると味わいのなくなる面白いところでもあるわけですが。
手抜きのことも含めて、もちろん他にも短く書くための工夫らしきことはあるので
もう少し、システムの中身を覗いてみてください。
設計の参考ということでは、しばらくいじってみて興味をひかれた機能を
その動作から実装を予想し、実際にそう実装されているか確認してみると
「その手があったか!」というような発見もあって楽しみながら学べると思います。
(あるいは時間の無駄で終わるかもしれませんが…)
個人的によくお薦めするところでは、print it(式を選択して右クリックメニューなどから
print it すると返値が挿入される機構)がどのように実装されているか、コンパイラの
実装やその動作などと併せて予想・確認してみるのは比較的よい題材かと思います。
まあそこが興味の対象であり、数理学的に論じると味わいのなくなる面白いところでもあるわけですが。
手抜きのことも含めて、もちろん他にも短く書くための工夫らしきことはあるので
もう少し、システムの中身を覗いてみてください。
設計の参考ということでは、しばらくいじってみて興味をひかれた機能を
その動作から実装を予想し、実際にそう実装されているか確認してみると
「その手があったか!」というような発見もあって楽しみながら学べると思います。
(あるいは時間の無駄で終わるかもしれませんが…)
個人的によくお薦めするところでは、print it(式を選択して右クリックメニューなどから
print it すると返値が挿入される機構)がどのように実装されているか、コンパイラの
実装やその動作などと併せて予想・確認してみるのは比較的よい題材かと思います。
231デフォルトの名無しさん
2015/02/11(水) 23:29:09.42ID:kCQdnFWd >>230
>どうしてこんないい加減なものが動くのか
不思議ですよねー
古くからあるから職人芸なのかな
記述が短いから拡張や改造が楽で
助かる面はあります
>実装やその動作などと併せて
>予想・確認してみるのは比較的よい題材
それは良さそうですね
じっくり取り組んでみます
>どうしてこんないい加減なものが動くのか
不思議ですよねー
古くからあるから職人芸なのかな
記述が短いから拡張や改造が楽で
助かる面はあります
>実装やその動作などと併せて
>予想・確認してみるのは比較的よい題材
それは良さそうですね
じっくり取り組んでみます
232デフォルトの名無しさん
2015/02/12(木) 00:10:33.54ID:EWCUv8cS >>228
value := 1 < 2 ifTrue: 3 asValue ifFalse: 4 asValue.
こんな場合もInline展開されないでしょ。
VisualWorksだと最適化しないって警告がでる。
value := 1 < 2 ifTrue: 3 asValue ifFalse: 4 asValue.
こんな場合もInline展開されないでしょ。
VisualWorksだと最適化しないって警告がでる。
233デフォルトの名無しさん
2015/02/12(木) 01:13:27.37ID:DTXdCLax >>222-226
> 基本的に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なんだろうけど
> 基本的に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なんだろうけど
234デフォルトの名無しさん
2015/02/12(木) 05:57:58.02ID:0kpAIZ2u >>231 長い時間をかけたリファクタリングの結果です。
235デフォルトの名無しさん
2015/02/12(木) 09:00:56.49ID:FbfONYzU >>232 あ、ほんとだ。ブロックリテラルで書かないと、インライン展開されないんですね。…とのことです。>>229
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' "
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' "
236デフォルトの名無しさん
2015/02/12(木) 09:26:20.70ID:FbfONYzU >>232
調べてみました。なるほど。
引数がブロックかどうかをチェックしてインライン化を判断しているのですね。
(以下は 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
調べてみました。なるほど。
引数がブロックかどうかをチェックしてインライン化を判断しているのですね。
(以下は 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
237デフォルトの名無しさん
2015/02/12(木) 15:47:56.01ID:1WRWm2Rj >>235
自作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 ).
自作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 ).
238デフォルトの名無しさん
2015/02/12(木) 17:47:15.72ID:FbfONYzU >>237
言いたいことがよく分かりません。
それはコンパイル時の ifTrue: 、whileTrue: などのインライン展開とどういう関係があるのでしょうか?
そもそも 1 + 10 と 1 + MyClass new とではコンパイル結果は変わらないですよね?
そのコードも SmallInteger >> + のプリミティブが失敗して普通にフォールバックしているだけだと思うんですが…
言いたいことがよく分かりません。
それはコンパイル時の ifTrue: 、whileTrue: などのインライン展開とどういう関係があるのでしょうか?
そもそも 1 + 10 と 1 + MyClass new とではコンパイル結果は変わらないですよね?
そのコードも SmallInteger >> + のプリミティブが失敗して普通にフォールバックしているだけだと思うんですが…
239デフォルトの名無しさん
2015/02/13(金) 03:23:10.58ID:ftS8kcXE240デフォルトの名無しさん
2015/02/14(土) 06:34:15.77ID:Z9ZmRxLI IDEが使いやすいので
C++やJavaでも
こういうIDEないかな?
C++やJavaでも
こういうIDEないかな?
241デフォルトの名無しさん
2015/02/14(土) 09:31:23.95ID:+jQ5RdmI 他言語でも同様のものを作れなくはないと思うのですが
Smalltalk環境の機能自体があまり多くの人に知られていないのと
他言語では同様のものを(Smalltalkほどには)簡単には
作りにくいのかもしれませんね。
Clojure 向けですが、最近ではこんなIDEが話題になっていました。
http://cloxp.github.io/cloxp-intro.html
Smalltalk環境の機能自体があまり多くの人に知られていないのと
他言語では同様のものを(Smalltalkほどには)簡単には
作りにくいのかもしれませんね。
Clojure 向けですが、最近ではこんなIDEが話題になっていました。
http://cloxp.github.io/cloxp-intro.html
242デフォルトの名無しさん
2015/02/14(土) 09:46:15.37ID:0dco6ark243デフォルトの名無しさん
2015/02/14(土) 10:10:59.12ID:KJLqYxlY 補完とか名前変更とかSmalltalkのIDEはウンコすぎるじゃん
本当に開発してると一番差が出るところなのに
本当にJavaやC++のIDE使った事あんのかよ
本当に開発してると一番差が出るところなのに
本当にJavaやC++のIDE使った事あんのかよ
244デフォルトの名無しさん
2015/02/14(土) 10:34:04.63ID:0dco6ark (…補完も名前変更も一発なのにこの人は一体何を言っているのだろう…)
245デフォルトの名無しさん
2015/02/14(土) 10:34:59.29ID:0dco6ark (…そもそもこの人が言うSmalltalkのIDEとは何を指しているのだろう…)
246デフォルトの名無しさん
2015/02/14(土) 10:38:06.59ID:KJLqYxlY 無関係な候補が補完されたり、無関係な名前まで変更されてしまうゴミじゃん
247デフォルトの名無しさん
2015/02/14(土) 10:54:34.66ID:+jQ5RdmI 粘着アンチ君、まだいたのか。
他言語で幸せになれなかったのかな…。かわいそうに。
他言語で幸せになれなかったのかな…。かわいそうに。
248デフォルトの名無しさん
2015/02/14(土) 11:01:59.33ID:+jQ5RdmI249デフォルトの名無しさん
2015/02/14(土) 11:34:10.14ID:Z9ZmRxLI250デフォルトの名無しさん
2015/02/14(土) 12:11:34.81ID:Z9ZmRxLI まあ静的型付けほどの精度はないし
多機能さとか総合力でスコアつけたら
VSとかメジャーなIDEのほうが上だろうよ
でも主観的な使い心地はすごい良く感じる
純粋OOPLとか動的とかイメージベースとか
いろんな仕様がかみ合ってるから使いやすい
逆にVSっつーかC++は
かみ合ってないから疲れる
そもそもIDEよりエディタで気軽に書くほうが
好きだったりするんだけど
Smalltalkに関してはIDEじゃないと魅力半減
多機能さとか総合力でスコアつけたら
VSとかメジャーなIDEのほうが上だろうよ
でも主観的な使い心地はすごい良く感じる
純粋OOPLとか動的とかイメージベースとか
いろんな仕様がかみ合ってるから使いやすい
逆にVSっつーかC++は
かみ合ってないから疲れる
そもそもIDEよりエディタで気軽に書くほうが
好きだったりするんだけど
Smalltalkに関してはIDEじゃないと魅力半減
251デフォルトの名無しさん
2015/02/14(土) 12:46:41.71ID:+jQ5RdmI >>249
> Smalltalkは最初からGUIのことまで考えて言語が設計されてるからか
たしかに GUI の扱いやすいさもひとつにありそうですが、個人的にはそれに加えて
Smalltalk(というかアラン・ケイが)重要視して、他言語では良くない余計なものとされる
オブジェクトの全能性(というと語弊があるので「訊けば答えてくれる感」?)も重要だと思っています。
たとえば、ブラウザ機能を実現するのに必要なクラスに定義されたメソッドの一覧や
メソッドのソースは、それぞれクラスやメソッド自身に尋ねればこんなふうにして
簡単に得られます。(後者は Squeak の場合)
Integer selectors
(Integer >> #factorial) getSource
リフレクションの API が充実しているだけと言われればそれまでですが、
(先だってのコードの短さともからめて)そういう切り口ではない、環境内のオブジェクト間の連携を
しやすくする工夫の結果としての IDE の使い勝手であるような気がします。
> Smalltalkは最初からGUIのことまで考えて言語が設計されてるからか
たしかに GUI の扱いやすいさもひとつにありそうですが、個人的にはそれに加えて
Smalltalk(というかアラン・ケイが)重要視して、他言語では良くない余計なものとされる
オブジェクトの全能性(というと語弊があるので「訊けば答えてくれる感」?)も重要だと思っています。
たとえば、ブラウザ機能を実現するのに必要なクラスに定義されたメソッドの一覧や
メソッドのソースは、それぞれクラスやメソッド自身に尋ねればこんなふうにして
簡単に得られます。(後者は Squeak の場合)
Integer selectors
(Integer >> #factorial) getSource
リフレクションの API が充実しているだけと言われればそれまでですが、
(先だってのコードの短さともからめて)そういう切り口ではない、環境内のオブジェクト間の連携を
しやすくする工夫の結果としての IDE の使い勝手であるような気がします。
252デフォルトの名無しさん
2015/02/14(土) 15:51:07.10ID:0dco6ark 「無関係」の定義もなく「変更されてしまうじゃん」とか断言する人って、技術的な議論には全く向かないよね。
253デフォルトの名無しさん
2015/02/14(土) 17:50:52.21ID:pFrYpbo4 彼はSmalltalkをコケにすることができれば満足で
そういう次元の議論は1ミリも望んでいないでしょう。
それはさておき本気を出せばSmalltalkでも
補完くらいなら、そこそこの精度は出せるでしょうね。
そういう次元の議論は1ミリも望んでいないでしょう。
それはさておき本気を出せばSmalltalkでも
補完くらいなら、そこそこの精度は出せるでしょうね。
254デフォルトの名無しさん
2015/02/14(土) 19:17:17.93ID:KJLqYxlY 明日から本気出すw
255デフォルトの名無しさん
2015/02/14(土) 19:18:06.07ID:Hs1Wk7so Smalltalkを覚えたいのだが本業のドカタ仕事に忙殺されてなかなか出来ぬ。
人生は短すぎる。
で、Smalltalkerさん達の本業は何よ?
人生は短すぎる。
で、Smalltalkerさん達の本業は何よ?
256デフォルトの名無しさん
2015/02/14(土) 19:27:03.92ID:RVo+uu2J SqueakのCトランスレータが結構使える
257デフォルトの名無しさん
2015/02/14(土) 20:45:36.71ID:+jQ5RdmI >>253
ID:KJLqYxlY の心の平安のために精度は今のままの方がよさそう。w
ID:KJLqYxlY の心の平安のために精度は今のままの方がよさそう。w
258デフォルトの名無しさん
2015/02/14(土) 20:58:37.42ID:lMIjbsUk >>255
C with Smalltalk
C with Smalltalk
259デフォルトの名無しさん
2015/02/14(土) 21:01:50.07ID:0dco6ark >>255
受託開発サラリーマン
受託開発サラリーマン
260デフォルトの名無しさん
2015/02/14(土) 21:20:15.48ID:Z9ZmRxLI >>251
> オブジェクトの全能性
たしかにC++のクラスが抽象データ型の延長なのに対して
Smalltalkではより能動性とか主体性を持たせようとしてますね
C++だとメモリ管理とかとあわせてクラスの管理をいろいろ
プログラマが抱え込まないといけないからストレスになる
Smalltalkはブラウザ関係もふくめて
メッセージングに任せられる部分が多いので
ストレスが軽減されていると感じます
C++(とVS)は多機能で高性能なんだけど
それだけプログラマの負担も大きくて
Smalltalkはそれよりさらに高性能というよりかは
使用者が使いやすい方向を目指してる感じ
> オブジェクトの全能性
たしかにC++のクラスが抽象データ型の延長なのに対して
Smalltalkではより能動性とか主体性を持たせようとしてますね
C++だとメモリ管理とかとあわせてクラスの管理をいろいろ
プログラマが抱え込まないといけないからストレスになる
Smalltalkはブラウザ関係もふくめて
メッセージングに任せられる部分が多いので
ストレスが軽減されていると感じます
C++(とVS)は多機能で高性能なんだけど
それだけプログラマの負担も大きくて
Smalltalkはそれよりさらに高性能というよりかは
使用者が使いやすい方向を目指してる感じ
261デフォルトの名無しさん
2015/02/15(日) 08:22:59.86ID:n2M7TY52262デフォルトの名無しさん
2015/02/15(日) 13:19:29.87ID:Qwk5nQv8 >>255
ビル管理業
ビル管理業
263デフォルトの名無しさん
2015/02/15(日) 15:56:50.97ID:6aDKSPw5 >>255
マイケルジャクソンの物真似
マイケルジャクソンの物真似
264デフォルトの名無しさん
2015/02/16(月) 01:03:07.94ID:HauqtKo6265デフォルトの名無しさん
2015/02/16(月) 01:10:51.90ID:HauqtKo6 >>251
Squeak以外は使わないの?
VisualWorksとかPharoとかは、補完するSelectorを結構絞り込んでくれるから便利よ。
VisualWorksはCincom本社の海外サイトで個人情報入れなきゃなんないのが面倒だけど。
Squeak以外は使わないの?
VisualWorksとかPharoとかは、補完するSelectorを結構絞り込んでくれるから便利よ。
VisualWorksはCincom本社の海外サイトで個人情報入れなきゃなんないのが面倒だけど。
266デフォルトの名無しさん
2015/02/16(月) 03:14:31.37ID:5Z6+mH61267デフォルトの名無しさん
2015/02/16(月) 11:16:01.67ID:XP4TAyIw >>264
> GNU Smalltalkだと定数の演算とかは糞真面目に計算せずに、
> 翻訳時にすませてるっぽいよ。
それは分かりましたが、それを踏まえてもなお
>> 237
> 自作ClassのObjectに対してはMessage送信省略しないお陰で、
> 数値計算に自作ClassのObjectをツッコむことができるんだよね。
が出てきた理由がまだよくわかりません。
なぜあえてこの例が必要だったのか(Squeak の話をしているときになぜあえて GNU Smalltalk か?
非リテラルオブジェクトではなくなぜあえて自作クラスなのか? さらになぜあえて nil を継承したのか?)、
それぞれによって、どんな理解が進むのかについて少々かみ砕いての解説をお願いできますか?
> GNU Smalltalkだと定数の演算とかは糞真面目に計算せずに、
> 翻訳時にすませてるっぽいよ。
それは分かりましたが、それを踏まえてもなお
>> 237
> 自作ClassのObjectに対してはMessage送信省略しないお陰で、
> 数値計算に自作ClassのObjectをツッコむことができるんだよね。
が出てきた理由がまだよくわかりません。
なぜあえてこの例が必要だったのか(Squeak の話をしているときになぜあえて GNU Smalltalk か?
非リテラルオブジェクトではなくなぜあえて自作クラスなのか? さらになぜあえて nil を継承したのか?)、
それぞれによって、どんな理解が進むのかについて少々かみ砕いての解説をお願いできますか?
268デフォルトの名無しさん
2015/02/17(火) 13:36:20.64ID:+V2W9A9L 64bit VMがlinux版しかないのはどういうわけ
269デフォルトの名無しさん
2015/02/17(火) 22:00:01.91ID:qlRtFPhT >>267
1. SqueakではなくGNU Smalltalkを例に出した理由
Squeak限定じゃなくSmalltalk一般の話かと思いまして
処理系について意識してませんでした。すみません。
2. 数値計算の最適化を上げた理由
Message送信が最適化で省略されない場合の利点を
説明するつもりで書きました。
#ifTrue:ifFalse:で有用な例を示さなかったのは
すぐ有用な用途が浮かばなかったからです。
3. なぜ既存のClassではなく自作Classを例に使ったか
最適化が適用されない既存のClassが
思いつかなかったからです。
SqueakやPharo基準で考えれば、
自作じゃなくてもCollection系で良かったですね。
レスを書いた時は思いつきませんでした。
4. なぜnilを継承したか
Objectを継承すると、ObjectがMethodを実装しているMessageを
#doesNotUnderstand:で委譲できなくなるためです。
SqueakではProtoObjectを使いますが、
GNU SmalltalkやVisualWorksではnilを使います。
5. 何について理解が深まるか
最適化はオマケなので、最適化されるMessageだからと言って
必ず最適化される訳ではないし、
最適化によって自作ClassのObjectを渡すと
動かなかったりするわけではない
という事が理解いただければと考えています。
1. SqueakではなくGNU Smalltalkを例に出した理由
Squeak限定じゃなくSmalltalk一般の話かと思いまして
処理系について意識してませんでした。すみません。
2. 数値計算の最適化を上げた理由
Message送信が最適化で省略されない場合の利点を
説明するつもりで書きました。
#ifTrue:ifFalse:で有用な例を示さなかったのは
すぐ有用な用途が浮かばなかったからです。
3. なぜ既存のClassではなく自作Classを例に使ったか
最適化が適用されない既存のClassが
思いつかなかったからです。
SqueakやPharo基準で考えれば、
自作じゃなくてもCollection系で良かったですね。
レスを書いた時は思いつきませんでした。
4. なぜnilを継承したか
Objectを継承すると、ObjectがMethodを実装しているMessageを
#doesNotUnderstand:で委譲できなくなるためです。
SqueakではProtoObjectを使いますが、
GNU SmalltalkやVisualWorksではnilを使います。
5. 何について理解が深まるか
最適化はオマケなので、最適化されるMessageだからと言って
必ず最適化される訳ではないし、
最適化によって自作ClassのObjectを渡すと
動かなかったりするわけではない
という事が理解いただければと考えています。
270デフォルトの名無しさん
2015/02/17(火) 23:17:58.58ID:1fkLZx/i >>269
なるほど、よくわかりました。
丁寧な説明をありがとうございます。
1. の早合点はさておき、
はじめから 5. のような簡易な説明を添えていただけていたなら
私ども読み手も視野を広げやすくなるので、今後もご助言を
いただけるのでしたら、ご一考いただければさいわいです。
なるほど、よくわかりました。
丁寧な説明をありがとうございます。
1. の早合点はさておき、
はじめから 5. のような簡易な説明を添えていただけていたなら
私ども読み手も視野を広げやすくなるので、今後もご助言を
いただけるのでしたら、ご一考いただければさいわいです。
271デフォルトの名無しさん
2015/02/17(火) 23:46:16.16ID:28IwrLId Smalltalkの新しい書籍
出る予定ないのかな
出る予定ないのかな
272デフォルトの名無しさん
2015/02/17(火) 23:53:37.06ID:WE2OvojJ 一般人が触れる実装がSqueakしかないしな…
レスを投稿する
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪★2
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【画像】外務省局長「この度はうちの🦎がすみません…」中国「……」 [165981677]
- 【雑談】暇人集会所part18
- 外務省局長、よくわからないまま帰国へ [834922174]
