トップ «前の日記(2007-04-14) 最新 次の日記(2007-04-16)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2007-04-15

_ ライフ

ライフゲーム

永遠に動き続けるJavaScriptを作りたいわけだが、とりあえず100世代で死ぬように作ってある(forはまだっぽいというのはなんとなくわかったような)。(追記×3のタイミングでの追記:100世代ではなくボタンクリックでトグルに現在は変えている)

で、これは途中でインタラクションを受け取れるように

function shownext() {
    if (--willStop < 0) {
        clearInterval(timerId);
        return;
    }
    ...
}
function showLife() {
    willStop = 100;
    timerId = setInterval(shownext, 100);
}
というように、setIntervalを利用して隙間を空けている。

で、本当はsetIntervalじゃないのを使いたいのだが、わからなくてへこむ。というところまで。

追記:Firefoxじゃ動かない。やっかいだなぁ

追記の追記:セルの更新にinnerTextではなくinnerHTMLを使うように書き換えて修正(したけど、上の追記がそのままでした)

追記の追記の追記:セルの設定を可能にしたり、ボタンをストップアンドゴーにしてしまったり、ついつい現実逃避。というか、Firefoxはevent.srcElementを使えるようにして欲しいぞ。

Vistaが速い。VistaはAm64 3800で、XPはP4版Xeon 2.8だからCPUの差なのだろうけど、Firefox、IE7とも顕著にVistaマシンのほうが高速に動作する。他のアプリケーションではここまで体感速度は変わらない(どころかもっさりしてるやつもある)のでちょっと不思議(JavaScriptのコードが速度に顕著な影響を与えているということか)。

_ Concurrent.Thread.Compiler

うーむ、createメソッドを呼ぶまでは合ってたが、sleepを呼ばなかったのが敗因だったのか……な?(良くわかってない)

追記:わかった。createを呼ぶことでThreadの何かができるので、それをstartとかexecとかで呼ぶと思ったらそれが無いのでストールしたのだった(答えはcraeteした時点で実行が開始される)。

というわけで、向井さん先を越されたけれど(The Programming Language Ruby の間違いだとよそのサイトで見て気づくとか)、牧さんが未踏で開発されている(のとイコールかどうかは実は知らないけど)Concurrent.Threadがすごくおもしろい。

詳細は、向井さんが書かれているので、そちらを参照。追記:酒井さんのところも(参照CPS変換)。

ようは、自分でsetIntervalを叩いたり、そのために関数を分割したりしなくても、勝手にタイムシェアリングされる(時分割されるという意味で使ってるけど合ってるよね?)ようになり、かつ、いわゆるグリーンスレッドなので、スレッド間の通信に利用している変数(life.htmlの例だとwillStop)の読み書きを同期する必要はないということから(と思う。スレッド切り替えの最小単位がJavaScriptの1つの式のはずだから、というよりもメモリバリアを一切意識しなくて良いというほうが大きいかな)、JavaScriptでのメインループ処理とか、XHRを使った連続した先読みとかを手軽に実装できるようになる、というライブラリです。

上でちょろっと書いたけどforはまだサポートしていないようでした。とか、まだ開発中なわけだけど、良い感じだと思います。

#どのくらいおもしろいと感じたか、ぴぴっときたかと言うと、なぜか突然JavaScriptでLifeを実装するくらいだということですね(目で見えてコードが単純だということで、デモに向いているな、と思ったと)。

_ Leopard延期

もうちょっとPowerBookを使っとけということだと考えておこう。

本日のツッコミ(全2件) [ツッコミを入れる]
_ 向井 (2007-04-15 08:49)

これこそ、昨日の牧さんの話が効きそうな話ですよね(というか、そのために作った?)。<br>ところで手元の Firefox では動きますよ。

_ arton (2007-04-15 10:17)

そうです。でも、呼び出し方が思い出せない&ソース読んでもわからないでへこみまくり >そのために作った?<br>コードを直してHTMLを直すの忘れてました >Firefox


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え