読者です 読者をやめる 読者になる 読者になる

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

私に教えられることなら

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 を読…

読書記録ブログ削除/今後について

読書記録や頻繁に更新するためのブログ(「断片」)を消しました。普通に2つ管理するの面倒でした。 それと、ツイッターで見かけたこれ 1/英語圏で長く働いてますが学習が遅い人は多いです2/日本のエンジニアのブログ界は「技術力つけねば死ぬ」という競争論が…

3imp 4.1-4.4メモ

まず流し読みしてたけど、現時点でもわかったことが多いのでメモしておく。しかし、英語が……英語が…… スタックベースモデルでは、フレームの内容は全て線形にスタックへ積んでいく。 dynamic link はcallerフレームへの、static linkはlexicalフレームへのポ…

3imp 3章 The Heap-Based Model読んだ

現在、AmeLispのVMはお気楽 Scheme プログラミング入門とLispKit Lisp - Qiitaを参考にしてSECDマシンで作っている。 Scheme、アセンブリ、C、で書いてそろそろSECDマシン飽きてきたのと、いろいろなVMの実装を知って選択肢を広げておきたい、ということでま…

AmeLisp開発日誌 2

リポジトリ 前回とその後の近況のあと、しばらく他のことやってた。 Little Smalltalkのソース読んでCの書き方が少しわかったので、4/8ぐらいにCでCopying GC周りを書いたけど、オブジェクトの型を持つタグ付きポインタを触るコードが面倒になったので放置。…

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

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

3月の振り返りと近況

アセンブリでLISP書いた アセンブリでSECD machine LISP 開発日誌 - レガシーコード生産ガイド アセンブリでLISP開発日誌 (2) - レガシーコード生産ガイド アセンブリでLISP開発日誌(完) - レガシーコード生産ガイド AmeLisp開発日誌 - レガシーコード生産ガ…

Forthで多目的カッコ

Forthでメタプログラミングを行う際にちょっと面倒な点として、本当は次のように書きたいんだけど list { 1 2 3 } class Point { var: x var: y :m get-x ( -- x ) x @ ; :m set-x ( x -- ) x ! ; } 全てがワードなので、次のように「どの構造の終了なのか」…

AmeLisp開発日誌

GitHubリポジトリ アセンブリでLISP開発日誌(完)の最後に書いた目標3つのうち VM/Aに継続、限定継続を実装する(VM/S上で動いてるのでたぶん大丈夫) Copying GCに切り替えて文字列・配列・バイト配列を扱えるようにする Windowsで動かす 1はその後実装できた…

Forthの使用例 / 名前について / Closureについて

Forthの使用例 ForthHubというコミュニティから招待が来ていたので入ってみた。(enthusiastってほどでもないけど……) その中でForthのUse Caseについての質問があって、面白いものがいくつか挙げられていたので、何を作っているかより、コーディングスタイル…

ForthでMarkCompactGC

VMに手を入れず、ForthのみでMarkCompactGCをやろうと思い立った。多分できました。 github.com まだ全然使うことを想定して作っていません。あくまでも「できるものなんだな」程度に見て下さい。ここからバグ潰して整備するのはとても苦労しそう。 gforth-0…

アセンブリでLISP開発日誌(完)

バグ山ほど出しながらも、なんとかLispを動かせた。ここから先はアセンブリでのVMが主目的では無いので、単にAmeLisp開発日誌となるでしょう。なったらいいな。 リポジトリの名前も変えた。 github.com 振り返り 前回からやったことを思い出してみる。 まず…

アセンブリでLISP開発日誌 (2)

前回からとにかくVM命令を追加していった。さらにSchemeで作ったVM側でコンパイラを作っていた(後述)。現時点でアセンブリで2500行ほど。 github.com Forth処理系を作った経験から、 とにかく早めに色がついたREPLを作る 内部情報をイイカンジに出力する で…

アセンブリでSECD machine LISP 開発日誌

振り返りに書いたように、アセンブリ(NASM/Linux64bit)での実装に挑戦してた。 github.com ようやくVMインストラクションのREPLが動いたので記録。 方針は とにかくシンプルに作る かっこいいことはまた今度にする です。 今のところ 8bit下位タグ付きポイン…

モードと人間とプログラミング

プログラミング言語や環境、スタイルの話に対して、2年ぐらい前からずっと考えてることがある。人間を眺めた方がいいんじゃないの、と思う。 再利用性を高める、保守性を高める、状態が引き起こすバグを防ぐ……などの目的のためのいろんな考え、理論はある。…

1月と2月の振り返り

1月の前半 読書記録の方に書いていたけど、ひたすら読書してた。 ゲームエンジン・アーキテクチャ Game Programming Patterns 電子工作入門以前 Webエンジニアが知っておきたいインフラの基本 サクサクSmalltalk などを読んだ。 わからないところは飛ばして…

SECD machine LISPで部分継続(限定継続)メモ

マクロとフルの継続を使った実装じゃなくて、SECD machineのコードでネイティブにサポートできたら楽しそうだな、と思ったので考えて作ってみた。それっぽい動きをしているのでとりあえず現時点でのメモ。 解説っぽく書こうかと思ったけど、説明が難しすぎる…

SECD machine LISP ちょっと書いた

github.com Gaucheで動く。gosh test.scmで自動テスト実行。 参考にさせてもらったサイトは以下の2つ http://www.geocities.jp/m_hiroi/func/abcscm33.html http://www.principia-m.com/ts/0117/index-jp.html 今のとこマクロと継続、末尾呼び出し最適化まで…

ヒューメイン・インタフェース読んだ

ヒューメイン・インタフェース―人に優しいシステムへの新たな指針作者: ジェフラスキン,Jef Raskin,村上雅章出版社/メーカー: ピアソンエデュケーション発売日: 2001/09メディア: 単行本購入: 11人 クリック: 550回この商品を含むブログ (71件) を見る Canon…

Glypher - Windows,Forth,FASM

FASM(flat assembler)の練習にForthを書いていて、マクロの書き方がわからないので探していたら見つけた github.com FASMで書かれた、Windows用のゲーム作成用Forthっぽい。 Charles Childers氏(Retroの作者)のリポジトリだけど、作者は別の人で、RetroForth…

Synstackプロジェクトの紹介

Karsten Schmidt氏のプロジェクトが正式に公開された hackaday.io "Polyphonic, stack based synth & livecoding environment for STM32"ということで、Forth/StackVMでベアメタルからシンセやシーケンサを作る、まさにこれやりたい!!というプロジェクトな…

同業者に認められようとしない

事業の参考になるかな、と思って読んでみた次の本なんだけど、事業の事以上に大切なことがわかった。 1万円起業 文庫版――片手間で始めてじゅうぶんな収入を稼ぐ方法作者: クリス・ギレボー,本田直之出版社/メーカー: 飛鳥新社発売日: 2015/04/25メディア: 文…

S式→JSトランスレータ再び

github.com 動作ページ まだ全然中身ないです。(ifすらない) 動機 自作SmalltalkVM NirnLeaf用に書いたパーサコンビネータの練習 jasjでちょいちょい開発してたけどnode.jsとGaucheが使える環境から離れていろいろ辛くなった ブラウザで動くと良いのでは 最…

近況

まとめておく。 音楽 ボチボチDTM復活していろいろつくってる。 ビッグビートを作ってみたくなったので作った soundcloud.com コンプかけまくったテクノが聞きたくなったので作った soundcloud.com プログラミング HTML5 Canvasとかで気軽にいろいろ試すため…

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すべてについて初心者なので何か凄まじく危ないことをしているかもしれません。真似しておかしくなっても自己責任でお願いします。助言など大歓迎です。 手順な…

200日の振り返りと今年の抱負

あけましておめでとうございます。 200日 100日の振り返りと今後 - レガシーコード生産ガイドから100日、GithubのStreakが200日になった。 コロコロ考えが変わるニンゲンなので、100日の時点で書いた内容にまだ同意できるので結構驚いた。 振り返り自体は201…

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

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

作業・学習記録

作った。 この前振り返ったときに日々の思ったことなんかも含めて記録しておいた方がいいと思ったんだけど、なんとなくここに書いてる粒度から考えると別にした方がいいかなと思ったので分けた。 あんまり真面目にやるつもりはなくて、誰かに見られてる「か…

CSPちょっと調べてる

SyncStitch - PRINCIPIA Limitedのドキュメントを読んで面白そうだなあとなんとなく思ってたCSPだけど、また興味が出てきたので検索したらとてもわかりやすいサイトを見つけた d.hatena.ne.jp 全部読んでなんとなくわかった気になったので、原文?をちょっと…

2015年の振り返りと2016年の抱負

まず今年までについて。 Twitterで少しだけ書いたけど、自分はずっとプログラミングに対してワナビーだった。長々と書くのはやめておくけど、Perl/Pythonで書かれたCGIを書き換えて設置したりとか、awk、wget、sedでなんか落としたりとか、あとはJavaで簡単…

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

ジャバスクリプトでLisp開発記録

10/22から作り始めてて、見返し用に開発記録を書いておくことにした。 動作サンプル なまえは、環境がNirnLeafで、言語がNirnLisp。 自作のS式→JavaScriptトランスレータjasjで書いてるので、altJSでと言ったほうがいいかもしれない。ごく薄いトランスレータ…

近況

プログラミング jasjをJavaScriptとGLSLにも対応させた後、HTMLとCSSにも簡単に対応させて、モジュール分けたりサンプルというかテンプレート作ったりなどいろいろ手を入れていた。 GLSLに対応させるときに一度内部構造を変える必要があって、またjasjマクロ…

S式→JSトランスレータをGLSLにも対応させた

紹介ではなく振り返り用のメモ。 なにした Scheme(Gauche)でS式→JSトランスレータ書いた - レガシーコード生産ガイド時点でJavaScript専用だったS式からのトランスレータjasjを、マクロを使えるようにして、GLSLにも少しだけ対応させた。 コード(GLSLは下の…

Scheme(Gauche)でS式→JSトランスレータ書いた

github.com S式でJavaScript(とGLSL)を書きたいという欲求が前々からあって、なんか難しそうだから勉強してからだな……と思ってたんだけど、「あっこれ一生とりかからないパターンだ」と昨日の夜中突然思い立ったので、浅い知識でも書き始めることにした。そ…

Schemeで限定継続を使ってClojureのcore.asyncみたいなことをする

(Biwa)Schemeで限定継続を使って非同期処理を書こうとした日記 - レガシーコード生産ガイドでClojureのasyncも似たカンジなのかな、などと言ってたけど、気になって検索して次の文書を見ると全く似てなかった。 Clojure - core.asyncでメインループを手に入…

(Biwa)Schemeで限定継続を使って非同期処理を書こうとした日記

以下全部あやふやな知識に基づいているので凄い人などが気まぐれにパーペキでわかりやすいの書いてくれるのを望む。 Schemeやっぱり面白いな〜といじってて、そういえばSmalltalk調べてたときに、Schemeの継続はアクター理論?のアクタへのメッセージパッシ…

Schemeでクロージャのみでリストを作る

昨日のようなコードをSchemeで書いてみた。 コード JavaScriptだと関数が返す関数に値を適用して、その結果返ってくる関数に……というコードは次のように書けるんだけど f(g)(1)(2)(3)(h); Schemeだと次のようにちょっと書きづらくなる。 (((((f g) 1) 2) 3) …

JavaScriptでクロージャのみでリストを作る

カッコの少ないSchemeを作る - 標高+1mの例がとてもおもしろかったのでJavaScriptでやってみた。 JavaScriptの場合f(g)(h)(car)(cdr)みたいに繋げていけたら面白そうだ。というわけでそういう構造にした。 全コード どういうレベルを対象にしていいか謎なの…

作業記録

RFR64で末尾呼び出し最適化 サブルーチンスレッディングで作ったRFR64だけど、せっかく最適化をいろいろ試すためにサブルーチンスレッディングを選んだので、そろそろ取り掛かってみることにした。 末尾呼び出し最適化自体についてはここらへんが詳しい http…

Forthの仕組み6 - 再帰、リターンスタック、インタラクティブ入力

前回 今回は、インタラクティブなコードの入力、リターンスタックの操作と再帰を追加していく。 サンプルコード 組み込みワード追加 必要なワードと、デバッグに便利なワードをいくつか追加する。 latest, latest! 辞書で最後に定義したワードのアドレスを取…