JavaScript

JavaScriptでおもちゃのLispを作ろう(2)〜プリンタ編〜

今日は前回に引き続き、リーダ関数の残りとリーダ関数と反対のプリンタ関数を実装します。S式を読み込むリーダ関数のサブ関数であるreadString()とreadList()関数は次のようになります。Lispの文字列はエスケープもいろいろできるのですが、複雑なことは後…

JavaScriptでおもちゃのLispを作ろう(1)〜リーダ編〜

こんなものは数え切れないくらい既に沢山あると思いますが、JavaScriptでおもちゃのLispを作り始めたので日記として書いておきます。普段は会社では仕事でC++を使ってプログラムを書いていますが、趣味のプログラミングというのは、やっぱりおもちゃのような…

JavaScriptの基本型とオブジェクト型のパフォーマンスの違い

JavaScriptの数値や文字列などの基本型はオブジェクトではありませんが、あたかも対応するクラスのインスタンスオブジェクトであるかのようにメソッドをコールすることができます。例えば、下記のプログラムではv1とv2はどちらも"123.00"という同じ文字列に…

Google Chrome OS考

Google Chrome OSが発表され、ニュースやブログで大きく取り上げられて話題になっている。まだ、詳細な内容は公表されていないが、どんなものが登場するのだろうかと、いろいろ妄想すると楽しくなる。従来からいくつも登場し、そして消えていったWebOSとの基…

ECMAScript 5 Overview

ECMAScriptの規格書は読んだだけでは理解するのがなかなか難しいが、こういうビデオとスライドがちょっとでもあると理解の助けになる。特に、Object.createとObject.definePropertyが具体的に説明されている。 YouTubeビデオ

JavaScriptでメモ化関数(つづき)

前回5/6に紹介したメモ化関数についてちょっと補足。メモ化した関数を別の名前にしてしまうと、下記のような再帰的な関数fibはそれ自体は高速化されない。2回目以降に同じ引数をもつときだけ高速化されるに過ぎない。 function fib(n) { return (n < 2) ? n…

JavaScriptでメモ化関数

Ajaxianで知ったエントリー A Better JavaScript Memoizer をメモ。memoizerは過去にも何度も話題になったと思うが、このmemoizerはクロージャを使って結果を保存しておくので、シンボル汚染が発生しないことが特長か。従来よくあるのは、プロパティを利用し…

ECMAScript 5th Editionで改善された3rd Editionの項目

ざっと、5th Editionのドラフトを眺めてみて、3rd Editionの仕様の不備と思っていた部分が改善されているかどうかを調べてみた。以下、v3は3rd Edition、v5は5th Editionのこと。 for in文のinの右のパラメータがnullの場合 Annexにもちゃんと記述されている…

ECMAScript 5th Edition final draft

ECMAScriptの第5版の最終ドラフトがリリースされていた。ECMAScriptV4は先進的な機構の導入が精力的に進められていたが、昨年のすったもんだの末、ECMAScript3.1相当に落ち着くことになって、言語的には大きな進展はみられない。