きままにものづくり

日々の気付いたことなんかを書いてます。

Bug852791

https://bugzilla.mozilla.org/show_bug.cgi?id=852791

目次

  • 説明
  • 解決法

説明

文字列どうしのconcatの時に、無駄なアセンブラが実行されている。
例えば、以下のようなコードは同じアセンブラが実行されるはずである。

var x = "hoge"

var s = "f" + "oo" + x + "b" + "ar"; //(1)
var s = "foo" + x + "bar"; //(2)

しかし、IonMonkey spewを用いて確認してみると、以下のような結果になっている。
(1)の実行結果
f:id:even_eko:20130814140609p:plain
(2)の実行結果
f:id:even_eko:20130814140631p:plain
注目すべきなのは、concatの回数である。(1)の場合は4回実行されており、(2)の場合は2回だけである。
定数どうしのconcatなら、変数の読み込みが発生しないのでアセンブラを実行せずとも、直接concatすることができる。
因みに、定数どうしのconcatの結果は以下のようになっている。

var s = "a"+"b"

f:id:even_eko:20130814141515p:plain