Islands in the byte stream

Technical notes by a software engineer

Emscripten & WebAssembly Night #8 で「AssemblyScriptでライブラリコードの高速化をしてみる」という発表をした

発表の機会をいただきありがとうございました。会場を提供していただいたメルカリさんにも感謝いたします。 「AsssemblyScriptはTypeScriptのサブセットだから実質TypeScriptを書くだけでパフォーマンスアップ!」みたいな言説をみるにつけ、「ええ〜ほんと…

webpack v4.35.3 の JSON loader は JSON.parse() を実行時に行うコードを生成する

ちょっとまえに The cost of JavaScript in 2019 · V8 というブログが話題になりました。 このなかで次のように説明している箇所があります: As long as the JSON string is only evaluated once, the JSON.parse approach is much faster compared to the J…

graphql-ruby で MessagePack の timestamp 型を使う

GraphQL APIのシリアライザとしてMessagePackを使うとGraphQLのcustom scalar typeを活用したくなりますね。ということで、graphql-rubyの ISO8601DateTypeを参考にMessagePackのtimestamp型にシリアライズ・デシリアライズできるようにします。 これまでの…

msgpack-ruby に timestamp型を実装した

timestamp型というのは2017年8月にMessagePackに追加された型です。 frsyuki.hatenablog.com しかし、おそらくMessagePack開発元がtimestamp型を使っていないためか、長らく msgpack-ruby には実装されていませんでしたし、msgpack-java の実装もpull-reques…

GraphQLとMessagePackは相性がよさそう

MessagePackはJSONのようなデータをシリアライズできるbinary formatで、JavaScript実装である msgpack-javascriptを基準で考えると次のような特徴があります: JSONよりencodeもdecodeも少し速い かつ、streaming decodeができるので fetch() のresponseのde…

JavaScript libraryのREADMEにブラウザ互換性表バッジを表示することについての諸々

ブラウザ互換性表 (a.k.a. browser matrix) とは、こういうやつです。 ブラウザ互換性表 powered by Sauce Labs TypeScriptで MessagePack encoder/decoder を実装した - Islands in the byte stream で作った msgpack/msgpack-javascript にこのバッジをつ…

TypeScriptで MessagePack encoder/decoder を実装した

npm install @msgpack/msgpack でインスコできます。NodeJS v12 でベンチマークしたかぎり、JSONと同程度の速度で、これまで最速といわれてきた msgpack-lite よりもさらに少しだけ高速です。 github.com もともとこのリポジトリには uupaaさんによる実装(t…

エンジニアHubにTypeScriptの記事を書きました

employment.en-japan.com 「GraphQL」徹底入門 ─ RESTとの比較、API・フロント双方の実装から学ぶ に引き続き、TypeScriptの記事を書きました。 TypeScriptに苦手意識を持っている人に向けて再び触るきっかけを作りたいと考えて書いたので、細かい言語仕様に…

TypeScriptの型情報を利用したCustom Transformerの現状確認

TypeScriptのコンパイラ・プラグインとして振る舞いASTの操作を行えるcustom transformer (AST preprocessor) が実装されたのは TypeScript 2.4 (2017年) でした。 そのときの様子は次のエントリに非常によくまとまっています。 [TypeScript 2.4] custom tra…

Rails.application.credentials.foo は fetch(:foo) にすべき

表題のとおりで、fetch(...) はエントリが存在しないと例外を投げるため、エントリが存在しないときに nil を返すアクセサよりもtypoに対して安全です。 こういうのは rubocop-rails でカバーできるといいなと思って起票して、良さそうというコメントはもら…