Haskellは安産するか?
日頃愛用している我ママチャリ。どうした事か、数日前から後輪の空気がすぐに 抜けてしまう。今日、多めに空気を入れた所、空気を入れる所からかすかに シューと言う音がするのを発見。
以前お世話になったチャリンコ屋さんへ行ってみた。そしたら、親父さんが 何やら楽しそうに、若いおねーちゃんのチャリを修理してたよ。時間がかかり そうだったので、預けてこようかと思ったら、「どうした?」って、聞いて くれた。
「空気入れたら、入れ口からシューと音がして、すぐに抜けちゃうんです」。 「だったら、これ替えてみな」って言われて、部品箱から、ほぃと、部品を 渡してくれた。
空気を入れて、「幾らですか?」って聞くと、「いいよ」との事。「また 抜けるようなら、パンクだから持ってきな」
いい親父さんだ。今乗っている、チャリが朽ちたら、親父さんのお世話に、 なっからね。あるいは、勇気を出して、親父さんが主催する、サイクリング・ クラブへ入れてもらおうか。
そのチャリ屋さんとこ、日曜日ともなれば、レーサー服に身を包んだ仲間達が わんさかと集まってくる。きっと、サイクリングの楽しみ半分、親父さんの 人柄に引かれてが、半分なんだろうな。
K3の電源
もう一つ大事な事を忘れていた。
電源はユーザーが用意する事になっている。DC13.8V 4A(@10W 送信時)の電源だ。 直流電源なんて一体幾らするか想像もつかないけど、トラ技を見て通販かな?
まてまて、へたなスイッチング電源じゃ、ノイズ発生器と共にオペレーションする 事になっちゃうな。ここは清く正しく、イエローハットへ飛んで行って、バッテリー と充電器を買ってこよう。
ワッチしてる時は、バッテリーから給電。QRTしてる時に充電だな。 40AHぐらいの バッテリーがあれば、十分かな。
あれ? 受信時は、0.9Aって書いてあるけど、すると大雑把に見積もると、送信時の ファイナルには3Aの電流が流れるのか、13V X 3A = 40W 。 40W注ぎ込んで10Wしか 空中線電力が得られないって、ちと効率悪過ぎない! 綺麗な波を出すために、終段 は、A級動作させてますってか? ああ、そうか、SSBも(オプション追加で)使える 事、忘れてたわ、テヘェ。
gccになった積もりで ...
前回、モールスのまとめをやって、終りにしようかと思っていたけど、改めて FFTルーチンを見直していたら、まだチューン出来る事に気づいた。
gccが幾ら賢くても(最近のgccは、賢く考えるので、コンパイル時間が長く なったと、一部で不評とか)、あのコードのチェーンはやらないだろう。
まずは、配列のサイズから、べき数(コード上では、Pを計算)を 求める部分。これは、DATAN が、固定だから、あらかじめ計算しておける。
もう一つは、sin,cosのtableを用意する部分。fftが呼ばれる度に、計算 してtableを埋めるのは無駄だ。プログラム起動時に、一度計算して、 それを使い回せばよい。
両者共、使用状況を考慮した上での、ループアンローリングならぬ、関数アンローリングだ。 こういうのは、自分が gccになった積もりで、支援してあげないと、だめなんだろうな。
糞CPUのコードをすらすら読めれば、確認してみたい所だけど、そこまでは 遠慮しておこう。
CiSE
8月末に行なわれた LLTV の資料が 公開されたり @ITのNewsで取り上げられたりしてる、CiSEだか、shiroさんが、手回しよく 一式丸ごと公開してくださっている。
どうやって使うかは、Makefileを見れば分かる。
# @(#)Makefile 8.1 (Berkeley) 6/2/93 # $FreeBSD$ .SUFFIXES : .sc .sc.c: ./cise $< $@ PROG= ls SRCS= cmp.sc ls.sc print.sc util.sc CSRCS= cmp.c ls.c print.c util.c GENERATED = cmp.c ls.c print.c util.c flags.h DPADD= ${LIBUTIL} LDADD= -lutil -lproc DPADD+= ${LIBTERMCAP} LDADD+= -ltermcap $(PROG) : $(CSRCS) cc -o ls $(CSRCS) $(LDADD) flags.h : ls.sc cmp.c ls.c print.c util.c : flags.h ls.h extern.h clean : rm -rf ls *.o *~ $(GENERATED)
.c ファイルは、.sc を元にして作られる。その作り方は、ciseを使えと言う事を 教えているんだな。ソースファイルは、*.sc ですよと宣言しておいて、作成物を使って lsを作れか。
Schemeのマクロの裏側を見ている思いだ。Cって、ひょっとしてSchemeと親和性が 高いんと違う? だってさ、
#define DATAN 128
って、括弧でくくってやれば
(#define DATAN 128)
となって、もろにS式じゃん。それに
#define DUMP(fmt,val) do{ if (argc == 2 ){ printf(fmt, val); } } while(0)
だって、置き換えモデルを使えば
DUMP("%s", onoff);
は、
do {if (argc == 2 ){print("%s", onoff); } } while(0);
に、置き換えられ、最終的に、gcc の最適化により do { ... } while(0); は、不要と して除去されるから、中身の if (..){ ... } だけが、残る事になる。なぜdo .. while(0);で 囲っておくかと言うと、エラーの防止のためだ。
これのからくりを利用して Schemeっちくに書けるようにしたのが、ciseコマンドか。
残念ながら、この機能はgaucheの headでしか使えないが、次期リリースでは普通に使える ようになるのかな。そしたら、C言語をSchemeチックに書けるようになるな。
shiroさん、新しいgaucheはクリスマスプレゼントですか? それともお年玉?
Haskell 6.10.4
FreeBSDの portsでは、長らくHaskell 10.8.3で、悔しい思いをしていた。しかし、 どんな風の吹き回しか、9月5日付けで、6.10.4 へいきなりJumpしてしまった。
Windowsには、既に 6.10.3が入っているので、系統を合わせておくのが望ましい。 でも、portupgrade って、時間がかかるんだよなぁ。
意を決して、夜のバッチに投入してみた。開始時間は、20時ぐらいだったかな。 あらかじめ必要な材料(50Mぐらいだろうか)を取り寄せておいたので、すぐに 更新にかかってくれた。
系統が違うので、途中でオプションを再設定させられたけど、頑張って私色の やつを作っていたよ。22時ぐらいに確認してみたけど、まだstage1だった。 とても終りまではつき合いきれないので、途中で寝ちゃった。
朝起きて確認したら、深夜1時過ぎに完了してた。やれやれ、時間がかかるなあ。
でも、この6.10.4とMacの組み合わせでSEGVするなんて話があり、調査依頼のチケットを 発行したくださった方がおられるようです。(ありがたい事です)
個人的には
・+RTS -Bオプションで、GCのときにビープ音が出せるようなので実行してみると、最初のビープのタイミングでSegmentation faultになる。 ・ダミーのC関数void* free()をmyfree.cに書いてghc --make ei_3.hs myfree.cのようにリンクすると落ちなくなる。(freeで解放された領域にアクセスしていると考えられます。) ・ghc-6.10.4のソースにprintfを埋め込んで追っていくと、GarbageCollect(rts/GC.c)->scheduleFinalizers(rts/Weak.c)->runCFinalizer(rts/Weak.c)ときて、Segmentation faultになる。 ・上記ei_3.hsのようにloopをaccを使って書くと(スタックを消費しない?)Segmentation faultが発生しない。
こういうのも、大好きだったりします。で、-Bオプションの事知らなかったので、調べてみたら
-B GC(メジャー)が始まるたびにベルを鳴らす。 実に奇妙なことだが、実際にこのオプションを使う人々が存在する。 ダラム(イギリス)にいる我々の仲間、ポール・キャラハンは次のように書いている。 「ここには色んな目的のためにこれを使う人々がいる?これは本当だ? 例えば、コード/機械が何かをしているということを確認したり、無限ループを発見したり、 最近付け加えたコードのコストを量ったりだ。ある種の人々はビープのパターンから プログラムがどの段階にいるかを聞き分けることさえできる。 しかし最も重要な使いかたは、同じオフィスにいる他の人を鬱陶しがらせることである…」
奇妙な人は日本にも居たって事か。
Haskellは安産するか?
こうして、FreeBSDのそれも新しくなったけど、世間では、Haskellの次版が 着々と準備されてるはず。
予定日は9月16日とか。予定通りに無事に産まれるかなあ。
FreeBSDのReleaseは遅れる事で有名だけど(8は8月末の予定だったけど、現時点で 1月遅れがアナウンスされてる)、Haskellはどうか? やきもきさせないでね。
それと、FreeBSD用のHaskellもすぐに 6.12.X に追従するのだろうか? こちらも 注視ですね。もし実現したら、FreeBSD用の 6.10.4 は、寿命が短い不憫な子に なってしまう。
そう言えば、秋は出産ラッシュ。既に Vineが5になったし、次は予定通り出す ので有名なあれが、09.10を出すのかな。
後、何と言っても大物のWindows 7が控えているな。Vistaの放蕩ぶりに一般消費者 から見放されていたけど、挽回なるか? 小判鮫のアプリ類も、7対応を9月迄に やれば、お安くしときまっせと、五月蝿い事しきり。
馬肥える秋とは言うものの、財布はやせ細る秋なのね。まあ、おいらには関係ない 話ではありますが。。。