タグ

V8とjsに関するkyo_agoのブックマーク (4)

  • Array.prototype.sort について

    JavaScriptの配列にはsortメソッドがあり配列のソートを実行することができるけど、この配列のソートの中の実装はどうなっているのかという話。v8における配列ソートについての記事が大変参考になりました。 Chrome(V8)の実装はarray.jsにあり、配列の要素数が10以下の場合はInsertion sortを使い、それ以上の場合はQuicksortを利用する。Insersion sortの計算量はO(n^2)であるけど、少ない要素数の場合はQuicksortなどより高速になるらしい。直近のcommmitを見る限りだと、Chrome 69か70あたりでTimsortに置き換えるつもりらしい。TimsortはaverageがO(n log n)で、最悪でもO(n log n)の計算量で済む。QuicksortをTimSortに置き換えるつもりに至った経緯などは調べてない(ので間違っ

    Array.prototype.sort について
  • V8 extras · V8

    V8 implements a large subset of the JavaScript language’s built-in objects and functions in JavaScript itself. For example, you can see our promises implementation is written in JavaScript. Such built-ins are called self-hosted. These implementations are included in our startup snapshot so that new contexts can be quickly created without needing to setup and initialize the self-hosted built-ins at

  • 末尾呼び出し最適化が実装された - JS.next

    概要 ある関数Aから別の関数Bを呼び出すとき、処理系は後で戻って来れるように一旦Aの状態を保存し、関数Bの処理に入る。 これが問題になるのは再帰の時で、数万回程度の再帰でスタックが一杯になり、エラーとなってしまう。 しかし、もし関数B呼び出しの際に、関数Aに戻ってきて処理を続ける必要のない形で呼びだされていれば、 状態の保存を省略して関数Bに移行する最適化が可能であり、ES2015でその詳細が定義されることとなった。 例 具体的には、strictモードの関数で、「 return fn() 」という形での呼び出しについて最適化が有効になる。 最適化が効く例: function fn( n ) { 'use strict' if ( n <= 0 ) { return 'done!' } return fn( n - 1 ) // この関数がする処理はこれ以上ない } fn( 1e6 ) //

    末尾呼び出し最適化が実装された - JS.next
  • SIMD型について - JS.next

    概要 新しいプリミティブ型であるSIMD型及びAPIがV8で実装されてきている。 SIMDとは、複数の数値を並べて1つの値としたようなデータ型である。 これはCPUによって効率良くサポートされているデータ型であり、 1 + 2 -> 3 をするように [ 1, 2, 3, 4 ] + [ 2, 3, 4, 5 ] -> [ 3, 5, 7, 9 ] を1回の演算ですることができる。 つまり、沢山の数値を扱う場面でSIMD型を利用することで、何倍ものパフォーマンス向上が期待できる。 (※WASMに入ることとなり、ESからは一旦取り除かれました。) 実装される型 float32x4 32bit浮動小数点型を4つ並べた128bitのデータ型 float32はJSの通常のnumberであるところのfloat64より精度が低い int32x4 32bit符号付き整数型を4つ並べた128bitのデータ

    SIMD型について - JS.next
  • 1