abcdefGets

ゲッツ!

2019 Javascript engine 俯瞰

2019 Javascriptエンジン俯瞰 こんにちは 2019 Javascript Advent Calendarの11日目です 2019はJSエンジンが新たに2つもリリースされた まずFacebook産のhermes もう一つがFFMPEG作者のbellardが実装したquickjs この2つを見ていこうと思う ちなみにhermesは…

FacebookのHermes Javascript Engineについて

最近、JSエンジンが何故かいくつか出て来たのでいっちょ見て見ることに 最初はFacebookが実装したjavascriptエンジンHermes(エルメス)の実装を見てみた 面倒くさいのでコードとかは引用しない 概要 どうやらReactNativeの高速化のために実装したエンジンのよ…

JavascriptのObjectリテラルとJSON.parseについて

V8のJSON.parseについて 最近(ちょっと前か)話題のオブジェクトリテラルよりもJSON.parseのほうが早い件について。 その理由を内部実装の観点から書く。 また注意点を最後に書いた。 話題のブログは以下から https://v8.dev/blog/cost-of-javascript-2019 パ…

React hooks for React-Redux

久しぶりに時間が少しあったので、今更ながらReact hooksで遊んでみた。 Redux とりあえず、useReducerとか触ってみたけど、redux勢には物足りない感... reduxをReact hooksで使えるやつ探したらfacebookが出してるredux-react-hookを見つけた。 使ってるう…

WeJS2周年おめでとうございます

久しぶりのブログはこちらのアドベントカレンダー adventar.org WeJSについて We are Javascritpers wajs.connpass.com 初心者登壇歓迎なJavascript勉強会 最近はJS初心者歓迎も兼ねていて、多方面で参加しやすい勉強会になってる 思い出 21Cafeでやってると…

JSのproposal-numeric-separatorを実装したよ

タイトルの通りなんだけど、書くのが遅れてしまった。 V8 のmasterにマージされた。 機能 javascriptのプロポーザルで数値リテラルの間にアンダースコアを挿入できるやつ 現在stage3にあってまだ正式に採用されているわけではない。 github.com このスライド…

V8の Object.entries/values を高速化した

V8のObject.entries/valuesを高速化したよというお話 Object.entires/values そもそもObject.entries、Object.valuesとは何かというと、 GitHub - tc39/proposal-object-values-entries: ECMAScript Proposal, specs, and reference implementation for Obje…

ブラウザベンダーのSpectre and Meltdown対応

Spectre and Meltdownについては前回書いたが、 各ブラウザベンダーがとっている対応について今回は書く。 といっても大したことではないのだが。 対応一覧 Google Chrome SharedArrayBufferのデフォルト無効化とPerformance.nowの解像度を下げる(どこまで…

Spectre and Meltdownについて

今回CPUに依存する脆弱性が発見されて大きな問題となっている。 そこで正月休みを使ってこの問題の解説を試みる。 Disclaimer 私はセキュリティの専門家ではないので間違えた情報があるかもしれない。 一次情報を載せておくので怪しい場合にはそこにアクセス…

V8 javascript engineについての細かい話 (Node.js Advent Calendar 2017)

Node.js Advent Calendar 2017 25日目の記事です。トリとなります。 さて先日11/26・27日に行われたNode学園祭でv8について発表させて頂いたが、 30分という制約上色々カットせざるを得なかった。 またv8のコードを読む・コントリビュートする上で伝えられる…

mallocを再実装した話

C++ AdventCalendarの12日目 普段私はWEBのフロントエンドを仕事にしている。 つまり使う言語はjavascript/typescript等のScript言語だ。 ただ前職や趣味、OSS等でC++によく触っていたので昔実装したmallocの話をすることにした。 mallocとは mallocとはC言…

TypeScript 2.6 変更点と注意点

TypeScript2.6が出たので変更点を記載 RCからほぼ変更点がない。 Strict Function Typeフラグの導入 --strictFunctionTypesというフラグが導入される。 このフラグは--strictフラグに内包されており、--strictの場合は自動でONになるが、 --strictFunctionTy…

Ecmascriptのprotocolについて

Ecmascriptにprotocolを実装するという提案がある。 proposal-first-class-protocol もともとGotanda.jsで発表した内容だけどいろいろ追記した。 資料はこれ speakerdeck.com 内容 元々はinterfaceの提案だった。 それが名前と形を変えてprotocolの提案にな…

HTML5 Conference 2017に登壇します

ひょんなことから HTML5 Conference に登壇する機会をいただけることに。 タイトルはDeep dive into TypeScriptということで、TypeScriptの紹介や、RoadMap・Issuesの話とかをさせて頂くつもり 同じ時間帯に任天堂の方のセッションとかあってアレなんですが…

Typescript 2.5 リリース

Typescript 2.5がでたので変更点をメモ Optional-catch-bindingの導入 catch節のエラーオブジェクトが省略可能になった。 現在Stage3のOptional catch bindingが導入された形に。 サンプル let input = "..."; try { JSON.parse(input); } catch { // ^ catc…

typescript 2.4 の新機能

typescript2.4がでたので新機能を確認。 Dynamic Import Expressionsのサポート import('...')式がサポートされた。 import式を使うことで多くのバンドラーがコード分割をすることが可能になるので、 module: esnextで出力するのがおすすめだそう。 async fu…

babelのAsyncIterationバグ

問題 for-await-ofのボディで配列への分割代入を行うと、 Cannot read property 'file' of undefined というエラーを投げてトランスパイルに失敗する。 どうやらscopeの解析に失敗しているらしい。 サンプルコード async function g(t) { return new Promise…

Webpackでpolyfillをちゃんと動かす

面倒だったので備忘録 Polyfillの設定 とりあえずwebpackはrequireしないと駄目。 でも既存のコードを一切変えずにpolyfillをインストールしたい。 webpack.ProvidePluginを使う。 new webpack.ProvidePlugin({ 'Promise': 'es6-promise', 'Symbol': 'es6-sy…

jspmからWebpackに移行した

とりあえず、Webpackを導入したがそのままだと色々問題が多かったので以下の事をやった。 まあ今更感あるが。 typescriptのallowSyntheticDefaultImportsをfalseにする。 production用とdev用のconfigをいい感じにわける node_modulesのdllを生成する。 type…

V8 Iginition Interpreter

以前、東京Node学園25時限目で発表した内容を修正して書いていこうと思う。 というわけで、V8にバイトコードインタープリタ Ignition が搭載された。 このインタープリタは単純そうに見えて非常にわかりづらいので解説していく。 バイトコードインタープリタ…

typescript 2.3 RC

typescript 2.3 rcがアナウンスされた 主な変更点は以下の通り –strictオプションの追加 以下の型チェックオプションを有効にする –noImplicitAny –strictNullChecks –noImplicitThis –alwaysStrict 以下の様に部分的にOFFにもできる { "compilerOptions": {…

gulp-uglifyでプロパティ名をmangleする

全然ドキュメントがなかったので備忘録。 ClosureCompilerみたいにプロパティ名もmangleしたい。 こんなの const x = { doSomething() {return ...} doNothing() {} } x.doSomething(); x.doNothing(); const x = { a() {return ...} b() {} } x.a(); x.b();…

ES6のComputedPropertyNameとトランスパイラ

ES6のComputed Property Nameは非常に便利だが、トランスパイラを併用すると問題が起きがちである。 それを確認していく。 Base const SYMBOL = Symbol('foo-bar-baz'); const obj = { [SYMBOL]: 1, name: 'brn', job: 'engineer' } typescript var SYMBOL =…

Ecmascript decorator を使ってキャッシュする

表題の通り ES proposal のdecoratorをつかってメモ化のようなことをするライブラリを前に書いたので、 キレイにして、GitHubに公開した。 GitHub - brn/cache-decorator: javascript method/function cache decorator. インストール npm install cache-deco…

Function.prototype.bind のパフォーマンスについて

ふとパフォーマンスが気になったので調査した。 記憶が正しければ、callよりも遅いはず。 というわけでレッツ検証 事前準備 package.json { "name": "bench", "version": "1.0.0", "description": "", "main": "index.js", "author": "brn", "license": "MIT…

React.js meetup × React Native meetup に参加した

パネルディスカッション 参加者 @yosuke_furukawa @koba04 @yositosi (Togetter CEO) @janus_wel (CureApp CTO) 全体的にReactNativeはWebの技術をどう活かせるか、 ワンソース・マルチユースができるか等の話だった。 あとReactNativeの将来性とか 全体的に…

【RECRUIT Technologies NIGHT vol.5】リクルート流フロントエンド開発 に参加してきた

React / Redux を活用したリクルートテクノロジーズのフロントエンド開発 古川陽介 さん(@yosuke_furukawa) speakerdeck.com 以下メモ 言いたいこと フレームワークは作るものに合わせて作る リクルートのWeb トップページに検索があり、 検索するとリストビ…

V8 の For In の話

V8 blogに話が出ていたが、V8のfor in構文が高速化したらしいので、 コードと共におっていこうと思う。 For In とは for (const key in object) { } このような構文でObjectのキーをイテレーションする機能。 この構文を何故高速化したかというと、Facebook…

「Angular 4 の最新動向と、2017年再注目のDart、そしてAngular Dart」に行ってきた

AngularとDartの勉強会でした。 以下メモ Angular4がやってくる!?新機能ダイジェスト Asai Masahiko Angular 4がやってくる!? 新機能ダイジェスト.pdf - Google ドライブ Semantic Versioningの導入 非推奨ポリシーの導入(2つのメジャーリリースを…

Typescript 2.2.0 の Mixin を使ってDIしてみる

表題の通り。 今まではMixinがなかったので、泥臭く型チェックができない方法(文字列とか)でDIしていたが、 typescript 2.2.0からMixinに対応したので、DIを考察する。 Dependency Injectionとは Dependency Injectionとはその名の通り依存性を外から注入す…