サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
sumim.hatenablog.com
はてな的プログラミング言語人気ランキング - Life like a clown 流行りには乗っておくのが吉…と思いつつ、なかなか書き進められないので、とりあえず、クラスやメソッド定義より前のごく基礎的な部分について。思いついたときに断わりなく追記・修正することがありますので、どうぞあしからず。(さっそくですが、タイトルを他の言語のものにあわせて変更しました) ■基本的な考え方 Smalltalk では「オブジェクトに対してメッセージを送る」という考え方のみでコードを書きます。「メッセージ式」と呼ばれる式のみを用います。 ▼メッセージ式 メッセージ式の基本文法です。 receiver message ▼カスケード 式の終わりにセミコロン「;」を置くと、直前のメッセージのレシーバーに対して、続くメッセージを畳みかけるようにして送ることができます。これを「カスケード」と呼びます。 receiv
ちまたで人気だというので買ってみた デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series) を読み進めるときに欲しくなったので、とりあえず オブジェクト指向における再利用のためのデザインパターン[DPjp] および Design Patterns Smalltalk Companion, The (Software Patterns Series)[DPSC] から抜粋してたたき台に。Squeak でそれっぽい実装がみつかったら、あとで加筆修正する。 Abstract Factory [DPjp95][DPSC31] UIBuilder-UILookPolicy Builder [DPjp105][DPSC47] Parser ClassBuilder ByteCodeStream MenuBuilder UIBuilder Factor
MagLev は各々で試していただくとして、Croquet(Squeak Smalltalk 上に構築された、本来はピアツーピア接続を介した仮想空間共有プラットフォーム)を今回、プレゼンツールとして改変したコードと空間内に列べたスライドの画像データを公開しました。 SapRubyKaigi02-sumim.zip 件のプレゼンをお手元のホストOS上で再現するためには Croquet SDK が必要です。 Main Page - Croquet Consortium http://croquetconsortium.org/downloads/Croquet_SDK_v1.0.18.zip とりあえず、Croquet_SDK_v1.0.18.zip を適当な場所に展開し、Croquetを起動(Win では .bat をダブルクリック、OS X では Croquet.1.0.18.image
ついにアルファ版が公開されたようです。 MagLev Ruby VMが公開される、GemStoneの永続化をRubyに maglev/README.rdoc at master · MagLev/maglev · GitHub GemStone/S64(組み込みの OODB 機能を持つ GemStone 社製 Smalltalk 処理系。MagLev と呼ばれる Ruby 処理系のベースになっている…)が 64bit OS でしか動かないということなので、新しく VMware イメージをこしらえてみました(Debian lenny を使用)。なかなか動かせず難儀していたのですが、単純に割り当てメモリをケチっていたためのメモリ不足だったようで、増やしてやったらすんなり動作しました。 とりあえず動かせるようにはなったので、目玉の永続化機能とかは華麗にスルーして、さっそく恒例のフィボナッチで対決
Route 477 - GNU Smalltalkのクラス階層をグラフ化した が面白かったので、参考にして Squeak Smalltalk (Squeak3.10J) と Ruby1.9 (Ruby1.9.1p0) のを作ってみました。 Squeak Smalltalk Ruby Squeak Smalltalk には Traits(ミックスインみたいで、もう少し柔軟な機構)があるのでこれを青で、抽象クラスは #subclassResponsibility を含むメソッドを持つクラス OR 自分が抽象クラスだとコメントで主張しているクラス OR 名前が Abstract で始まるクラス で判断し、赤で塗りつぶしています。Ruby は抽象クラスの判断ができなかったので、モジュールだけ青にしてみました。 Squeak Smalltalk の一部のクラスが孤立しているように見えますが、これはお
http://railsconf.blip.tv/file/2089545/ Ruby の未来は TDD が救うというお話。ただ、悲しいかなボブおじさんが持っている Smalltalk の特に最近の知識は、最新の Smalltalk といえば Squeak(←VisualWorksだろjk)、Squeak で書かれたソフトは Etoys くらい(←Seasideくらいは知っとけよorz)…というきわめてお粗末な部類の、しかし、識者にはありがちなレベルであるため、ツッコむだけヤボというくらいツッコみどころ満載ですので要注意。そんなわけで、「滅びた」「死んだ」のくだりは、「かつての勢いは失った」くらいに読み替えつつ、ジェームス・ロバートソンの指摘する点も補足しながら聴いていただければと思います。 00'00"〜 地球史 05'40"〜 Ruby は Smalltalk の生まれ変わり、とも 0
1.9.3 への導入を目指す予定とか。こうした機能は、Ruby で Smalltalk ばりのクラスブラウザのようなツールを作るのにも役立ちそうですね。 例: proc = ->(x, y) { x + y } proc.to_source #=> "x + y" [ruby-dev:39301] [Feature #2080] Proc#to_source, Method#to_source ちなみに、Squeak Smalltalk の似たような機能だと #decompileString とか #getSource が近いでしょうか。 | block | block := [:x :y | x + y ]. block decompileString "=> '[:x :y | x + y]' " (Integer >> #factorial) getSource asString "
ケントベック「SmallTalkが世の中に広まればいいとおもっていたら、広まった時の名前はRubyだった」 幸せなエンジニアになるための仕事術/まつもとゆきひろ&平鍋健児 - @tmtms のメモ ケント・ベックともあろう人が「SmallTalkが世の中に広まればいい」などと間違っても願うわけがない。^^; まあ、そんなことはともかく、この発言は Ruby が Smalltalk の後継や代替としてあるかのような誤った印象を聞き手に与える可能性があるので(VisualWorks の存在を知らない人がよくやりがちな “Smalltalk は今は Squeak と呼ばれている…” みたいな紹介と同じ程度には)適切ではないと思う。 Matzにっき(2007-06-25) - Where I Come From
このページは削除されました Python2.5.1、 Ruby1.8.6、Ruby1.9.1 に Smalltalk 勢として愚直な Squeak3.9 と、精鋭の VisualWorks7.6NC とを加えて速度比較を行なってみました。Java にはあえて抜けてもらったり、元ページで活躍の Python3.1 がまだインストールしてないので試せていないのと、それぞれ使用した処理系が微妙に古い点はどうかお許しを。たんにインストール and/or アップデートをサボっているだけです、すみません。すみませんっ。[8/12 UPDATE: Python3.1 の計測値、加えました] その代わりと言ってはなんですが、ハード(MacBook 2.4GHz 相当品)は変えずに OS を Mac OS X と Boot Camp で動かしている Win Vista (Smalltalk 以外は Cygw
パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ) 作者: 江渡浩一郎出版社/メーカー: 技術評論社発売日: 2009/07/10メディア: 単行本(ソフトカバー)購入: 75人 クリック: 1,306回この商品を含むブログ (159件) を見る とても面白かったのであっという間に読み終えてしまいました。タイトルにある「パターン」「Wiki」「XP」については、以前、それぞれの成立経緯を調べてみたこともあったので、べつに買って読むほどのことはないかなーと当初は思っていたのですが、著者による、 RubyKaigi2009初日のライトニングトークの一番最初に発表します。タイトルは『パターン、Wiki、XP、そしてRuby』。テーマは、この本とRubyの関わりです。 この本には、オブジェクト指向の生みの親であるアラン・ケイやSmalltalkとの関わ
アプリケーションモデル これは、Fowler氏がVisualWorks Smalltalkのやり方を念頭において説明しているパターンだ。残念なことに私はSmalltalkに詳しくないので、私の理解が正しいか確かめる術がない(助けてsumimさん!!)。 http://blog.inomata.lolipop.jp/?eid=920323#p1 Smalltalk で書かれたコードがあったところでさしたる助けにはならないとは思いましたが、私自身の VisualWorks の GUIフレームワークに対する勉強も兼ねて BMI値チェッカー(計算機)のサンプルを書いてみました。ファウラーの指摘にもあるように、テキストフィールドの背景の色を変えるのはたいへんそうなので、未実装です。 BMIChecker open で起動できます。 Smalltalk defineClass: #BMIChecker
ソフトウェア工学の講義中、先生が「Rubyはクラスにメソッドを詰め込みすぎ」という主旨のことを言ったけれど、オブジェクトが何であるかよりもオブジェクトがどのように振る舞うかを重視するとき、Rubyのやりかたは正しいんじゃないかなーと思った。 ともくんのママ on Twitter: "ソフトウェア工学の講義中、先生が「Rubyはクラスにメソッドを詰め込みすぎ」という主旨のことを言ったけれど、オブジェクトが何であるかよりもオブジェクトがどのように振る舞うかを重視するとき、Rubyのやりかたは正しいんじゃないかなーと思った。" CocoaのNSStringクラス見せたら発狂すんじゃないかと思ったが、SqueakのStringクラス見たら自分も発狂しかけた。 ともくんのママ on Twitter: "CocoaのNSStringクラス見せたら発狂すんじゃないかと思ったが、SqueakのString
そろそろ http://railsconf.blip.tv/file/2089545/ について何か言っておこうか…と思い、その下調べにと Robert C. Martin のブログをぼんやりと眺めていたところ Ruby がらみの ArticleS.UncleBob.MakingMessesInRuby というエントリーを見つけたまではよかったのですが、そこに例として登場した問題が面白そうだったので、ついつい本題(Smalltalk を勝手に殺すなとか、自由すぎることの問題とか)そっちのけで、遊んでしまいました。駄目じゃん。 Référentiel des pratiques Agiles 5巻からなるシリーズ本(どれも定価8ユーロ)があり、異なる巻を1冊ずつ組み合わせることでまとめて購入すると、冊数に応じた割引き(2種類なら 5%、3種類なら 10%、4種類なら 20%、全種類なら 25
未来の言語は「APL」? Rubyのまつもと氏が講演 − @IT で登場した APL で書かれたライフゲームが何をやっているのかさっぱりだったのが悔しかったので、とりあえずちょっと勉強してだいたいの内容が分かるくらいには読めるようにしてから Squeak Smalltalk でほぼ同じことをするコードに書き直してみました。 life ← {↑1 ω∨.^3 4=+/,¯1 0 1∘.Θ¯1 0 1∘.Φ⊂ω}細かいことですが、くだんのスライドでは二番目の ¯ のあとの 1 が抜けていますね。^^; life := ... のところのブロック定義が上の APL のコード(life ← ...)に相当します。もちろん APL には短さはもちろん流れの美しさの面でもとうていかなわないわけですが、標準ライブラリ・組み込みメソッドのみで似たような処理をこの程度で書ける言語もそう多くはないと思います。
次のような #f が定義されたとき、 def f yield proc{ |v| return v } end これをコールする次のコードはどんな出力をするでしょうか? p f{ |b| 10.times{ |i| p i; b[i] if i == 5 } } もちろん Ruby には無用なテクニックなんですけれどもね。^^; 2ch で紹介されていた Smalltalk の #valueWithExit の実装を見ていて面白いなと思ったので。
2月8日(日) あさ7時30分 新シリーズ「儲かり偉人伝」パソコン界の偉人!成功秘話!! こだわりの男!スティーブ・ジョブズの現在までを一挙公開。 リンゴマークのコンピュータファン西郷輝彦がスタジオに!! みどころ 久々となる新企画「儲かり偉人伝」がスタートする。 その記念すべき第1弾はリンゴマークのコンピュータの創業者スティーブ・ジョブズを特集する。 しかし、この会社ならビル・ゲイツなのでは?と思われる方もいらっしゃると思いますが、マスコミの前になかなか登場してこないというスティーブ・ジョブズの功績と実力は掘り下げれば掘り下げるほと興味深い。 スタジオゲストには、発売されているほとんどのモデルを買ったというファンの西郷輝彦と経済アナリストの森永卓郎を招き、長年に渡って実際に使ってきた立場でのトークも展開される。 さて、スティーブ・ジョブズだが、簡単に言えば現在のパソコンのスタイルを考案し
id:sumim:20090121:p2 の続き。はたしてどんな言語にこの種の機能が備わっているのか興味を持ったので調べて書いてみることにしました。ただ、会社員と学生の例のままではワンニャン同様、そういうことが出来て何が嬉しいのかイメージしにくいと思うので、Common Lisp HyperSpec の CHANGE-CLASS にある座標系変換の例に変えましょう。こちらのほうが、シンプルなまま要点を押さえていてよさそうかなと。 念のため概要と条件を書いておきますと、手順としては、 直交座標系(cartesian)と極座標系(polar)という二つのクラスを定義 極座標系のインスタンスを生成後、それが属するクラスを直交座標系に変更 (おまけで)ふたたび極座標系に という操作を行ない、その後、 直交座標系クラスに属するようになったときに x や y の値も(変換されて)引き継がれているか?
インスタンスが属するクラスをあとから変更する操作をいろいろな言語で - Smalltalkのtは小文字です Ruby では evil-ruby の #class= が必要になります。また、Ruby には Smalltalk の #become: に相当する機能もないので、Python で使った transmogrify もどき(実装は泥くさいものとなってしまいましたが…^^;)を新たに作り、Smalltalk の #as: っぽい振る舞いとの合わせ技で実現してみました。 require 'rubygems' require 'evil' class Object; def as(similar_class); similar_class.new_from(self) end end class Cartesian attr_reader :x, :y def initialize(x, y
アランさんは1960年代からパソコンの研究を始め、70年代にプログラミング言語を用いた世界初のパソコンソフトを開発。コンピューターの発展に大きな功績を残した。 http://www.iza.ne.jp/news/newsarticle/it/internet/214298 アランさんは1960年代から「ダイナブック」と自ら名付けた“パソコン”、つまり「個人向けコンピュータ」の構想および研究を始め、70年代にオブジェクト指向プログラミング言語を用いた世界初のGUIを前提としたパソコン向けの基本ソフトである「暫定ダイナブック環境(Smalltalk)」を開発。コンピューターの発展に大きな功績を残した。 というところではないでしょうか。Flexマシンのことまでは意識していないのと思うので。 さしたる主張なしにただ「パソコンの父」というキャッチーなキーワードに倣っただけ…という可能性もなくもないで
つまり会社員、学生をクラスとして定義した場合には、ある人が会社員になったり、学生になったりすることをオブジェクト指向プログラミング言語では直接表現できないのです。 オブジェクト指向は本当に「オブジェクト」指向か? OOとはなにか - みねこあ で引用されているこの文を見て、「できないのです」と言い切られてしまうとついね。つい。^^; ということで文脈も空気も読まないで悪ふざけ。 Object subclass: #会社員 会社員 >> 就学する ^self become: (self as: 学生) 会社員 >> 就職する self error: 'すでに会社員です' Object subclass: #学生 学生 >> 就学する self error: 'すでに学生です' 学生 >> 就職する ^self become: (self as: 会社員) | Aさん | Aさん := 学生
http://idm.s9.xrea.com/ratio/2008/12/14/000803.html ぜんぜん関係ない話ですが、この記事で Yugui さんが、ごくふつうのことのように Smalltalk を使って確かめた結果を例として挙げてくださっているのが個人的にはとっても嬉しかったです。 とかく世間では敬遠されがちですが、じつのところ Smalltalk はとってもシンプルな代物なので(文法は「object message」のみで、処理系は「do it」と「print it」相当の操作を組み合わせるだけでたいていのことは可能)、他の多くの人にもこんなふうに気軽に動かして中身を探索し、面白いネタを掘り起こしてもらえればなと願っています。 さて。いくつか気になった点を以下に書き出してみました。 クラス、メタクラス、メタメタクラスと辿る上でSmalltalkのMetaclass clas
以下のメソッドを呼び出すと何が得られるだろうか? def foo return 1 ensure return 2 end Rubyのensureはreturnを撤回できる - Hello, world! - s21g Smalltalk だと、これはどんな動きをするのかと疑問に思ったので手元の Smalltalk 処理系(Squeak[link]、Cincom[link]、Dolphin[link]、GNU[link])で同じようなこと試してみました。 [^1] ensure: [^2] "=> 2 " Rubyと同様にリターン(Smalltalk では「^」)は撤回されるようです。用事を済ませて出て行った人を、首根っこひっつかんで引き戻すみたいでちょっと面白い動きですね。 (ただ、Cincom Smalltalk では #ensure: の引数のブロックにリターンを含むべきではないと警
一方のWindowsでは、最初から2ボタン以上のマウスを標準的に使用するようにはなっていたものの、左ボタンと右ボタンの違いをシステムレベルではっきりと分け、それぞれの用途を明確に定めたのはWindows 95からだった。その時点で、右ボタンはコンテクストメニュー用として割り当てられた。従って、コンテクストメニューも右ボタンによる操作も、WindowsのほうがMacより歴史が長い。 ASCII.jp:右クリックメニュー、その歴史と効果 (3/3)|柴田文彦の“GUIの基礎と実践” 必ずしも「間違い」というわけではないのですが、右クリックメニュー自体は Mac の前身の Lisa のプロトタイプ時代にすでに試されていますから(Lisa のプロトタイプは2ボタンマウスだった)、Microsoft より Apple のほうが取り組みとしては古い、というのが実際です。まだメニューバーやプルダウンメニ
id:sumim:20080919:p1 の続き。umejavaさんにコメントやメールで教えていただいたので、フィールドの色が変わる版も。複数のウインドウが共通のモデルを共有したときにも動作するように細工してみました。 | app1 app2 window1 window2 | app1 := BMIChecker4 new. window1 := app1 open window. app2 := BMIChecker4 new. app2 height: app1 height. app2 weight: app1 weight. app2 bmi: app1 bmi. window2 := app2 open window. window1 moveTo: 100@100. window2 moveTo: window1 displayBox topRight + (20@0) 前の
似たような話の繰り返しで恐縮ですが、現時点での自分の理解の整理のためのメモ。 前後しますが、こうして改めてまとめてみると、純粋な抽象データ型のオブジェクト指向プログラミングは、メッセージングのオブジェクト指向の影響も多分に受けている OOAD(分析・設計)のテコ入れ無しには、ちょっと弱っちく&古くさい感じが否めませんね(何をいまさら…ですが)。^^; とはいえ、OOAD は OOP とはまた別のものなので、同じ「抽象データ型の〜」あるいは「メッセージングの〜」だからといって対応する OOP とひとくくりにしてよいかというとそういうわけでもないので(整理・分類上は)難しいところです。 ▼ 抽象データ型のオブジェクト指向プログラミング 端的には、「ユーザー定義型(抽象データ型)」を、当初は「クラス」、今はそれに加えて「インタフェース」に準ずる言語機能によるサポートを前提として実践するプログラミ
もろもろの勉強を兼ねて、一番初めのObjective-Cプログラム (1/3):Cocoaの素、Objective-Cを知ろう(2) - @IT を改変して、KVO で歌詞変更を監視して自動出力する版への書き換えにチャレンジしてみました。 a Singer は a Song を与えられると、自身をオブザーバーとして a Song に登録します。そして、どこかで歌詞が変更されると、その旨の通知を受け、自発的に sing するというカラクリになっている…はずです。^^; Singer.m #import <Foundation/Foundation.h> #import <Foundation/NSKeyValueObserving.h> #import <AppKit/AppKit.h> #import <stdio.h> @interface Song : NSObject { NSStr
LazyなFibonacci - (hatena (diary ’Nobuhisa)) にからめて。 墓に刻むほどクールではないけれど、そういえば Ruby にも特異メソッドを使って… fib = [1,1] def fib.[](i) i < size ? super : self[i] = self[i-2] + self[i-1] end p fib[39] #=> 102334155 というような感じのフィボナッチ数列の実現方法があったことを思い出したので、これに倣って、C# の勉強を兼ね、見よう見まねで似たような仕組みのフィボナッチ数列にチャレンジしてみました。 using System; using System.Collections.Generic; class Fib : List<int> { new public int this[int i] { get { if
id:sumim:20080913:p2 の続きで、最後に本題(?)の特異クラスの特異クラスが作られた場合について。 これまでの Ruby1.8 では、特異クラスに特異クラスが作られると、文字通り特異クラス特異的クラスが作られていました。こうして新しく設けられた特異クラスの特異クラスの真のクラスは特異クラスの特異クラス自身になります。 Ruby1.8 で #<Class:Foo> および #<Class:#<foo2>>、それぞれの特異クラスを作った場合 善し悪しはともかく、これは特異クラスに対する(少なくとも私個人的には)メンタルモデル通りの動きであるため、逆にそのまんま過ぎて「こんなんでいいの?(インスタンス特異クラスのときの苦心はなんだったのか?)」などとなんだか肩すかしをくったような感じがしますね。汗 他方で Ruby1.9 では、同じことをすると、もっとびっくりすることが起こりま
sumimさんの「Ruby1.9のクラスのメタ階層を整理する」という記事、Rubyの型階層は雑然としているというのは、なんかsumimさんの図が悪いような気もするなぁ。整理すればもうちょっと情報を引き出せるよ。 Ruby1.9 のクラスのメタ階層とかevil-rubyとか - 世界線航跡蔵 んー。メタ階層がどうなっているかを整理したかったので、書き方はこれでいいのです。お世辞にもきれいな絵とは言い難いですが、雑然としているのはやはり Ruby の実状を示しているからだと思います。 yugui さんの図は、たしかにクラスと特異クラス(メタクラス)が揃って並んでいて見た目にはきれいなのですが、これだとクラスが整然と並んでこそいるものの、肝心のメタ階層がどうなっているかという情報のほうは、正直なところ、いささか得にくいものになってしまっています。 図の目的をわかりやすくするために、先に示した図か
次のページ
このページを最初にブックマークしてみませんか?
『Smalltalkのtは小文字です』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く