Smalltalk総合 Squeak Pharo
>>253 ID:KJLqYxlY の心の平安のために精度は今のままの方がよさそう。w >>251 > オブジェクトの全能性 たしかにC++のクラスが抽象データ型の延長なのに対して Smalltalkではより能動性とか主体性を持たせようとしてますね C++だとメモリ管理とかとあわせてクラスの管理をいろいろ プログラマが抱え込まないといけないからストレスになる Smalltalkはブラウザ関係もふくめて メッセージングに任せられる部分が多いので ストレスが軽減されていると感じます C++(とVS)は多機能で高性能なんだけど それだけプログラマの負担も大きくて Smalltalkはそれよりさらに高性能というよりかは 使用者が使いやすい方向を目指してる感じ >>259 土方のお仲間じゃないですか。 Smalltalkの受託やってるの? >>238 GNU Smalltalkだと定数の演算とかは糞真面目に計算せずに、 翻訳時にすませてるっぽいよ。 この辺も最適化の過程でMessage送信が必要かどうか判断してるんじゃない? >>239 原則Message送信であってif文の構文糖じゃないからね。 最適化はあくまでもオマケ。 最適化し辛い構文があってもMessage送信の原則は守る必要があるんでしょ。 >>251 Squeak以外は使わないの? VisualWorksとかPharoとかは、補完するSelectorを結構絞り込んでくれるから便利よ。 VisualWorksはCincom本社の海外サイトで個人情報入れなきゃなんないのが面倒だけど。 >>264 > GNU Smalltalkだと定数の演算とかは糞真面目に計算せずに、 > 翻訳時にすませてるっぽいよ。 それは分かりましたが、それを踏まえてもなお >> 237 > 自作ClassのObjectに対してはMessage送信省略しないお陰で、 > 数値計算に自作ClassのObjectをツッコむことができるんだよね。 が出てきた理由がまだよくわかりません。 なぜあえてこの例が必要だったのか(Squeak の話をしているときになぜあえて GNU Smalltalk か? 非リテラルオブジェクトではなくなぜあえて自作クラスなのか? さらになぜあえて nil を継承したのか?)、 それぞれによって、どんな理解が進むのかについて少々かみ砕いての解説をお願いできますか? 64bit VMがlinux版しかないのはどういうわけ >>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を渡すと 動かなかったりするわけではない という事が理解いただければと考えています。 >>269 なるほど、よくわかりました。 丁寧な説明をありがとうございます。 1. の早合点はさておき、 はじめから 5. のような簡易な説明を添えていただけていたなら 私ども読み手も視野を広げやすくなるので、今後もご助言を いただけるのでしたら、ご一考いただければさいわいです。 Smalltalkの新しい書籍 出る予定ないのかな fileURLは使ったことあるけどまさかのhttpもstreamで取れるとは思わなかった 読み込めなかった時のSignalの扱いはわからんがちょっと考えてみるか・・ | aURL aStream aList aLine | aURL := URL fromString:'http://anago.2ch.net/moeplus/'. aStream := aURL readStream lineEndAuto. "withEncoding:#shiftjisは通らない" aList := OrderedCollection new. [ aStream atEnd] whileFalse:[ aLine := aStream upTo:(Character cr ). aList add:( aLine asByteArray asStringEncoding:#shiftjis ) ]. aList inspect. GNU SmalltalkにSmalltalkのVM上で Javaを動かすPackage、その名もJavaがあった。 .jarを読み込んでくれず.classを取り出さないとダメだったり、 Java7には対応してなかったりと微妙な出来だけど、 JavaのClassが完全にSmalltalkのClassとして取り込まれてる所が面白い。 他にも誰が使ったことある人いる? >>270 端からは、あなたがもうちょっと謙虚に聞けばよかった、と見えますよ。 >>264 興味があって調べてみたのですが、GNU Smalltalk で定数同士演算(たとえば + 演算)で メッセージ送信が省略されているのかが ideone.com の処理系では確認できませんでした。 「翻訳時」を「コンパイル時」、つまり「バイトコード変換時」と読み取ったのですが バイトコードレベルで省略されているという話ではないのでしょうか? メッセージ送信が省略されていることの確認の方法を教えていただければさいわいです。 UndefinedObject extend [ plusLit [^3+4] plusNonLit [^3 + OrderedCollection new] ] (UndefinedObject >> #plusLit) inspect printNl "=> [1] source code line number 2 [3] push 3 [5] push 4 send 1 args message #+ [7] return stack top " (UndefinedObject >> #plusNonLit) inspect printNl "=> [1] source code line number 3 [3] push 3 [5] push Global Variable {Smalltalk.OrderedCollection} [7] send 0 args message #new [9] send 1 args message #+ [11] return stack top " http://ideone.com/zWMggc >>276 For some pairs of receiver classes and special selectors, the interpreter never looks up the method in the class; instead it swiftly executes the same code which is tied to a particular primitive. https://www.gnu.org/software/smalltalk/manual/html_node/Performance.html >>277 ありがとうございます。 >>264 の「翻訳時にすませてる」を、3+4 を 7 にする!? と勘違いしていました。 #+ などは特殊なバイトコードを使用し、そうした特殊なバイトコードでは引数の組み合わせ次第で レシーバー(この場合 3)へのメッセージ送信は行なわない、ということですね。 別件ですが、メソッドにコードされたプリミティブが #perfom: 等でコールされたときのためとは 知りませんでした。 そうすると、3 + 4 時は VM 内の + 関数で処理され、 3 + OrderedCollection new 時は + 〜 (バイトコード的には + )が 3 に送られて そこでプリミティブ記述により改めて VM 内の + 関数がコールされ それが失敗してフォールバックコード(たとえば ^super + aNumber)が実行される、 という理解で合っていますか? >>278 > 3 + 4 時は… 自己レスです。(Squeak で、かつ旧 VM でですが)どうなっているか調べてみたら、 VM 内でプリミティブとしてコールされる + 関数(Squeak の場合 primitiveAdd )と バイトコード実行時にコールされる + 関数(同、bytecodePrimAdd )は別物なんですね。 通常は bytecodePrimAdd がコールされ、整数/整数とかでなければメッセージを送信、 #perform: などで呼んだ場合は primitiveAdd がコールされ、それが失敗すると プリミティブに続いて記述してあるフォールバックコードが実行されるというカラクリでした。 似たようなことに興味を持つ人もいるかもしれないので参考まで。 http://askoh.com/mwiki/images/b/be/InterpreterSimulator.zip が >>279 を調べるときに使った Squeak の処理系です。 インタープリターシミュレーターが同梱されているので解凍、Squeak 3.9 仮想イメージ向けの VM を 用意して起動(Simulator.image の方)後、ワークスペースの式を評価することで動かせてお手軽です。 http://vm-dev.squeakfoundation.narkive.com/vxckeGXt/simulate-3-4-with-interpretersimulator にもありますが、bytecodePrimAdd ではなく primitiveAdd のほうに self halt を仕掛けるのが ミソのようです。(bytecodePrimAdd は当然ですがしょっちゅう呼ばれるので…) >>184 >SqueakだとWindowsの.exe作る方法もあったと思うけど ちょっと前の話だけど これをずっと探してて見つけられなかった Visual Worksならできるっていうのは分かったけど SqueakでWindowsの実行ファイル作る方法は見つけられなかった いや実際にSqueakでexeを吐いてるけどって人いる?Think different? by 2ch.net/bbspink.com 今Windowsの環境ないから確認できないけど http://d.hatena.ne.jp/propella/20050925/p1 こことか、リンクのとことか。やったのだいぶ前だけど。 >>283 できた! サンクス! エントリ自体は前に見たことあるけど ウゴモーフとか興味なかったから 流し読みしてしまって見落としてた exe化はできたけど もうひとつやりたいことがあるんだ リリースしたアプリをユーザがいじっておかしくしないように ハローとか開発環境の部分を隠蔽することってできる? http://wiki.squeak.org/squeak/518 ここのcs.gzをDLして、解凍してできたcsをinstall。 Workspaceで Preferences disableProgrammerFacilities をdo it したら、警告ウィンドウ出るのでYes、保存する新しいimage名を指定。 保存したimageを起動すると、望みの動作になってるはず。 >>286 おおすばらしい! ありがとう! まだメニューが残ってたりするけど これでだいぶ普通のアプリっぽくなった できないと勝手に思いこんでたけど 同じところでつまづいた人多そう Smalltalkそのものは大変すばらしいので 日本語情報さえあればもっと広まるのに ああ試してたらメニューバーも消せたわ ワールドメニューがちょっと残るけど ほとんど普通のアプリと変わらない >288 >ワールドメニューがちょっと残るけど 中ボタンで出るyellowButtonMenuのことかなぁ PreferenceのSearch preferences forでgeneralizedYellowButtonMenuを検索して表示して enableをオフにしたら出なくなるけど >>289 できた! 何度も世話を焼かせてしまってすまない これでタイトルバーにねずみのアイコンがある以外は 普通のWinアプリと同じ何もないところまで来たんだけど…… だけどメニューバーも黄ボタンメニューも ほかのワークスペースとかもなくした状態で どうやってイメージ保存してexe書き出しすればいいんだろう? なんか一休さんのびょうぶから虎を追い出せ みたいなとんち状態になってきた >>290 >>これでタイトルバーにねずみのアイコンがある以外は >>普通のWinアプリと同じ何もないところまで来たんだけど…… Preferenceの Show world main docking bar のenable のオフでバーごと非表示にならない? Windows持ってないから状態わからないけど 最後のとんち状態は そうだね...解決策はありそうだけど >>291 >オフでバーごと非表示にならない? ねずみアイコンが2つあって メニューバーのほうはまるごと消せるけど タイトルバーのほうは残る それでデバッグ項目みたいのが残る Winしか持ってないから 他OSとの違いは分からないが でもライセンス的にMITだから Squeakを使ってること自体は どこかで教えないといけないので これでもいいよ >>291 exe書き出しのとんちのほうは アイディアが色々あるので試してみる 超初心者だから時間かかるだろうけど 他言語の経験はあるから 少しずつ調べながらやってみる 最後は自分で何とかしたいと思う 長々と付き合わせてしまって申し訳なかった >>293 こちらこそ久々にいろいろやってみて、いろんな機能を知って面白かった >>256 >SqueakのCトランスレータが結構使える 一行レスだから見逃してしまってたけど 今スレ見返してたらすごい面白そう VMの埋め込みとかで触れないのかと思ってた 普通にワークスペースから使えるものなの? クラス名とか検索するための単語なにか教えて >>295 レスが付かないから自分でザッと調べてみたけど >>256 で言うCトランスレータというのは Slangで書くVMプラグイン機構のことかな? (それとも別の何かがあるなら誰か教えて欲しい) プラグインはしばしば他言語でそうするように DLLみたいなC/C++で書くものという先入観があったから 逆方向でトランスレータとしても使えるのは面白いと思った ただCのソース単体で取り出して 他でコンパイルできるのかとか まだ詳しく調べてないけど >>296 現実的にはslangは単純な整数とか整数の配列の計算くらいにしか使えない 行列とかベクトルの計算とか、その程度が限界 プラグインは普通にcで書くという先入観で正しいと思う >>297 あーそうなんだ、thx Cと自由に行き来できたら便利だと思ったけど 計算で速度稼ぐとか、実用に耐える範囲は限定的か まあ制約が多くても 使えるだけでありがたいけど 下記サイトにオブジェクトの定義が書かれています。 オブジェクト指向プログラミングとは何か? http://eed3si9n.com/node/145 オブジェクトとは何か? 他のオブジェクトへの参照を保持し、事前にリストアップされたメッセージを受信することができ、 他のオブジェクトや自分自身にメッセージを送信することができるアトムで、他には何もしない。 メッセージは名前とオブジェクトへの参照のリストから構成される。 アトムの意味がよくわからないのですが、すみませんがご教示お願いします。 >>299 メッセージを事前にリストアップしないといけないとか、オブジェクトがアトムであるとかは この人の思い込みや勝手な言い換えなので原文(をもう少しマシに訳したサイト)を 当たられることをお薦めします。 http://d.hatena.ne.jp/katzchang/20080807/p2 私が考えるOOPはメッセージング、状態処理のローカルでの保有・保護・隠蔽、 そして全ての物に対する強力な遅延束縛、これだけだ。これはSmalltalkとLISP だけが実現できている。他のシステムでも可能かもしれないが、私は知らない。 >>299 たぶんアトムはLispの用語から取ってるんじゃないかな? でも定義してる中で(一般には)未知の新用語を出すって 筋の良い定義じゃないよね >>300 の原文でも言ってないし 事前にリストアップってのも静的型付けの発想で 遅延束縛を重視するSmalltalkの発想から離れてる アランケイのアイディアと混ぜないで 自分で一から言い直したほうが良い気はする >>300-301 レス、ありがとうございます。 アラン・ケイによる正確なオブジェクト定義の提示ありがとうございます。 Lispのアトムを検索して、これ以上分解できない基本データだと理解しました。 >>302 そこで言ってるアトムは分解出来る機能の集合体なのだから これ以上分解できない基本データではないな 単に個体とかでいいんじゃね ぜんぜん関係ないけどおれアラン・ケイが来日したときサインもらった いいだろう ひさしぶりにスレが動いたから オレもついでに言うけど Smalltalkやってる人がもともと少ないんだけど とくに日本でPharoやってる人ぜんぜんいないな 言語(処理系)は良さそうなんだけど 日本語情報が少なすぎてどうしようもない >>240 Code Browser じゃあダメなん? ttp://tibleiz.net/code-browser/ >>308 おお〜サンクス! こういうのがあるんだ 代替になるか分からないけど触ってみる スタートアップ界の異端児!産業機器 x IT x SmalltalkのSORABITO株式会社 …人材採用のプロ・高野秀敏氏が厳選「いま最も旬なベンチャー」 https://news.thepedia.co/article/1068/ 日本でクックパッドがRubyを広めたように、日本も海外も含めて「SmalltalkといえばSORABITO」となるとおもしろい >>310 >Smalltalkの場合は最も覚えることが少ない言語 言語仕様だけならそうだけど ライブラリまで含めたら 最も覚えることが多い言語になりそうだけどなー まあプロトタイプはSmalltalkで ライブラリ必要な部分はRuby って分担ならわりと妥当だと思うけど Smalltalk の代わりに Ruby とか、よう使わんわ Sakuraエディタでコード書いてPharoのファイルブラウザから読み込ませてたんだけど、直接書けるって教えてくれよ >>313 ああ、そうですよね。すみません。 とりあえず、Pharo by Example でも読んで考え方に慣れてください。 https://ci.inria.fr/pharo-contribution/view/Books/job/UpdatedPharoByExample/lastSuccessfulBuild/artifact/book-result/UpdatedPharoByExample.pdf 英語がちょっと苦手という向きには古いPharo1.1向けですが有志による日本語版もあります。 http://www.smalltalk-users.jp/Home/docs 対応する処理系はこちらから入手可能です。 http://pharobyexample.org/image/PBE-OneClick-1.1.app.zip 展開するだけでインストール可能なはずです(pharo.exeで起動)。 でも慣れたエディタがあるなら、まずはそこからコピペというのもそう悪くないやり方だと個人的には思います。 Smalltalkの組み込みのエディタ機能はおいおい学んで、気に入ればカスタマイズも含めて使えばよいので。 Smalltalk使うなら ワークスペース使うのが一番 Happy birthday Squeak! It has been 20 years! Squeak 5.1 is now available for download. http://squeak.org/ MacでSqueak5.1の右上にある検索使うとvmが落ちてしまう Squeak5.1、日本語フォントの設定ができん! >>318 Apps → Font Importer → 日本語フォントを右クリック → Link Font → Close これでリンクしたフォントが appearance... → system fonts... 等のフォント選択の一覧に現われない? >>316 久しぶりに公式を見に行ったらそれが出てた >>320 MacでOsakaフォントをLinkしようとしたら、 クリックした瞬間にいくつかMorphが壊れて Emergency Evaluatorが出てきたよ… 自由自在っていう本が良いみたいだけど、最新のSqueakで勉強できる? 舌足らずか、自由自在のPDF落としたんですが、Squeak最新のバージョンで 本の内容を同じように試すことは出来ますか?だいぶ違ってます? Smalltalkは変わったツールや習慣、考え方がよく出てくるのですが 無理に通常の言語での習慣や考え方に翻訳して咀嚼しようとすると (やればできなくもないですが、いろいろ無理を生じますし) 学習コストが無駄にかかるわりに、誤った結論に達しがちなので 疑問なことは自力解決にこだわらずにどんどん訊いてください。 ContrAltoJS Xerox Alto Emulator http://www.loomcom.com/jsalto/ Running Smalltalk 76 To run Smalltalk 76, boot the xmsmall.dsk image, and type: >resume xmsmall.boot 第92回Smalltalk勉強会 http://www.smalltalk-users.jp/Home/gao-zhi/dai92kaismalltalkbenkyoukai 9月のSmalltalk勉強会の日程が決まりました。下記の要領で行います。 日時: 2016/9/23(金) 19:00-21:00 (2時間程度) 場所: SORABITO株式会社 東京都中央区日本橋茅場町1丁目9番2号 第一稲村ビル8階 今回は8/22-26にかけてチェコで行われたESUG 2016の報告会です。 ViennaTalkを引き連れ日本から参加されたSRAの小田(@tomooda)さんによるお話です。 Smalltalkのカンファレンスの中では最も歴史があり、かつ盛り上がるのがESUGです。 最新のSmalltalk動向に触れる良い機会でしょう。 macOS sierraにしたらPharoもSqueakも動かなくなった >>332 それじゃないな。クリーンインストールしたほうがいいのかも。画面真っ白で何もできない Sierraクリーンインストールしたけどダメだった。 64bitのイメージと最新vmでならsierraで動いた 32bitのやつは動いたけどすぐ落ちて使えなかった Simulating a Xerox Alto with the ContrAlto simulator: games and Smalltalk http://www.righto.com/2016/10/simulating-xerox-alto-with-contralto.html To start up Smalltalk, download st80.dsk. Load the disk image into ContrAlto, reset, and then run "resume small.boot". (A second Smalltalk disk is xmsmall.zip; "resume xmsmall.boot" starts Smalltalk from this disk.) https://github.com/livingcomputermuseum/ContrAlto/tree/master/Contralto ContrAlto will run on any Windows PC running Windows Vista or later, with version 4.5.3 or later of the .NET Framework installed. VisualWorksってダウンロードできなくなって 通信取り寄せしかないの? pharo5でprintItを調べたくてRubSmalltalkEditorとSmalltalkEditorのprintItにself haltを書き込んで 書き込んで、ワークスペースでprintItしてもデバッガーが起動しないんだけどなんでだろ? そもそもhalt書き込んでる場所が間違ってるんかな 手元のイメージではWorkspaceのprintItはRubSmalltalkEditorのprintItにhaltで止まるが。 実はPlayground? lisp系言語の「純lisp」に相当するような、 チューリング等価な最小のsmalltalk命令セットって どのようなものなのでしょうか? そういうときってバイトコードインタープリターではなく 本当に純粋にSmalltalk式の評価系を考えるのでしょうか? あ、そっちの線は考えていませんでした。 smalltalkが実際にどう実装されてるかは抜きにして、 最小限、どの命令(?)があれば、 チューリング等価な計算力を持つかという、意味でした。 クラスで言えばIntegerとBooleanとBlockClosureがあれば、 逐次、繰り返し、条件分岐ができるけど、 全くSmalltalkらしくない悪寒 今時なウェブ開発をSmalltalkでやってみる | 第98回Smalltalk勉強会 https://smalltalk.connpass.com/event/53492/ 「Smalltalkってまだ生きているの?」とそんな悲しいことを 質問されたりするので、Pharo Smalltalkで今時なウェブ開発をする 方法について話します。 ESUG 2015で入賞したPharoJSや Enterprise Pharo本に掲載されているライブラリなどPharo Smalltalk でウェブ開発をする方法を話したいと思います。 時間があればSeaside等の伝統的な開発方法も紹介します。 日時 2017/3/31(金) 19:00-21:00 場所 SORABITO株式会社 東京都中央区日本橋茅場町1丁目9番2号 第一稲村ビル8階 開発者に嫌われているプログラミング言語トップ25 | マイナビニュース http://news.mynavi.jp/news/2017/03/30/133/ fossBytesに3月28日(米国時間)に掲載された記事 「Which Are The Most Loved and Most Hated Programming Languages|2017」が、 Stack Overflow Developer Survey 2017の調査結果を引き合いに出し、 開発者に愛されているプログラミング言語と嫌われているプログラミング言語の トップ25を伝えた。愛されているプログラミング言語1位はRustで、 これにSmalltalkとTypescript、Swift、Goが続いている。 >>352 そこで挙がっている言語は普及しているから 無理やり使わされる(から嫌い)という要因が大きそう 一方Smalltalkは好きな奴しか残っていないイメージ 嫌いと公言できるほど使いこなせないからかな もっともちょっと使えるようになったからって 知ったかでこういうFUDはやめてほしい https://medium.com/@zerobase/ プログラミング言語の選択とソフトウェア企業の競争優位性に関する本当のところ-smalltalk-clojure-lisp-7378602ac468 Smalltalker の給料が一見高く見えますが、そうではなくて、 このグラフが示してるのはSmalltalkerの高齢化です。 いっときSmalltalkをやっていた、ぼくの実感にも合います。 だいたいコイツ「やっていた」とか言ってても、あれがないこれがないって文句ばっかりで 何かを生み出す気ゼロ。調査だけで終わってろくすっぽ使えてないだろ… おめーなんかより若い人のほうがよっぽどパワーを引き出しているよ Lispは嫌いだけどやってる 最近関数型が偉いみたいな風潮あるから それ自体も嘘だと思ってるけど read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる