Entries from 2007-03-01 to 1 month

サスペンドから復帰したら再接続ってのを Gauche で書く 2

サスペンドから復帰したら再接続ってのを Gauche で書くに関して、shiro さん、id:scinfaxiさんにコメントを頂いたのでリファクタリング。 連想リストは Quote で簡単に書ける 正規表現を filter-map に直接渡すことが出来る(object-applyのおかげ) process…

Ubuntu Edgy のサスペンドが X40で動かない件

/etc/default/acpi-supportに ec_intr=0 を追記したら直ったげ。

サスペンドから復帰したら再接続ってのを Gauche で書く

/etc/acpi/resume.d にサスペンドから復帰後に実行してほしいスクリプトがいろいろある。 これに、無線 LAN 自動接続スクリプトを足しておけば幸せなんじゃね?と思いつく。 練習がてら Gauche で書いてみよう。 仕様はシンプル。 辞書に自分が知っている ES…

んー構造体のあれあれ

C

んー。ほらあれだよ。構造体でフラグとか作るときにあれあれ。 「ビットフィールド」という名前が出てくる前に20秒ほどかかる件。

On Lisp

今日はあまり時間がなかった。 (define-syntax null! (syntax-rules () ((_ a) (set! a '())))) ;; macro を展開 ;; gosh> (macroexpand '(null! a)) ;; (#<identifier user#set!> a (#<identifier user#quote> ())) (define-syntax mac (syntax-rules () ((_ a) (macroexpand (quote a))))) ;; gosh> (mac</identifier></identifier>…

リファクタリング道場

Gauche で書いてみる に関して、id:rui314 さんがコメントできれいにリファクタリングしてくださいました。 rui314さんのコメント得た教訓 右によりすぎない (define x (lambda (arg) よりも (define (x arg) print を使おう 正規表現マッチの成功・失敗で分…

GC mark が超遅い

初期化コードを Gauche で生成するようにしたので、初期化順序の問題に頭を悩ませなくて良くなったのも束の間。 GC を含めてビルド → 実行すると異様に重い。 数十秒返ってこない double free で落ちる double free の問題は sweep をコメントアウトして後で…

Gauche で書いてみる

処理系に、C++で書かれた手続きを登録するコードを生成するスクリプトを Gauche で書いてみる。 On Lisp に影響されつつあるので何回も書き直す。 最終的にこんな感じに。 (define file-for-each-line (lambda (file func) (with-input-from-file file (lamb…

GC初期化と static initializer の問題

gc

C++ で書かれる Scheme 関数を Environment に登録する際に、コンストラクタを利用した initializer を使っているのですがこれが GC の初期化と相性がよろしくない。 ↓ initializer void initialize##ClassName() \ { \ if (!g_gc_initialized) \ { \ scheme…

On Lisp

id:rui314さんのすすめもあって、またOn Lisp を読みはじめる。 以前に何度か目を通したはずがあまり記憶に残ってない。 以前と比べて格段に理解度が上がっている気がするのでもう少し続けよう。 Scheme(Gauche)で所々の例を書いてみています。 ;; find-if (…

gc組み込んだけど動かない

GCなし、Boehm GC、自前GC のビルドを簡単に切り分けられる仕組みをいれた。 自前 GC だけ double free な例外が!。

なんとなくワンライナー

普段ならワンライナーな Ruby で書くところを、しばらく Gauche で書いてみようという試み。 @gosh -e '(for-each sys-system (string-split "$(GC_TESTS)" #\SPACE))' Scheme のライブラリとかを読んでいるといろいろと定石があるみたいなのでそのあたりを…

レジスタからの参照 - GC

続いてはレジスタからの参照をチェックする。 いわゆる汎用レジスタとかそのあたりから参照されている部分も回収してはいけない。インラインアセンブラで全レジスタを取り出したりとか、pusha とかでスタックに全部のっけてしまう方法もありだけど。 setjmp …

Eshell(Emacs Shell) で alias を定義する

Eshell の info を読んでも alias の項が何故か空だったのでソース読んだ。 方法はふたつ .eshell/alias に書く 'eshell-command-aliases-list に追加する .eshell/alias に書く 書式がちと罠なのですがこんな感じ。 alias ls "ls -la" 'eshell-command-alia…

sf.net の project ページからのアクセスが多い

昨日あたりから http://www.monaos.org に海外からのアクセスが多くなった。 リファラを見るとSourceForge.net: Mona OSあたりからが多いのだけど、どこかで紹介でもされたんだろうか。 気になる。

ヒープからの参照 - GC

Hoge* hoge = new Hoge; hoge->hige = new Hige; hoge がどこからか参照されていて mark されるならば、同じくヒープ上にある hoge->hige も mark されないとまずいという話。 これは new で割り当ての際に size を保持しておいて、そのサイズ分領域を走査し…

大域変数からの参照 - GC

大域変数から参照されているものは回収されてはならない。 まだ参照されているか?は、bss領域とかデータ領域の開始位置と終了位置の間を走査してやればよい。 開始や終了の位置はリンク時に解決されるので、ld のデフォルトリンカスクリプトを見ればわかり…

そういえば

末尾呼出しの最適化をまだやってなかった。

スタック走査して GC

GCのテスト実装にとりかかる。 とりあえず Mark & Sweep でいくことに。レジスタ/スタック/ヒープ/グローバル変数 など走査すべき場所や考慮すべき事象はたくさんあるので、段階的にまずは単純にスタックから。 流れとしては operator new を定義し、割り当…