̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2013/ 4/ 9 通巻614号 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄                        News and Column  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   JavaScript の下位互換で型指定による高速化ができる asm.js 2013年 3月 27日、JavaScriptの実行速度を劇的に改善する asm.js を 紹介する記事が Publickey のブログに掲載された。 6月にリリースが 予定されている Firefox 22 で asm.js が使える予定。    asm.js は、ブラウザーの標準スクリプト言語である    JavaScript の実行速度を劇的に改善するために、    型の情報を与えることができる JavaScript の    サブセット(下位互換)のスクリプト言語である。    JavaScript の下位互換なので、asm.js で書かれた    コードは、そのままあらゆるブラウザーで動かす    ことができる。 つまり、asm.js に対応したブラウザー    では高速に動作しつつ、asm.js に対応していない    ブラウザーでも動かないという問題は発生しないのだ。 JavaScript は、動的型付け言語であるので、型をほとんど気にせずに プログラミングが簡単にできるという利点がある一方で、C言語などの 静的型付け言語に比べると、どうしても実行速度に限界がある。 なぜなら、動的型付け言語は、数値の変数の型が、整数型という 整数しか使えないが高速な計算ができる型であるかどうかを、 コンピューターがいくら賢くても判断することができないからだ。 たとえば、a = 3 / 2 を計算した結果は数学的には a = 1.5 であるが、 整数型なら小数部分が切り捨てられて a = 1 となる。 それでも 正しく動くプログラムであることを、静的型付け言語なら型に記述する するため、コンピューターは高速な整数型で計算ができるのだ。 円周率 3.14159… が 3 や 3.14 でも構わないとするようなことだ。 では、下位互換なので、整数型を表す int などのキーワードを使うことが できない asm.js で整数型をどのように記述するのであろうか。 仕様書に書かれているサンプルを見てみよう。 function add1( x ) {   x = x | 0;       // x : int   return ( x + 1 ) | 0;  // int } int 型は、| 0 を付けて記述するというのが asm.js の仕様だ。 | 演算子は整数型にしか使えない論理和の演算子だから、x は整数という わけだ。 これは面白い。 しかし、| 0 という記述だけから、それが int 型で効率のよい計算をして いることに気づくのは、asm.js を知っている人だけだ。 だから、int と いうコメントを入れなければ、読みにくいコードになってしまう。 皮肉にも、asm.js は、アセンブラ言語と同じように、読みにくいコードに なってしまうのである。 しかも、親切にコメントを書いても、コメントはコンパイラーによって 自動チェックされないので問題だ。 たとえば、仕様変更によって | 0 が 無くなって、// int というコメントだけを残してしまうミスをしてしまうと、 矛盾がある意味不明なコードになってしまうのだ。 それなら、コンパイラーで自動チェックできる下位互換性のない型付き JavaScript 言語を使ったコードで開発しておいた方がよい。 その場合 でも、事前に一般の JavaScript に自動変換しておいたコードを HTML に組み込んでおけば、型付き JavaScript に対応していない ブラウザーでも問題ないのだから。 参考リンク: http://asmjs.org/ http://www.publickey1.jp/blog/13/javascriptasmjsccjavascriptjavascript.html * The others Last week watched News  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ◇ C++14の新機能。 http://news.mynavi.jp/news/2013/04/02/035/index.html … マルチスレッド対応として、スレッドセーフな並列待ち行列や mutex も C++ 言語仕様に。 ◇ ついにやってくるギガビット無線LAN、IEEE802.11ac。 http://www.itmedia.co.jp/pcuser/articles/1303/29/news049.html … 最大約7Gbpsで有線より速い。 ◇ 英語や中国語のサイトで単語上に日本語ルビを表示する、ずるっこ! http://japan.cnet.com/news/society/35030084/ … 英語の勉強にはいいけど、すでにある程度英語を知っている人にとってはうざい。 ◇ IE11、CSSハック回避へ!。 http://news.mynavi.jp/news/2013/03/26/161/index.html … Internet Explorer だからと勝手に拒否していた Web サイトも見えるように。 ◇ 米Mozilla、次世代レイアウトエンジンServoを韓国Samsungと共同開発。 http://internet.watch.impress.co.jp/docs/news/20130404_594511.html … ブラウザ・エンジンはコモディティ化したのに、今さらなぜか。 ◇ 米国防高等研究計画局、Pythonに300万ドル支援。 http://news.mynavi.jp/news/2013/03/29/083/index.html … スパコンで実行する処理のほとんどを C言語レベルにできる NumPy を支援。 ◇ PlayStation 4の技術概要がGDCで公開。 http://pc.watch.impress.co.jp/docs/column/kaigai/20130329_593760.html … 更に詳細な構成が明らかに。 ◇ Apache狙いの攻撃横行、48カ国で2万超のWebサイトが感染か。 http://www.itmedia.co.jp/enterprise/articles/1304/03/news028.html … 正体が不明のため、潜伏期間では感染を検出できていない。 ◇ 理研など、近視と難聴の合併症の原因となる遺伝子変異を発見 http://news.mynavi.jp/news/2013/04/03/044/index.html … 原因の可能性が高いものが見つかった段階。 治療はまだ。                      Snap Note 3 開発BLOG  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ [ 次に調べるキーワードの位置を決めるプログラム - BM法(11) ] 前回は、キーワードの末尾の文字が違っていることをプログラムが判定している 様子を見ました。 次は、BM法(3)で説明した、5 の位置にあるテキストの文字 'c' から、 次に調べるキーワードの位置が [3] であることをプログラムがどのように 決めているかを見てみましょう。 1 1 1 1 1 1 1 1 1 1 position: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 text: a b c a b(c)a b a b c a b x a b c a b x -------------------------------------------------------- keyword: [0] a b c a b a keyword: [3] a b c a b a 前回は、下記の if 文が偽であったことを見てみました。 /* 末尾の照合が成功したら */ if ( test_string[ keyword_last_position ] == keyword[ keyword_last_index ] ) この if 文をステップ・オーバーすると、次は下記のコードを実行するように 表示されます。 /* 次の照合位置へ (2) */ keyword_last_position += skip_count; 実行する前は、keyword_last_position = 5, skip_count = 3 であることを確認 できたはずです。 そして、実行すると、keyword_last_position = 8 になることが 確認できます。 キーワードの位置が [3] であるときの、キーワードの末尾の 位置(keyword last position)は 8 なので、変数名の意味とも合っていますね。 (変数名が独自の略語になっていると、この確認ができないので、変数名に 略語は禁止です。) if 文で判定する前に、すでにキーワードを進める数である skip_count が 3 であることが分かっているのです。 すごいですね。 でも理由は簡単です。 その理由を説明する前に、skip_count 変数の値がどこで代入されたのかを 見つけましょう。 skip_count をクリックして、キャレット(文字を入力する 位置)を skip_count の上のどこかにします。 その状態で、[Ctrl]+[F] キーを 押します。 すると、検索ウィンドウが開いて、キーワードに skip_count が 入った状態になります。 その状態で [Enter] キーを押すと下方向に検索します。 しかし、したいのは上方向の検索なので、[Shift]+[F3] キーを押します。 こうして、skip_count に値を代入しているコードを探していき、以下のコードで skip_count の値を代入していることが分かります。 skip_count = SearchStringByBM_Class_getSkipCount_Sub( test_string[ keyword_last_position ], keyword_last_index, skip_array, min_character, max_character ); Visual Studio 2012 や Eclipse など、最近の開発環境では、検索よりももっと 便利に変数に値を代入している場所を探すことができるようになっています。 Visual Studio 2012 では、skip_count をダブルクリックしてください。 それだけで、現在の関数の中のすべての skip_count 変数の背景色が灰色に強調 表示されます。 これが結構賢くて、skip_count_aaa のように変数名の一部を含む 別の変数には強調表示されないのです。 きちんと文法を踏まえているのです。 キーワードを進める数である skip_count に 3 を代入しているのが if 文で 判定する前にしている理由の説明に戻りますが、これは、if 文の結果として キーワードが見つかったとしても見つからなかったとしても、次にキーワードを 移動する位置が同じ位置だから、if 文の前で skip_count を代入できるからです。 if 文の後に代入すると、真のときのブロックと偽のときのブロックの両方に 代入するコードを書かなければならなくなり、プログラム・サイズが大きく なって非効率なのです。 ソースコード(C言語)の全体は、以下からダウンロードできます。 Visual Studio の Express 版 for Desktop(無料)で試せます。 http://www.sage-p.com/b/searchstring.zip         ソフトウェアデザイン館 Sage Plaisir 21 について  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ホームページ  >>> http://www.sage-p.com/ メルマガ    >>> http://www.mag2.com/m/0000083983.html ブログ     >>> http://blog.livedoor.jp/sage_p/ ツイッター   >>> http://twitter.com/Ts_Neko ダウンロード  >>> http://www.sage-p.com/freesoft.htm サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi 東日本大震災  >>> http://www.sage-p.com/saigai.html メール   >>> ts-neko◇sage-p.com ←◇を@に変えてください          緊急メールは件名に「うどんメール」を付けてください。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ このメルマガの登録・解除をするときは… >>> http://www.mag2.com/m/0000083983.htm  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ News & Column are composed by T's-Neko 2013  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄