Gauche > Archives > 2009/07/22

2009/07/22 01:07:11 UTC(び)
#
http://googlecode.blogspot.com/2009/07/apollo-11-missions-40th-anniversary-one.html
#
何かすごいもんが公開されたみたいだけど、本物なのかな、ネタなのかな...
2009/07/22 01:13:07 UTC(び)
#
アマゾンから「ふつコン」のリコメンドキター
#
こないだドラゴンブックの新版を買ったからだな
2009/07/22 01:20:19 UTCPocket
#
質問です、
#
計算コストが高い演算はどのようにして確認したら良いのでしょうか?
#
いま、Blogへのコメントでこれはutil.listのdrop-right*でかけるのでは?
#
と言う物が有るのですが、リストの末尾の一つをのぞいた物を返す関数を書くときに、
#
(define (crd lst)
  (if (null? lst)
      lst
      (reverse (cdr (reverse lst)))))
2009/07/22 01:22:20 UTC(び)
#
1. timeで簡易ベンチマーク
2009/07/22 01:22:24 UTCPocket
#
と書くのと、
#
(define (crd-drop lst)
  (drop-right* lst 1))
2009/07/22 01:22:33 UTC(び)
#
2. disasm でインストラクション列にする
#
とかでしょうか
2009/07/22 01:23:23 UTCPocket
#
@(び) なるほど、disasmはやってみましたが、
#
reverseはclozureではないので展開できませんでしたので、
2009/07/22 01:25:39 UTC(び)
#
(define (drop-right lis k)
  (check-arg integer? k)
  (let recur ((lag lis) (lead (drop lis k)))
    (if (pair? lead)
      (cons (car lag) (recur (cdr lag) (cdr lead)))
      '())))
#
確かに1要素取り除くごとに2回reverseするのはコスト高ですねぇ
#
reverseは引数と同長のリストを新たに生成するので
2009/07/22 01:28:39 UTCPocket
#
なるほど、やはり指摘されたとおりdrop-rightの方がよさそうですね。
#
ところで
#
>reverseは引数と同長のリストを新たに生成するので
#
はやはりGaucheのソースを読むとわかるという事でしょうか?
2009/07/22 01:29:50 UTC(び)
#
いや、それはマニュアル読めばわかる
#
-- Function: reverse list
     [R5RS] LISTの各要素を逆順に持つリストを新しく作成して返します。
#
2009/07/22 01:30:29 UTCPocket
#
なるほど、まだまだ勉強が足りないようです。
#
がんばります、ありがとう御座いました。
2009/07/22 01:30:48 UTC(び)
#
伝統的にSchemeの場合、リストを返す関数で末尾に!がついてないものは、リストを新たに返す(副作用がない)のです
#
reverse!は元のリストを壊してコンスセルを再利用するので、コンシングのコストだけ見れば低い
#
けど、むやみにreverseをreverse!に置き換えるとひどい目に遭います
#
経験者は語る(笑)
2009/07/22 01:32:52 UTCPocket
#
なるほど(笑)
#
ありがとうございます、とても勉強になりました。
2009/07/22 02:13:13 UTCえんどう
#
#
Androidどう?>(び)
2009/07/22 02:17:23 UTC(び)
#
どう? って言われても
#
興味はあるけど暇と気力がない感じ
2009/07/22 02:19:09 UTCえんどう
#
上のYouTubeのアプリを入れると緯度経度高度速度がGoogleマップに記録できるらしいよ>Android
2009/07/22 02:21:53 UTC(び)
#
ふむ
2009/07/22 02:23:10 UTCえんどう
#
http://mytracks.appspot.com/
#
Google App Engineで動いている>サーバ側
2009/07/22 07:46:47 UTCsakae
#
http://www.ksky.ne.jp/~sakae/hhw/index.html に、call-with-process-ioの件をまとめました。>shiroさん
2009/07/22 08:07:19 UTCshiro
#
@sakae ありがとうございます。これ以上は手元で試してみないと追えないかも。
#
とりあえずのworkaroundとして、ベタですが一時ファイルに結果を書き出しておいてmecab終了後に読み込み&一時ファイル消去、とする手はありますね。
#
あと、しゃとんで複数行入力はエディタからcopy&pasteするか、textarea wo
#
textareaを好きなエディタで編集できるようにするプラグイン(私はIt's all textを使ってます)などで入力できます。
#
複数行同時入力の場合は自動的に背景がブルーのpreで表示されます。
#
これは主としてコード片とかコマンド出力の貼り付けを意図しているものです。
#
(連続してるけど背景がブルーになっていない発言は、一行づつtextareaに入力されたやつがたまたま続けて表示されてるだけです)
2009/07/22 08:26:10 UTCsakae
#
ありがとうございます。It's all text 入れてみました。
あと、先に進むには、ベタな方法ですね。
短い間隔で、ファイルを作成して削除する場合、Windowsは
遅延書き込みしてくれる事に、期待します。
RubyKaigiで、"Windows is Not unix" と言う著名な方が
おられましたから、無理かな?
gaucheにも、temp-fileって、ありましたよね 自分で調べよう。
oeditを使うと、文字化けするなあ。
column長の調整って、出来るかなあ?
#
あれ、背景がブルーだ。
#
気持ちもちょっとブルーです。
#
やっと、shiroさんの説明が飲み込めました。
2009/07/22 08:44:42 UTC(び)
#
WindowsはUNIXではないがPOSIXだったような、気がするけど記憶違いかしら
2009/07/22 08:46:06 UTCshiro
#
NTは一応POSIXだったような気が。ただ、POSIXで未定義の範囲ってけっこう大きい。
2009/07/22 09:55:05 UTC齊藤
#
XP では POSIX ではなくなったはずです。
#
SFU なんかもありますけど…
#
SFU はサブシステムって言ってもそちらの世界からは Windows API はまるっきり使えないので、そんなの使うくらいならもっと本格的な用途に耐える CoLinux とかを使っちゃいますよね。
#
最近は Cygwin も充分に安定してるし。
2009/07/22 10:01:26 UTCshiro
#
結局NTのPOSIXっていってもAPIがあるっていうだけで、例えばkill(2)が実際にどういうアクションをするかとかstat(2)がどういう値を戻すかってところは全然あてにならなかった。OS内のオブジェクトのモデルが違うんだからマッピングは無理だよね。
2009/07/22 10:06:04 UTC齊藤
#
Wikipedia を見るとアメリカ政府が導入要件に POSIX を規定したからってことが書いてあります。
#
結局のところ、ただのイイワケなんでしょうねぇ。
2009/07/22 10:08:41 UTCshiro
#
ああなるほど。そこはちょっとNTに同情するかなあ。木に竹を継ぐとわかっていながら仕方なかったんだろうなあ。
#
(POSIXが仮定している)UnixのモデルがOSとしてベストってわけじゃないからねぇ。
2009/07/22 10:16:40 UTC齊藤
#
「Windowsプログラミングの極意」って本があるんですけど、
#
http://www.amazon.co.jp/dp/4756150004
#
これを読むと歴史的に仕方なしにそうせざるを得なかったエピソードがたくさんありました。
#
Windows の内部構造に依存したアプリのためにダミーのオブジェクトを残したりだとか。
#
DOS のアプリケーションを普通に起動できたりしますけど、それって結構すごいことですよね。
2009/07/22 10:24:02 UTCとおる。
#
あー、この本、原書をちょっとだけ読んだだけですが、おもしろいエピソードいろいろ書いてありますよね。
#
Windws7 では、XP との互換性が失われるらしく、そのために VMware 相当のソフトを使って XP ソフト用の仮想環境をわざわざ作るんだとか。
#
あ、Windows 7。
#
Wine みたいなので妥協しないところがすごいというかなんと言うか……。
2009/07/22 10:29:28 UTC齊藤
#
文書化されているとは言え、曖昧さが残る POSIX よりもキチガイじみた執念でバイナリ互換性を維持する Windows の方が政府機関 (に限らず組織として導入するならどこでもだけど) にとってはポイント高いような気がする。
2009/07/22 10:48:05 UTCshiro
#
あ、"The old new thing"か。本は持ってないけどBlogはたまに読んでます。
#
あの互換性への執念はすごい。
#
エンジニアにとっては悪夢だけど。
2009/07/22 10:56:07 UTCshiro
#
えええええええ、金田伊功氏が亡くなったって http://www.anido.com/html-j/news2009-j.html
#
FF映画の時ホノルルにいたんだよね。ほとんど話す機会が無かったけど。
2009/07/22 12:16:34 UTC齊藤
#
あれ、何気なく見たら c-wrapper って Windows 対応のためのコードがかなり入ってる。
#
GCC の呼出しが出来れば後はささいな修正で Mingw 版 Gauche でも動きそう。
#
他でひっかかるのは mmap くらいみたい。
2009/07/22 12:21:39 UTCkoguro
#
近々 c-wrapper 0.6.1 を出すので、そこでは cygwin でも動くようになります。(多分)
#
ただ、構造体のビットフィールドの計算方法が gcc と Visual Cとでは異なるのですが、Mingwってどっちなんだろう?
#
-mms-bitfields オプションがデフォルトになっていると、ちょっとまずい。
2009/07/22 12:46:51 UTC齊藤
#
デフォルトではそのオプションは disable のようです。
2009/07/22 12:49:23 UTCkoguro
#
なるほど。ただ、GTK って gtk_init で構造体のサイズのチェックが入っていて、NGだと "-mms-bitfields" を付けてコンパイルし直せ、といってくるんですが大丈夫なのかな?
#
CygwinのGTKだと大丈夫でしたが。
#
話は変わって、mmapはNXビット対策なので、mallocに置き換えても大丈夫かも。たしか Windows ってexe単位でプロパティから NX プロテクションをOFFにできましたよね。
2009/07/22 12:54:10 UTC齊藤
#
GTK は Windows の作法に合わせてると言うこと? そういったのは例外的なものと思うしか仕方ないような。
#
PE フォーマットは各セクションごとの属性でプロテクションの有無を決められるはずじゃなかったかな。 リンク時に何か指定が必要かも?
2009/07/22 12:57:41 UTCkoguro
#
うーん、たしかにそうなんですが、どのくらいのライブラリが Windows の作法に合わせているのかが気になります。多いんだと、環境によって構造体の計算方法を変えた方がよいのかな、とも思います。
#
なるほど、リンク時に指定が必要なんですか?
#
Windows立ち上げてプロパティを見てみたけど、それらしきオプションが見当たらなかった。exeで設定できるのは思い違いかも。
2009/07/22 12:59:38 UTC齊藤
#
exeのヘッダに書いてあると思います。
#
なので、リンク時の指定なのかなと思ったんですが、具体的な方法はよくわかりません。
2009/07/22 13:02:28 UTCkoguro
#
デフォルトだと、NX保護に引っかかった時に今後どうするか聞いてくるみたい。
#
boot.ini で /NoExecute=OptIn の場合の動作がそうらしい。
2009/07/22 13:07:28 UTCkoguro
#
WindowsのDEPの挙動って、なんか結構複雑そう。
2009/07/22 13:08:26 UTC齊藤
#
JIT を使ってるスクリプト言語とかはどうやってるんだろう。
2009/07/22 13:08:32 UTCkoguro
#
OptInだと、そもそも登録されているプログラムとサービスのみ保護の対象になるのか。
#
登録されていないんでDEPから逃れられているのか、まじめに VirtualAlloc でメモリを確保しているか。
2009/07/22 13:16:43 UTC齊藤
#
c-wrapper での使い方だと mmap をそのまま VirtualAlloc に置き換えれそうですね。
2009/07/22 13:18:49 UTCkoguro
#
まとめて確保して、解放することは考えなくてよいので多分大丈夫だと思います。
2009/07/22 13:26:40 UTC齊藤
#
PEヘッダに書いてあるセクションごとの実行属性は従来はどう扱われてたんだろう。
#
情報としては持ってても実際には保護してなかったんだろうか。よくわかんないな。
2009/07/22 13:32:09 UTCkoguro
#
拾い読みでちゃんと理解していないですけど、単に「実行可能なファイルかどうか」を判定するのに使われていただけみたい。
#
http://msdn.microsoft.com/en-us/library/ms680313(VS.85).aspx
#
IMAGE_FILE_EXECUTABLE_IMAGE のところに "The file is executable (there are no unresolved external references)." って書いてある。
#
あっ、セクションの話だから、これは違うか。
#
VAX由来なのかな。
#
セクションの方を見ると、IMAGE_SCN_MEM_EXECUTE で "The section can be executed as code." と書いてあるから、やっぱり「実行可能なコードかどうか
#
」の判定に使っているだけかな?
2009/07/22 13:40:48 UTC齊藤
#
読み書きはハードウェア的な保護がありますよね。
#
昔から。
2009/07/22 13:42:14 UTCkoguro
#
そうですね。Linkers & Loaders を読み返してみると、ハードウェアパーミッションの設定に使っているという記述があるので、保護していたようですね。
2009/07/22 13:45:43 UTC齊藤
#
実行環境の機能と関係なく、実行ファイルのフォーマットは歴史的にそういうことを書いておく場所があったってだけのことか…
2009/07/22 13:46:31 UTCkoguro
#
まあ、実行可/不可はともかく、書き込み可/不可は昔からあったはずだから利用価値はあったはず。
2009/07/22 13:51:12 UTC齊藤
#
脱線しましたけど、 c-wrapper の Windows 対応楽しみにしてます。
#
その他に気になるのが、
#
SDL のサンプルなんですけど、
#
:libs-cmd "sdl-config --libs; echo '-lSDL_mixer'"
#
こういうのって sh の書式なので Mingw 対応とか考えるともっと抽象化した表記にして c-wrapper の中で吸収できたらいいな、なんてことを思いました。
2009/07/22 13:56:09 UTCkoguro
#
ちょっと汚いですが、:libs-cmd と :libs を混在して書けるようにすればよいかなと思います。出現順にオプションを並べるようにして。
#
あと、Mingw対応はちょっとハードルが高いので、できたとしてもちょっと先になります。とりあえずは Cygwinで何とか動かせるようにしますです。
2009/07/22 14:01:52 UTC齊藤
#
以前のバージョンでかなり無理矢理ですが Mingw でも動いたことがありました。
#
細かい修正は必要でしょうけど、根本的な部分は結構大丈夫な気がします。
2009/07/22 14:06:02 UTCkoguro
#
だとすると、対応は速くて 0.6.2 くらいかな。
2009/07/22 14:07:33 UTC齊藤
#
2007年09月頃に試してたからたぶん 0.5.2 頃かな。
#
そのときは dlsym とかの代用関数を追加して GCC を呼出してるところを sys-system に置き換えたら何とかなったと思います。
2009/07/22 14:12:18 UTCkoguro
#
dlsymはdyncompを作った時に代用関数を作って c-wrapper にもこっそり追加しているので大丈夫なはず。(確認してないけど)
#
gccの起動ってできればなくしたいんですよね。ただ、プリプロセッサ作るのは難しいのでしょうがないんですが。
2009/07/22 14:15:46 UTC齊藤
#
Mingw で今は不具合があるプロセス関係は昨日あたりに話題になっててちょっと検証したりもしてるので、そのへんがなんとかなればとりあえずは動くようになるんじゃないでしょうか。
2009/07/22 14:23:03 UTC齊藤
#
プリプロセッサも既存のものにバインディングを作るってのは難しいんでしょうか?
2009/07/22 14:24:02 UTCkoguro
#
すみません、どんな感じのものをイメージしていますか?
#
ちょっと質問の意図がつかめなかった。
2009/07/22 14:26:31 UTC齊藤
#
相応の昨日をもったモジュールがあれば GCC は呼出さなくていいかなと。
2009/07/22 14:26:40 UTCkoguro
#
ああ、なるほど。
#
それだと、mcppあたりがいいんじゃないかと思っているんですが、あんまり調べてないです。
#
http://mcpp.sourceforge.net/index-jp.html
#
よくも悪くもみんなgccを使っているので、gccと完全互換でないと入れづらいんですよね。
#
OS付属のヘッダファイルってgccの独自機能を使っていたりするんで。
2009/07/22 14:38:22 UTC齊藤
#
なるほど。 色々と考えてるんですね。
2009/07/22 19:40:24 UTC齊藤
#
それなら gcc (というか cpp) そのものを使えば…
#
gcc のソースコードのアーカイブを見てみると libcpp はひとつのディレクトリにまとめられていて他との依存関係は無いみたい。
2009/07/22 20:07:37 UTCとおる。
#
http://www.ecma-international.org/publications/standards/Ecma-234.htm
#
一応 Windows API も文書化&標準化はされていたりします。
2009/07/22 20:15:51 UTCとおる。
#
でも 95 年か……。
2009/07/22 23:24:55 UTCえんどう
#
金田伊功氏で思い出すのはこれだなあ。
#