WebAssembly 関数に JavaScript のクロージャを擬似的に渡す in Rust

現状の WebAssembly の仕様では JavaScript の関数は Rust へと直接渡せないということなので、効率は悪いですが一つの回避策を考えてみました。
仲介役を JavaScript 側に立たせ、 JavaScript 側ではほぼ任意なインターフェース、 Rust 側では固定的なインターフェースにします。
現状では実用的ではないレベルですが、どうしても避けられない場合はこうしてみるのがいいかもしれません。

もっと使いやすいやり方ができるようになるといいのですが。。。

サンプルプロジェクトはこちら

Read More

wasm-bindgen で hyperapp を実装しようとした (墓標)

勉強を兼ねて hyperapp の関数を Rust + wasm-bindgen で実装して、 hyperapp の動作高速化を狙ったが、 WebAssembly の制約があり詰まってしまった。
寝る前に思いついて 4 時間だけやっただけなので回避策を見落としただけかもしれないし、 WebAssembly の進化で問題無くなるかもしれない。

yew (Rust) や asm-dom (C++) のように、すべてを wasm 内で実装するのは抵抗があった。
(P)react の高速化ができれば既存の資産を使いつつ高速化できるし、他にも超重量級コンポーネントだけを wasm 化する戦略を採れると思った。

Read More

node-java でリフレクションする

Node スクリプトから( jar にある)Java 実装の情報を集めたい。

Node から Java を操りたい人向けのライブラリがなぜか存在している。 node-java
インストール方法は特に説明しないが、私は “node-gyp” でコケたので “windows-build-tools” を使ってインストールできた。

JavaScript から Java を動かす、と言うと、ややこしい。

Read More

JSweet で自作アノテーションを活用する

この投稿では、前回に引き続き、アノテーションを含む Java コードで書かれた処理やメタデータ取得を、どうしても JavaScript で再現して利用したい場合の一つの解決策を示します。

今回も JSweet というツールを利用します。
前回は簡単に使えましたが、今回のようにアノテーションを残して処理した場合に面倒な部分がありました。

サンプルプロジェクトはこちら

Read More

JSweet を利用して Webpack で Java コードを利用する

この投稿で解決したい状況として、 Java コードで書かれた処理をどうしても JavaScript から利用したい場合があります。コードと表現したのは、コンパイルして .jar になったものでなく、ソースコードとして手元にあるという意味です。

今回は、 JSweet というツールを利用します。これをただ簡単に利用するだけなら特に難しくありません。

サンプルプロジェクトはこちら

Read More

Webpack により HTML で書かれたコンポーネントを関数にして利用する

前回の記事の最後に、「属性やタグに囲まれた内容を利用できません」と書きました。
今回はその続きで、昔のプロジェクトでページ描画に使われいているものを念頭に作っていきます。

このテクニックを応用することで、 Spring Thymeleaf を JavaScript 化することができるのではないかと思います。

サンプルプロジェクトはこちら

Read More

Webpack でルーターのような動作をさせるパターン

昔のプロジェクトでページ描画に使われている依存ファイルについては、あるディレクトリ以下のどこかに実際の対象ファイルがあり、それを探して選び出してくるという関係になっていました。つまり、 require() などに直接変換すれば良いというものではありませんでした。
closure-loader がそんな感じではあります。

今回は、ルーターのような働きをする関数を設けて依存性解決を行います。入れ子だったり流入口が複数ある場合に役立つのかもしれません。

サンプルプロジェクトはこちら
この中では、独自ダグの単純な置き換えだけをやっています。(属性やタグ内の内容はまだ渡せません。)

Read More

interpolate-by-query-loader を公開しました

Webpack で似たような entryPoint が大量に並ぶなと感じたため、こちらもユースケースは多くないかもしれませんが、 loader を新たに作りました。
これを使うと、テンプレート化したような entryPoint 用ファイルを 1 つだけ用意して query をくっつけて entry 定義するだけで、 entryPoint を量産できます。

何かある場合は GitHub のリポジトリにお願い致します。

$ yarn add -D interpolate-by-query-loader

テンプレートエンジンを Webpack と Express で動かす

この記事も、昔のプロジェクトで使われていたテンプレートエンジンを Node で無理やり動かそうとする試みの一つです。
前回の記事に引き続き、今回も Java の Spring の Thymeleaf expression を使って書かれた HTML ファイルをターゲットとして、サンプル程度に処理を実装してあります。

テンプレートを文字列補間を使う関数として出力できるようになったので、次はこれを開発時には Webpack 、運用時には Express で動くように設定を行い、快適に開発できるようにします。

サンプルプロジェクトはこちら

Read More

cheerio での文字列補間関数出力

この記事も、昔のプロジェクトで使われていたテンプレートエンジンを Node で無理やり動かそうとする試みの一つです。
今回は Java の Spring の Thymeleaf expression を使って書かれた HTML ファイルをターゲットとして、サンプル程度に処理を実装してあります。

この記事にある内容を思いつく直前までは xml2js を使っていましたが、ツリーの親子関係・兄弟関係を維持したままの加工が少々面倒でした。
そこで、 cheerio を少し捻って使うことにしました。

サンプルプロジェクトはこちら

Read More