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

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

私に教えられることなら

Lisp-1でlambdaを使ったlet, let*, 関数内関数定義の実装メモ

SchemeみたいなレキシカルスコープのLisp-1処理系を作るときの話です。 lambda(Lexical Closure)とset!を実装できれば、マクロ又は処理系に変形させることでlet, named-let, let*, 関数内関数定義を実装することができます。 let let式は、lambdaの即適用に…

AmeLisp開発日誌 2

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

AmeLisp開発日誌

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

アセンブリで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下位タグ付きポイン…

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 今のとこマクロと継続、末尾呼び出し最適化まで…

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

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

Smalltalk(Pharo)でLispを書いてみる

cons、first、rest、+だけだけど書いてみた。コードは最下部にある。 Smalltalkで宣言的に書く 暫く前に名詞の王国 - あどけない話と、それについて言及した 言霊の國 - みねこあを読んで、ふーん宣言的にか……なるほどな、でも例えばLispインタープリタならL…

Factorでレキシカル変数使用・未使用の比較

レキシカル変数使用でどれぐらいわかりやすく書けるか、フィボナッチ数列で試してみる。 5 fibの結果[ 5 3 2 1 1 ]が積まれるという仕様にする。 まずはスタック操作のみ。レキシカル変数以外のFactorの便利仕様は使っていいものとする。 : (fib-no-var) ( q…

継続できた…?

「後回しにする」とか言っておいて、諦めが悪いのでずっと考えたり実用CommonLisp見てたら次のことに気づいた。 継続今度こそできた、かな。全て継続渡しにして、call/cc時点での継続をc1とすると、「それが呼ばれた時点での継続c2を無視し、c1で引数を評価…

Lisp処理系制作途中

phaendal/a-piece-of-lisp 処理系のコアは段々出来てきてて、builtin.lでマクロを使ってletやcond、delay/forceにtakeなんかを書いてた。めちゃくちゃ楽しい。 テスト駆動で書いてるからストレスあんまり無く進んで楽しかった。 あとはプリミティブ手続きと…

Common Lispで関数合成

年末に注文した「初めての人のためのLISP」が元旦に届いたので読み進めている。 PharoやHaskellが一段落するまで我慢しようと思っていたのだけど、チラッと目を通したらそのまま読みハマってしまった。 いつもどおり、書いてあることを打ち込んでいるうちに…