レガシーコード生産ガイド

私に教えられることなら

Smalltalk

2017年からSmalltalkに(再)挑戦したい人へ

この記事はSmalltalk Advent Calendar 201614日目の記事です。 ある程度プログラミング経験がある人を対象にしています。特に、一度触ってみたがよくわからなかった、という人向けです。 環境構築 まず最初は、Squeak Smalltalkの、有志によって日本語化され…

Squeak5.1 / fcitx / Linux Mint で日本語インライン入力

over the spot方式ですが、できました。 Windowsで使う場合は別の記事参照。 手順 日本語TTFフォント導入 まずなんらかのフォントを入れておきます。 手順はSqueak5.0で好きなTrueTypeフォントを使い、日本語を表示する - レガシーコード生産ガイドの通りで…

Smalltalk処理系開発日記6 バイトコード追加

前回でバイトコードがいくつか動作したので、どんどん追加していきました。 github.com しかしバイトコードのテストがやや面倒です。 とりあえずループからバイトコード用の分岐を切り出し、一つの命令ずつ処理できるようにしました。しかし、それでも テン…

Smalltalk処理系開発日記 3

前回 ある程度進捗したら振り返りのために書こうと思っているのですが、久々のVM制作が面白くてついのめり込んでしまい結構進みました。自動テストが簡単に書ける段階はやっぱり楽しい。 github.com 実装したもの メッセージングに必要なオブジェクトについ…

Smalltalk処理系開発日記 2

前回の最後に書いた通り、CopyGCを実装しました。 github.com いつも通りCheneyのアルゴリズムです。 参考 - GC/standard/Copying - GCアルゴリズム詳細解説 - MiniLispのガベージコレクションを解説する - Qiita 流石に何回も書いてたら慣れてきたので、記…

Smalltalk処理系製作日記

次はどの処理系作ろうかな— phaendal (@phaendal) 2016年8月29日 投票ありがとうございました!次はSmalltalk処理系に挑戦します!開発にあたってギター・ドラム・ベース急募。当方ボーカル。完全プロ志向、初心者お断り。— phaendal (@phaendal) 2016年8月3…

SqueakのVMConstructor探検メモ

Squeakみたいに、Smalltalk VMをサブセット(Slang)で書いて楽しみたいという野望があるんですが、最近の(Cog)VMの生成周りはどういう設計なのかさっぱりわかりません。 SqueakのSlangがVMシミュレーションに便利なのはわかるんだけど、いかにCのボイラー…

Squeak5.0/Pharo4であるクラスの全メソッドのソースをクリップボードに

ブログ等に貼るために、Smalltalkのクラスのメソッド定義を手軽にコピーしたい。 クラスの定義はFileOutでファイルに書き出せるけど、いちいちファイルからコピーするのも面倒だし、あまりブログ等で眺めるのには適してない表示になる。 コピペも面倒だし、S…

Pharo4/Moose5でGlamourを使ってGUIを構築するメモ

Squeak SmalltalkでToolBuilderを使ってGUIを構築するメモ - レガシーコード生産ガイドに続き、今回はMoose5(Pharo4)でGlamourを使い、Dictionaryの内容を表示するGUIを作ってみる。 Pharo4にGlamourを入れれば多分使えると思うけど、Moose5が全部入りで楽な…

Pharo4/Moose5にChromeなどからペーストする

Linuxだと Pharo4/Moose5内部でコピー → 外部へペースト はできるけど、 外部でコピー → 内部へペーストは、Chromeなどできないアプリケーションがある。(Win/Macについては知らない) で、解決策を見つけた。--textenc UTF-8オプションをVMに渡す。 [Pharo-u…

Squeak SmalltalkでToolBuilderを使ってGUIを構築するメモ

いい加減FooMorph newからMorphを作っていくのが面倒になってきた。 じゃあ簡単なフレームワークを作ろうかとも思ったけど、せっかくなので既にあるものをSqueak内部で探してみる。 調べたところ、Squeak5時点でのクラスブラウザ等のツールは、ToolBuilder(M…

Squeak Smalltalkで、未テストメソッドのテストを一気に追加

相変わらずPetitParserでNirnLeaf用のコンパイラをちまちま書いている。 流石にテストが無いのが不安になってきたので、Test Runnerを使ってみることにした。 Test Runnerは、TestCaseのサブクラスをテスト対象クラスとして自動で追加して、testFooBarみたい…

PetitParserでバックトラックが重い場合

Smalltalk処理系を作ろうと思い、Smalltalk→バイトコードのコンパイラで止まっていたNirnLeafをどうにか先に進めようと、PetitParserをSqueak Smalltalkで使ってみることにした。 Lukas Renggli: Writing Parsers with PetitParser Polishtalk - Qiita を読…

Squeak Smalltalkでstub/todo用メッセージ

Smalltalkで少し大きめの処理を書くときは、自分は大抵デバッガ内でメソッドを作りながら進める。 そのやり方がいいのか悪いのかは別として、書くべきところをデバッガが勝手に用意してくれるので便利。 ただ、「今はこの条件は無視する(todo)」とか「今はこ…

Smalltalk風VM製作中

1週間ほど帰省したんだけど、夜などにA Little SmalltalkやBluebookを参考にしつつSmalltalk「風」環境を目標にVMを作っていた。 github.com ちなみに「風」としたのは、Smalltalk-80とか何かに準拠するわけじゃないよ、ということです。 スタックマシンなん…

Squeak5 on Windows7で日本語インライン入力に対応させる

www.youtube.com FFIを利用します。 環境はWindows7(64bit)です。 C言語、WindowsAPI、Smalltalkすべてについて初心者なので何か凄まじく危ないことをしているかもしれません。真似しておかしくなっても自己責任でお願いします。助言など大歓迎です。 手順な…

Squeak5.0でHTTPサーバを立ててSmalltalk環境外と通信する

パッケージWebClient-Core内にあるWebServerクラスが便利そうなので使ってみた(Client?)。いつから入ってるものなのか知らないけど、とりあえず5.0にはある。 クラスメソッドのexampleDoItなどを参考に、 htmlを表示 XHRでブラウザ側からテキストを送信 Sque…

Squeak Smalltalkで荷物運びゲームを作るガイド

これはSmalltalk Advent Calendar 2015の7日目の記事です。 はじめに この記事では、Squeak Smalltalkで荷物を運ぶゲームの簡易版を製作した過程などを紹介します。 完成品のプレイ動画です。 www.youtube.com この記事対象はかなり限定されています。簡単に…

Squeak Smalltalkでクラスメソッドとインスタンスメソッドを相互に移動/コピー

明け方、早くに目が覚めたのでSqueakを探検して、ブラウザのメニューを片っ端から調べた。 いろいろ便利なの見つけたんだけど、前々から欲しかったタイトルの機能が無かったので作った。 もうとっくに同じ機能あったり、他にうまいやり方なんかあったら教え…

Squeak Smalltalk練習中

作業記録。相変わらず、空いた時間にちょいちょいSqueak Smalltalkを触っている。触るために時間を空けているとも言える。 まずGUI/可視化ツールを手っ取り早く組み上げられるようになりたい、というわけで今の課題はドローツールみたいなものを作る練習。 y…

SqueakでTodo Board作った

環境はSqueak5.0。 youtu.be 何やったか Squeak Smalltalkで色々作る題材として、最初はTodoリストを作るつもりだった。が、なんとなく困難に体当たりしたい気分だったので、今まで取り組んだことがないタイプのGUIに挑戦してみることにした。Trelloを結構便…

Squeak5.0でXYPadつくった

相変わらずMVCよくわかってないので、練習としてXYPad作ってみた。 www.youtube.com MonticelloとFileTree使ってGithubにも一応あげた とりあえずモデルとその他に分けて、モデルがビュー・コントローラに依存してなければええやろ!ということで、 MMTModel…

Squeak5.0で好きなTrueTypeフォントを使い、日本語を表示する

(2015-11-23追記)id:sumimさんがFontImporterToolを使うやり方を紹介されています。 必要なものは日本語が表示できるTrueTypeフォントファイル(.ttfや.ttc)のみです。私の環境はLinuxですが、読みかえれば他のOSでも可能だと思います。Squeak-5.0-All-in-One…

自由自在Squeakプログラミングを読み終わった

……と言いたいところなんだけど、最後のVMプラグイン作成の章は飛ばすことにした。どうも使ってるSqueak4.4jaにはVMMakerなく、やり方も変わってそうだから調べるのが多少めんどうなのと、Squeak/Pharo今もガンガン進化していってるし、VMプラグイン作りたい…

自由自在Squeakプログラミングを読んでいる

現在7章の半分ぐらいまで ノート代わりのコード ずっと勉強してこなかった人生なので、体系的に知識を頭に入れる技術が身についてない。 好奇心に従っていればいいかな、と思っていたけど、基礎知識の不足を痛感することが増えたので、読書技術の構築や練習…

GNU Smalltalkで日本語(Unicode)を扱う

Pharo4もSqueak5もLinuxMint+fcitx(Mozc)で日本語入力できないのでGNU Smalltalk使ってみる。 コンソールからgstを起動してutf-8で使う場合、一応文字列は日本語で入力・表示できるけど、内部的にはutf-8じゃなくて1byteの列なので扱いにくい st> Transcript…

Squeakでオブジェクト指向の練習

Twitterで度々呟いてるんだけど、オブジェクト指向できていますか?というスライドを見て「これは……」と思ったので練習してみた。 枠として使うMorphの中に、好きなMorphを突っ込むと、重力をうけつつ跳ねまわるようにしたい。 特に守ったルールは インスタ…

Squeakメモ

使用してるのはSqueak-4.5-all-in-one クラスコメントを書き換える方法、書き換えると出るエラーへの対処 参考:http://forum.world.st/Save-a-class-comment-in-Unix-Squeak-4-5-leads-to-RemoteString-past-end-of-file-td4771346.html 書き換えるとエラー…

Smalltalk(Squeak)でちょっと待つ

Squeak触っておこうと思って、自由自在 Squeakプログラミング PDF版を読み始めた。そのときやりたくなったことのメモ。 最初の方にこういうカンジのコードが出てきて joe := Morph new. joe openInWorld. joe flash. joe delete. 1行ずつ実行すると何やら物…