Firefox 2.0 beta 1 が出ましたね^^
さっそく、新機能のひとつ、JavaScript 1.7 の yield を使ってみました。
まず yield の動作を試してみた。
var i = 1; var g = (function() {while(1) {yield i; i++}})(); alert(i); // 1 g.next(i); g.next(i); alert(i); // 2
これで分かったこと。
なんと、
yield は関数を途中で終了させている。。。!
実は。
いままで、何度も関数を途中で終了できればなーと思っていた。
JavaScript 以外のほとんどの言語でそれが可能で、それが便利だからである。
それとはなにか、それとはスレッドである。
スレッドは CPU レベルで細かーく処理を止めて、いろんな処理の流れを同時に実行させているようなものだ。
yield を使ったら JavaScript でスレッドのようなものを作れるのでは?
という仮説。
実際に作ってみた。
↓ Firefox 2.0 beta 1 など(JavaScript 1.7 以上が動く環境)で見てください。
http://sample.ecmascript.jp/js17.html
うごいた!
四角い箱がぐるぐる回っているのが見えただろうか。
スレッド部分のソースはこんな感じ
function() { var $thread; while(true) { while(this.topCache < 200) { yield $thread; this.topCache += 2; this.style.top = this.topCache + 'px'; this.style.opacity = this.opacityCache += 0.01; } while(this.leftCache < 200) { yield $thread; this.leftCache += 2; this.style.left = this.leftCache + 'px'; this.style.opacity = this.opacityCache -= 0.01; } while(this.topCache > 100) { yield $thread; this.topCache -= 2; this.style.top = this.topCache + 'px'; this.style.opacity = this.opacityCache += 0.01; } while(this.leftCache > 100) { yield $thread; this.leftCache -= 2; this.style.left = this.leftCache + 'px' this.style.opacity = this.opacityCache -= 0.01; } } }
あとは setInterval で回すだけ。
setInterval(function() {g.next()}, 10);
これを今までの JavaScript でやったら、どれだけめんどくさいだろうか。
このソースではまだまだ凄さが伝わらないかもしれないけど、
Java などで書かれたスレッド前提のプログラムを JavaScript に移植できるかもしれない。(Orto を使わなくてもw)
それだけじゃない。きっともっともっといろんなことができる!
うはー。夢がひろがりんぐ (+∀+) いーるどありがとー
何でもできる!We can fly!
え? IE ってなんだけ?