2009-01-01から1年間の記事一覧

文字列

char* hello () { return "Hello, world!"; } でいいみたいなんだけど、理解が引っかかった。 char* hello () ってことはこの関数は `char` へのポインタを返すはずだ。そもそも文字列変数の宣言は char hello[] = "Hello, world!"; と書くって話だったけど …

Visual Studio 2008

重い ツール>オプション の 環境>スタートアップ にある [コンテンツをダウンロードする間隔] のチェックを外すとだいぶマシになる。 キーマップで Emacs スキームだと自動インデントしてくれない ツール>オプション の キーボード で Emacs スキームを選ぶ…

微妙に再開。ただし脱線。「ゲームプログラマになる前に覚えておきたい技術」という本を読んでる、というかやってる。別にゲーム作るつもりはないんだけど、C/C++ の勉強するのになんか適当な本ないかなと本屋でウロウロしてたときに見つけて、著者のスタン…

term-title と window-title

screen が別々に管理してる。 term-title # "term-title" という名前は今勝手に決めた。"hardstatus" も "window title" も他と被るんで。 本来は terminal emulator の title-bar に表示される shell からは `echo -ne "\033]0;\007"` で変更可能 hardstatu…

window title がずっと "urxvt"

emerge なんかは勝手に terminal の title に "emerge (33/142): ..." とか表示してくれるんだけど、巷にある「実行中のコマンドを screen の hardstatus に表示」をやると表示されなくなるのでなんとかならんかなぁと思ってて、以前 hardstatus の代わりに …

/etc/make.conf

Gentoo から初カキコ。USE flags はまだ調整中(というか desktop をどういう環境にするか決めてない)。 CFLAGS="-O2 -march=barcelona -pipe -fomit-frame-pointer -funroll-loops -finiline-functions" CXXFLAGS="${CFLAGS}" ### CPU features USE="mmx s…

todos for moving to gentoo

suspend sound card 周りがめんどそう rotate second monitor wine (xyzzy, games) virtual-box/vmware IM (とりあえず uim+anthy なう。atok にしようか迷う。) keyboard layout 単なる us-dvorak に caps->ctrl だけでも使えなくもない gdm のキーマップっ…

やっと X.org が動いた

log みるとまだなんか error でてるけど、なんとか GUI で keyboard も mouse も動いた。 keyboard も mouse も反応しない gentoo では /etc/make.conf で INPUT_DEVICES="keyboard mouse" とか指定しておくと、xorg-server とか emerge するときに適当に dr…

install 駆け足版

Sabayon 試してみたけどふつーに Gentoo インストールすることにして、そのまま Sabayon の Live CD から install してみる。 てきとーな linux で起動 network 繋がる事 あとはごく基本的なコマンド使えれば何とかなる disk 準備 $ fdisk /dev/sd* (中略) $…

inline #6 一旦まとめ

lisp/evalmacs.l::defun を変更 関数定義の lambda expression を(とりあえず symbol-plist に)保存 # defun の定義が2つあるので注意 どっかで function-lambda-expression を定義 どっかで expand-inline を定義 lisp package から inline を export し…

inline #5 元の関数定義が必要な件について

関数定義は si:closure-body で取り出せて、inline でやろうとしてることはこんな感じ。 仮引数と実引数から、てきとーに束縛する let form を作って その中に関数の body を突っ込む (defun foo (&rest args) (apply #'+ args)) => foo (si:closure-body 'f…

condition 一覧

(compile (defun find-all-condition-and-slot-accessors () (do-all-symbols (sym) (let ((it (ignore-errors (make-condition sym)))) (when it (let ((def (si:*structure-definition it))) (format t "- ~S~%" (si:*structure-definition-name def)) (do…

誰だ、宝物をゴミ箱に放り込んだのは

http://xyzzy.s53.xrea.com/wiki/index.php?cmd=read&page=trash%2Fdisassemble こんなものがあったのか。なんで trash にあるんだ。全力で無視してたじゃないか。

inline #4 special-form に展開しちゃダメ?

どうも compiler::optimize-form の関数が返す form は special-form になってはいけないようだ。compile.l の関数が何やってるのかどうにもよくわからん。 macro はとにかく展開するんで、form は最終的に 関数呼び出し special-form のどっちかになるはず…

inline #3 どう展開すりゃいいんだ?

(let ((arg1 value1) (arg2 value2) ...) <body>) 機械的に展開できるのはここまでで、これ以上は手動で定義してやらにゃならんような。理想としては ;;; 関数定義 (defun ev-oddp (obj) (oddp (example-value obj))) ;;; 関数呼び出し (ev-oddp X) ;;; たぶん最も</body>…

inline #2 compiler::optimize-form

lisp/compile.l を眺めてたら (get 'compiler::optimize-form) に関数を突っ込んでおくと compile 時に inline 展開してくれるっぽいことを発見。compiler::optimize-form に突っ込む関数は 対象の を呼び出す form を受け取る その呼び出す form があったと…

inline #1 ほんとに速くなる?

結論: それなりに速くなる、と思ってよさそう。 「それなりに」というのは、今回やったのは処理自体がそんなに時間かかるものではないので関数呼び出しのオーバーヘッドが相対的に大きかったはず。つまり実際の処理がもっと時間かかるものだと関数呼び出しの…

with-slots

with-slots の完全な仕様を把握してないのでこれでいいのかわからんけど叩き台。 (require "symbol-macrolet") (defmacro with-slots ((&rest slot-entries) object &body body) `(let ((#1=#:object ,object)) (symbol-macrolet ,(mapcar (lambda (slot-ent…

applyhook を使った profiler

を作ったんだけど*1、labels に対応できない。applyhook に仕掛けた関数には、呼び出す関数とその呼び出しの引数が与えられるのだけど、呼び出す関数っつーか symbol が渡される。んで、その symbol が labels や flet で定義された lexical な関数だった場…

*evalhook* とか applyhook とか

CLtL2 20.1. Run-Time Evaluation of Forms 変数 *evalhook* 関数を突っ込んでおくと、なんらかの式を評価するときに実際に評価する代わりに *evalhook* に設定された関数が呼び出される。引数として以下の2つが与えられる。 本来評価する式 environment obj…

format の "~n@A"

;;; on xyzzy * (format t "~10A" :foo) foo => nil * (format t "~10@A" :foo) foo => nil * (format t "~10A" "foo") foo => nil * (format t "~10@A" "foo") foo => nil @ つけると string => 左 symbol => 右 ;;; on SBCL * (format t "~10A" :foo) FOO …

#4 make-instance

ちゃんと profile とかしてないんだが、どうも generic-function の呼び出しがネックな気がする。 (make-instance 'foo :key <value>) が ;;; 0 (defmethod make-instance ((class symbol) &rest initargs) (apply #'make-instance (find-class class) initargs)) ;</value>…

structure の print-function (2)

なんか xyzzy のソースいぢって structure を ~S で format したときも print-function 呼ぶようにしてしまった。closette を byte-compile すると落ちるのを調べるのに デバッグ用のxyzzyにアタッチして、ステップ実行 してみたんだけど、VS の使い方がよく…

#3 たらい回してみた

半端に compile するだけでもだいぶマシだけど、それでも200倍か・・・。 -- (tak 12 6 0) (tak 12 6 1) 遅さ defun 0.203 0.063 --- defmethod 508.641 128.438 2505, 2038 defmethod(compile 後) 46.25 12.204 227, 193 ;;; 生の xyzzy-lisp (defun tak (x …

#2 structure の print-function (1)

xyzzy だと ~A のときだけ print-function 使って出力する。~S のときは #S notation になる。今までそーゆーもんだと思ってたけど、sbcl は print-function 指定しておけばどっちでも print-function 使って出力してくれる。closette でけっこー入り組んだ …

structure の constructor の引数

;;; :constructor オプションに slot 名を指定しておくと * (defstruct (s1 (:constructor s1 (value))) value) => #<structure-definition: s1> ;;; こう呼び出せる * (s1 "value") => #S(s1 value "value") ただし標準の constructor("make-")とは違う名前じゃないとダメらしい。</structure-definition:>

#1 (defun (setf ) ...)

CLOS に興味がわいた、というか欲しくなった closette というのは CLOS の subset らしい 見てみたら2000行ちょいくらいだった ふるい common-lisp らしいので読めそうな雰囲気だった 「誰か移植しないかな」とかどっかで見かけた とゆーわけでやってみる。…

handler-case が bug ってる?

lisp/handler.l を読んでたら :no-error なんてものを使えることを知って使ってみたら compile するとおかしくなってしまった。 ;;; 再現用関数 * (defun test (x) (handler-case x (:no-error (x) x))) => test ;;; ここまではダイジョブ * (test 3) => 3 *…

major-mode のつくり方 -- 調査中 #1

major-mode というのは current buffer に対していろいろする関数。以下の「major-mode を適用するときに...」という部分はこの関数でやる。 (defun example-mode () (interactive) ...) お約束: 既存の buffer-local 変数、モード名、buffer-mode 変数 関数…

23: Creating multiple pages with navigation menus

http://dev.opera.com/articles/view/23-creating-multiple-pages-with-navigat/ Your HTML menu tools -- links, anchors and lists やり方は色々あるが、いずれにしろ link と a elements を使う。 link elements は documents 間の関係を表す。user agent…