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

JavaScriptのswitch文の速度評価記事への補足

前回書いたエントリー「JavaScriptのswitch文の速度はブラウザの違いでこんなにも差があった。」に予想外にたくさんのブックマークがつき、貴重なコメントも頂きありがとうございます。それにインスパイアーされたので、ちょっと補足を書きました。個々の項…

FINAL FANTASY XIIIに感動

と言っても僕はゲームなんて全然やったことないし興味もないけれど、某動画サイトにあるFF13のHD解像度のトレイラーを大画面で見ていたらちょっと感動した。CGは門外漢なので、それがどの程度難しい作業だったかは想像もできないが、髪の毛の揺れや風になび…

JavaScriptのswitch文の速度はブラウザの違いでこんなにも差があった。

はじめに JavaScriptのswitch文は、CやJavaと異なりcaseのところに任意の式が書けるため、実行時にcaseの式も評価されるので基本的にはif-else文の並びと類似のものになります。つまり、caseの数に応じてパフォーマンスも低下すると予想されます。本当にそう…

JavaScriptのパフォーマンスの違いから数値表現の違いを推定してみた

はじめに JavaScriptの数値は仕様的には64bit倍精度のIEEE754に準拠というものですが、内部の実装では高速化のために必要に応じて32bit整数だったりdoubleだったりします。ブラウザによっては、その辺りの実装に違いがある筈で、それはパフォーマンスの違い…

ECMAScript 5th editionがECMAで承認される

いろいろ紆余曲折がありましたが、ECMAScriptの第5版が正式にECMAで承認されて仕様書がリリースされました。Draftの文字が消えたので、ちょっとは読む気が沸いてきます(笑)。アナウンスメールES5 is an ECMA standard下記から仕様書はダウンロードできま…

高尾山・陣馬山ハイキング

前回の5月に続き、2回目の高尾山から陣馬山までのハイキングであるが、今回(11/23)は「なんとかなるさ」のいい加減な性格が功を奏してか、なかなかできないような貴重な経験をすることができた。高尾山登山口は5月に来たときに比べ、大変な込みようである…

美しいもの

先日、いつものように通勤電車の中でパソコンのキーボードを叩いていると、隣で70歳を超えていると思われる女性3人組が、B5サイズくらいの写真を見ながら、見事だねぇ、すごい綺麗、などと感嘆していた。気になって覗き見したら、鳥の形をした雲だった。…

JavaScriptのビット演算の仕組みを理解する

はじめに JavaScriptの数値表現はIEEE754の64ビットの倍精度型浮動小数ですが、ビット演算はどのように定義されているのでしょうか。今回はそのビット演算について解説します。この仕様は10年以上前から変わらないのですが、改めてその部分が書籍などでどの…

稲村ヶ崎に行ってきた。

天気が良かったので家でパソコンやっていてももったいないので、久しぶりに稲村ヶ崎に行ってきた。といっても、家を出たのは3時近く。途中、北鎌倉あたりの紅葉を電車の中からチェックしたが、まだ紅葉はほとんどしていない。鎌倉駅で江ノ電に乗り換え、稲…

JavaScriptの大きな数と小さな数の仕組みを理解する 〜 IEEE754入門 〜

JavaScriptでの数値はIEEE754で規定されている倍精度型doubleです。符号部が1ビット、仮数部が52ビット、指数部が11ビットの64ビットで表現される浮動小数です。この辺りは、計算機の初歩の初歩で、当たり前すぎて普段は気にすることはないと思いますが、そ…

Operaだけ何故か極端に高速な正規表現パターン

とても単純な正規表現だけれど、照合するのに非常に時間のかかるパターンがあります。下記はその一例。 var s = "abcdefghijklmnopqrstuvwxyz".match(/a(.+)+c/); 照合することは一目瞭然です。しかし、+ は最長一致型の照合なので2重のバックトラックが発…

電車の中で聞いたちょっとイイ話

僕は通勤や帰宅電車の中では、椅子に座れてパソコンを広げられる程度に余裕があれば、だいたいにおいて音楽プレイヤーを聞きながらキーボードを叩いている。この文章もこうして電車の中で書いたものである。先日、うっかりプレイヤーのバッテリーを充電する…

ブログを読むな、マニュアルを読め。

プログラムを書くとき、分からない関数を調べるのに、なんでもかんでもブラウザで検索する人をときどき見かける。確かにそれによって目的のものを探すことはできるだろう。ブログには実体験に基づくヒントとなる情報が多いのも確かだ。でもね、そんな検索す…

JavaScriptで循環配列を文字列化したらどうなるか?

JavaScriptのオブジェクトは文字列化しても単に "[object Object]"と表示されるだけなのに、配列は文字列化すると "1,2,3,4" のようになる。便利なようであまり便利でもない。 var ary = [1,[2,[3,4]],5] var s = ary.toString(); // s は "1,2,3,4,5" 各要…

JavaScriptのsetInterval関数の意味を正確に理解するための1つの説明

ECMAScriptの言語仕様と組込関数の動作仕様は非常にきめ細かく規定されていますが、それに含まれていないJavaScriptの関数の仕様はどうもはっきりしないように思えます。そのためか、それを利用するコードも正確なものではないものが見受けられます。その1…

JavaScriptのToNumberとparseInt/parseFloatの仕様と実装の違い

ECMAScriptの規格書は非常に細部に至るまで細かく仕様が規定されていますが、100%全て正しく実装している処理系は僕の知る限りありません。過去に広まってしまったソフトとの後方互換性を維持するため、あえて仕様にあわせていないのだろうというものも…

レインボーブリッジを渡ってお台場へ

ストレス解消には歩くに限る。ただひとり黙々と目的もなく歩く。歩くついでに写真を撮る。歩きながら妄想に耽る。自分は何がしたいのか。とりとめもないことを考える。今日は天気が良かった。今年の2月に来たコースを同じ道のりで再び歩いてみた。ガンダム…

それにしても驚きました。

この記事がこんなにブックマークを集めるなんて。自分でもよく書けたと、多少は自慢したいところはあったけれど、それまで1日あたり40〜50程度のページビューしかないブログで、ブックマークも全部で6つしかなかったので、せいぜい10個くらいついた…

FAQ形式によるJavaScriptの本質がわかる超入門

はじめに JavaScriptは簡単な言語のようでいて、実は奥が深く、初心者にとってなかなかその本質がわかりにくい言語です。ここでは、JavaScriptの言語的エッセンスを理解できるようなものをFAQ形式で書いてみました。ご意見や誤り等を指摘してもらえたら嬉し…

はてな市民になった

気づいたらちょうど30日分書いたので、はてな市民になったようだ。4月から始めて6ヵ月かかってようやく市民になれた。ページビューは4890。まぁそんなもんだろう。誰にも話さず、密かに書いているので、たまたま検索で引っかかって訪れる人がほとんど。…

赤い羽根共同募金

今日は10月1日。そんなこと気にも留めず駅を歩いていたら、「赤い羽根の共同募金にご協力お願いしま〜す」と女子高生4,5人が声をそろえて叫んでいた。毎年思うが、その光景はとてもイヤなんです。募金すること自体は構わないが、どうして、あんな大声で…

たかがスペル、されどスペル

他人のプログラムを読むとき、大文字小文字の使い方やインデントの仕方などが自分のスタイルと異なる場合には読みにくいと感じるが、それもでも、一貫した規則によって書かれてればそれほど抵抗感はない。しかし、スペルミスが多いコードを見ると、それを書…

披露山公園−逗子海岸−長者ヶ崎、そして立石を歩いた

すっかり秋らしい天気である。世の中はシルバーウィークとかいって5連休であるが、月・火・水と出勤しなければならないため、出かけるなら今日しかないと思い立ち、久しぶりにカメラをもって海を見にいった。特に目的はない。延々と一人ただ歩きながらとり…

忙しい!

忙しい、いそがしい、めっちゃ忙しい。ブログなんて書いている暇なんかない。っな筈なのに、気分が乗らない。急遽、仕事でFlashでアプリケーションを書くことになった。しかも短期決戦。JavaやJavaScriptでアプリケーションはたくさん書きましたよ。ECMAScri…

JavaScriptで ""+x を文字列変換に使うのは気持ち悪い

JavaScriptの本やブログなどで非常に良く見かけるのだが、数値などの文字列でないものを文字列に変換する方法として var s = "" + x; のように空文字との連結によって行っているが、私としてはちょっと気持ち悪さを感じる。もちろん、間違いではない。確かに…

クロアチアの写真

クロアチアに行ってきたときの話を書こうと思っていますが、遅々として進まないので、とりあえず、写真の一部を公開します。はてなフォトライフ Panoramio

JavaScriptでおもちゃのLispを作ろう(5)〜組込み関数編〜

前回までに組込み関数を一切定義していないピュアなLisp処理系ができました。今回は必要最小限の組込み関数を実装します。 /* * 関数に名前をつけて登録する。引数lazyがtrueのときは、関数の引数を評価しない。 * スペシャルフォームのときtrueをセットする…

JavaScriptでおもちゃのLispを作ろう(4) 〜評価器編〜

いよいよ評価器の実装を行います。Lispの評価器はeval()関数を実装することです。eval()関数はLisp自身で実装することができます。Lisp自身によるeval関数の実装はLispの古典であるLisp1.5マニュアルによると以下のようになります。 apply [fn;x;a] = [atom[…

Yコンビネータのお話

過去にもいろいろなブログで何度も取り上げられて話題になりましたが、自分なりの理解で書いてみました。Yコンビネータはシンプルでありながら、不思議で奥が深いので興味をそそる要素があるのでしょう。JavaScriptも広い意味では関数型言語であり、λ計算と…

クロアチア

実は、8/8〜8/19まで夏休みをとってクロアチアに行って来ました。首都のザグレブからアドリア海のザダール、トロギール、スプリット、ドブロブニク、さらにボスニア・ヘルツェゴビナのモスタルをレンタカー(モスタルのみバスツアー)で回ってきました。日本…