Island Life

2006/03/19

enbug diary : スクリプト言語はコンパイラ言語より遅いのか?!。 向こうにもコメントを書いたのだけれど、少し詳しく。 もちろんうるさいことを言えばスクリプト言語とコンパイラ言語を対比するのは 変なのだろうけど、ここでは文脈から「スクリプト言語」は実行形式をソースの まま持っておいて実行時にインタプリト、もしくはVMコードくらいにコンパイル して実行するもの、「コンパイラ言語」はバッチコンパイルしてバイナリの実行 形式を作っておくもの、くらいの意味だろう。

で、Lispは昔から実行時解釈も実行時コンパイルもバッチコンパイルも可能だった わけで、他の言語、特に新しい言語が同じことを出来ない理由は無いし、既に そういう流れになっていると思う。

ところで、同じソースファイルを、インタプリトした場合と コンパイルした場合に、全く同じ動作を保証するのは見かけほど自明な話 ではない。特にプログラムの意味に影響を与えるメタレベルの操作が実行時に 許されている場合、実行してみないとプログラムの意味が決定できない→ コンパイルできない、ということがしばしば起こる。Lisp界隈ではこれに ついて20年前くらいにさんざん議論されて、一応の落としどころは 見えている (もっともその中にはeval-whenみたいなアドホックな解決もある。 Scheme界ではそういうのを嫌って、本当に「正しい」セマンティクスを 追求しているせいで、未だにポータブルなモジュールシステムや低レベルマクロが 無いのだが)。まあ、少なくともCLやSchemeの言語仕様の設計時には、 その仕様がインタプリタでもバッチコンパイラでも矛盾のない自然な動作に なるかどうか、かならず検討されている。

さて、新興言語はLispの歴史に学ぶだろうか。それとも処理系をコンパイラ向けに チューンしてゆく過程で、Lispがひっかかった罠に再びはまり、同じ歴史を 繰り返すだろうか。

Tags: Programming, Lisp

2006/03/15

YouOS。 Y Combinatorの支援を受けたスタートアップ。ブラウザで走るOS。 デモをいじる限りではそれなりに面白い。どこまでenvelopeを拡げられるかに注目。

Tag: YCombinator

2006/03/15

申告の書類作りに会計士さんのところへ。扶養家族が増えたからちっとは 安くなるかなと思ってたんだが、昨年は全く出張しなかったせいで経費が大幅減 していたのを忘れてたよ。一昨年より高くなっちまった。

「家でも買えばうんと(税額を)安くできるんですけどね」と言われたけど この不動産相場の高騰ぶりじゃ到底無理だしなあ。

Tag: 生活

2006/03/14

AA折れ線グラフ

入力は'R','F','C'の3種類の文字からなる長さ1以上の文字列

  • 'R'は上昇を表し,折れ線グラフの要素としては '/' (スラッシュ)1文字に対応
  • 'F'は下降を表し,折れ線グラフの要素としては '\' (バックスラッシュ)1文字に対応
  • 'C'は変化なしを表し,折れ線グラフの要素としては'_'(アンダスコア)1文字に対応

わしの答え。

(use gauche.sequence)

(define (graph input)
  (define (input->plist input)
    (fold2 (lambda (cmd r y)
             (case cmd
               ((#\R) (values (acons y #\/ r) (+ y 1)))
               ((#\F) (values (acons (- y 1) #\\ r) (- y 1)))
               ((#\C) (values (acons y #\_ r) y))))
           () 0 input))
  (define (draw-row plist y)
    (fold (lambda (p r)
            (cond ((= (car p) y) (display (cdr p)) #t)
                  (else          (display #\space) r)))
          #f plist))
  (let ((plist (reverse (values-ref (input->plist input) 0))))
    (let loop ((y (apply max -1/0 (map car plist))))
      (and (draw-row plist y) (display #\newline) (loop (- y 1))))))

最後に空行が入るのは気にしないっと。

yの最大値はinput->plistの段階で計算するって手もある。

gosh> (graph "RCRFCRFFCCRFFRRCRRCCFRFRFF")
                  __      
                 /  \/\/\ 
 _/\_/\        _/        \
/      \__/\  /           
            \/            
                          #f

Tags: Programming, Gauche

2006/03/02

2月末締切の仕事が2つ重なって、どうにか間に合わせたのだが その日の夜から寝込んでしまった。もう無理が効かない年なのかのう。ごほごほ。

Tag: 生活

More entries ...