トップ
新規
単語検索
ヘルプ
ocamljsメモ
をテンプレートにして作成
開始行:
by keigoi
#contents
* 日本語の解説 [#v3e7eb25]
http://d.hatena.ne.jp/keigoi/20101101/1288584308
* ocamljs あとでパッチおくる [#n7dc65d3]
- max_int がおかしい(JSのintの範囲をこえる)ので closure c...
-- 修正ずみ
- string_of_float min_floatがSafari/webkitでおかしい
-- Safariのバグ。最新のwebkitビルドでは直っている。min_fl...
- 一部日本語文字列リテラルが化ける ''(未報告)''
-- src/jscomp/jsgen.ml を以下の通りコメントアウトしてみる
let utf8_encode s = s
(* let len = String.length s in
Utf8.from_int_array (Array.init len (fun i -> Char.cod...
-- 日本語文字が"\u5E74"のようにエスケープされてしまうが、...
- DateクラスのgetDayメソッド(曜日を取得)がない ''(未報告)...
- getClientWidth/getClientHeightがない ← DOM標準ではない...
- [[document.stylesheet.insertRule:https://developer.mozi...
- JavaScript quote中の文字列リテラルのエスケープシーケン...
* パフォーマンス [#l5e94b68]
- 現時点のocamljsでは関数呼び出しのオーバーヘッドがかなり...
-- 関数のカリー化や末尾呼び出しの最適化のため関数呼び出し...
- 通常のPCでは全く問題ない。スマートフォンでもユーザとの...
- 生成されるJavaScriptは元のOCamlコードの原型が残っている...
-- 特にモジュールをまたいだ呼び出しが最適化されないためLi...
-- このような最適化をプロファイルの後にごく一部で行うだけ...
** 多相的な比較は超低速 (.jsのcompare_valを見よ) [#gc65fc...
- min, maxも多相的
- [[奥義・多相転生:http://twitter.com/camloeba/status/156...
-- 要するにintやfloat等の型をつければそれ専用の比較が行わ...
* 圧縮 [#qfb04eb7]
** 基本的な事 [#f3582f34]
- 使われていないモジュールはリンクされない。
- Printfはコードサイズを大きくしがち
- Randomを使うとInt64がついてくる
** Google Closure Compilerによる 圧縮 [#q511be89]
- 以前はclosure compilerでSIMPLE_OPTIMIZATIONすると動かな...
- closure compilerでADVANCED_OPTIMIZATIONすると動かないが...
-- ADVANCED_OPTIMIZATIONはいくらかdead code eliminationや...
-- ADVANCED_OPTIMIZATIONでは o.field 形式のフィールドアク...
** 以下よりいいかげんなメモ [#a359a4cb]
- ocamljsの進化により無効になるテクニックや、そもそも根拠...
- ADVANCED_OPTIMIZATION前提
*** パターンマッチはclosure compilerで最適化されない [#l3...
- NG
let a,b = expr1, expr2
- OK
let a = expr1 and b = expr2
*** let [#u07bba0a]
(function(){ var x = ...; expr }());
などと余計な呼び出しが挿入される(が、最適化で除去されるこ...
終了行:
by keigoi
#contents
* 日本語の解説 [#v3e7eb25]
http://d.hatena.ne.jp/keigoi/20101101/1288584308
* ocamljs あとでパッチおくる [#n7dc65d3]
- max_int がおかしい(JSのintの範囲をこえる)ので closure c...
-- 修正ずみ
- string_of_float min_floatがSafari/webkitでおかしい
-- Safariのバグ。最新のwebkitビルドでは直っている。min_fl...
- 一部日本語文字列リテラルが化ける ''(未報告)''
-- src/jscomp/jsgen.ml を以下の通りコメントアウトしてみる
let utf8_encode s = s
(* let len = String.length s in
Utf8.from_int_array (Array.init len (fun i -> Char.cod...
-- 日本語文字が"\u5E74"のようにエスケープされてしまうが、...
- DateクラスのgetDayメソッド(曜日を取得)がない ''(未報告)...
- getClientWidth/getClientHeightがない ← DOM標準ではない...
- [[document.stylesheet.insertRule:https://developer.mozi...
- JavaScript quote中の文字列リテラルのエスケープシーケン...
* パフォーマンス [#l5e94b68]
- 現時点のocamljsでは関数呼び出しのオーバーヘッドがかなり...
-- 関数のカリー化や末尾呼び出しの最適化のため関数呼び出し...
- 通常のPCでは全く問題ない。スマートフォンでもユーザとの...
- 生成されるJavaScriptは元のOCamlコードの原型が残っている...
-- 特にモジュールをまたいだ呼び出しが最適化されないためLi...
-- このような最適化をプロファイルの後にごく一部で行うだけ...
** 多相的な比較は超低速 (.jsのcompare_valを見よ) [#gc65fc...
- min, maxも多相的
- [[奥義・多相転生:http://twitter.com/camloeba/status/156...
-- 要するにintやfloat等の型をつければそれ専用の比較が行わ...
* 圧縮 [#qfb04eb7]
** 基本的な事 [#f3582f34]
- 使われていないモジュールはリンクされない。
- Printfはコードサイズを大きくしがち
- Randomを使うとInt64がついてくる
** Google Closure Compilerによる 圧縮 [#q511be89]
- 以前はclosure compilerでSIMPLE_OPTIMIZATIONすると動かな...
- closure compilerでADVANCED_OPTIMIZATIONすると動かないが...
-- ADVANCED_OPTIMIZATIONはいくらかdead code eliminationや...
-- ADVANCED_OPTIMIZATIONでは o.field 形式のフィールドアク...
** 以下よりいいかげんなメモ [#a359a4cb]
- ocamljsの進化により無効になるテクニックや、そもそも根拠...
- ADVANCED_OPTIMIZATION前提
*** パターンマッチはclosure compilerで最適化されない [#l3...
- NG
let a,b = expr1, expr2
- OK
let a = expr1 and b = expr2
*** let [#u07bba0a]
(function(){ var x = ...; expr }());
などと余計な呼び出しが挿入される(が、最適化で除去されるこ...
ページ名: