ほうほう。あとで Wado と比べてみよう(Wado も世界最小のwasmをうたう処理系)。
世界最強の世界最小のwasm-goトランスパイラ!!WASMの呼出規約とかABI、ランタイム問題はともかく
やっぱり専用言語があった方がいいよね。どうしてもランタイムライブラリとセットになるわけだし。
Go風構文で2.5KBのWasm吐いてJS連携コード自動生成とか夢の技術すぎるだろ
“ブラウザで高速なバイナリ処理や計算ロジックのためにWasm。C/C++: POSIX互換や仮想FSまで引き連れてくる。Rust:学習曲線、ビルドパイプライン。Go: 最小構成でも2〜3MB。自作のGoライクなプログラミング言語を開発”
しゅごい
Libcみたいな汎用ライブラリを自前で持って最小限に縮めるのは合理的だけど、その分のバッファオーバーランみたいな脆弱性対策も自前にならざるを得ないので潜在的な手間と責任は増えそうな気も…
“2.56 KB”え、すげえじゃん(キュン)
凄すぎる試したい
遊んでみたい
はてブコメント見て、逆にそもそも実行領域とのメモリ分離がされているwasmにとってはlibcが重厚すぎなのかもな、と思った
最近、自分もプログラミング言語を作ってみたけど、うっかり作れるものでは全然なかった。うっかりとか、ちょっと(かなり)盛ったと言ってほしい。
もー、変態なんだから
うっかりね
Qiitaアカウントを見た感じ、自作コンパイラの解説記事を書いたが願望に反して全然広まらなかったので「世界最強」みたいな誇大広告を混ぜて宣伝することにした、という流れ(誇大広告撲滅委員会)
"外部宣言(declare)された標準関数はLLVMにとってブラックボックスですが、IR内部関数として定義することで、Clangの最適化パス(-O2)によって自動でインライン展開やSIMDベクトル化が行われます"
"多くのWasmコンパイラが肥大化する最大の要因は、言語ランタイムが暗黙のうちに要求するC標準ライブラリ(printf、memcpy、strlen、strcmp など)にあります"
Wasmはもっと手軽にCPU BoundなJSメソッドの置き換え目的に使えるようにならないかなぁ。自分にとっては進化の方向性が右斜め上に感じることしばしば
free: (ptr) => {}, // 解放しない, this.heapPtr += (s + 7) & ~7; // 単調増加 → DoSだな。あと「フォームのバリデーション」や「軽いパーサー」程度なら、そもそも素のJSで書いた方が依存も生成物も少ないという事実が
最小バイナリサイズのwasmを作りたいならEmscripten(clang)が現状最強の認識。あと、memcpyを例に出すのは不適切でmemory.copyを使えばwasm上は1命令で済む
1. libc(C標準ライブラリ)の徹底的なセルフホスト化 2. スライス構造による $O(1)$ 文字列処理
“スライスや文字列の扱いやすさは最高だが、GCとスケジューラが丸ごと同梱されるため、最小構成でも2〜3MBに膨らむ。”
うっかり世界最強のWasmコンパイラを作ってしまった件 - Qiita
ほうほう。あとで Wado と比べてみよう(Wado も世界最小のwasmをうたう処理系)。
世界最強の世界最小のwasm-goトランスパイラ!!WASMの呼出規約とかABI、ランタイム問題はともかく
やっぱり専用言語があった方がいいよね。どうしてもランタイムライブラリとセットになるわけだし。
Go風構文で2.5KBのWasm吐いてJS連携コード自動生成とか夢の技術すぎるだろ
“ブラウザで高速なバイナリ処理や計算ロジックのためにWasm。C/C++: POSIX互換や仮想FSまで引き連れてくる。Rust:学習曲線、ビルドパイプライン。Go: 最小構成でも2〜3MB。自作のGoライクなプログラミング言語を開発”
しゅごい
Libcみたいな汎用ライブラリを自前で持って最小限に縮めるのは合理的だけど、その分のバッファオーバーランみたいな脆弱性対策も自前にならざるを得ないので潜在的な手間と責任は増えそうな気も…
“2.56 KB”え、すげえじゃん(キュン)
凄すぎる試したい
遊んでみたい
はてブコメント見て、逆にそもそも実行領域とのメモリ分離がされているwasmにとってはlibcが重厚すぎなのかもな、と思った
最近、自分もプログラミング言語を作ってみたけど、うっかり作れるものでは全然なかった。うっかりとか、ちょっと(かなり)盛ったと言ってほしい。
もー、変態なんだから
うっかりね
Qiitaアカウントを見た感じ、自作コンパイラの解説記事を書いたが願望に反して全然広まらなかったので「世界最強」みたいな誇大広告を混ぜて宣伝することにした、という流れ(誇大広告撲滅委員会)
"外部宣言(declare)された標準関数はLLVMにとってブラックボックスですが、IR内部関数として定義することで、Clangの最適化パス(-O2)によって自動でインライン展開やSIMDベクトル化が行われます"
"多くのWasmコンパイラが肥大化する最大の要因は、言語ランタイムが暗黙のうちに要求するC標準ライブラリ(printf、memcpy、strlen、strcmp など)にあります"
Wasmはもっと手軽にCPU BoundなJSメソッドの置き換え目的に使えるようにならないかなぁ。自分にとっては進化の方向性が右斜め上に感じることしばしば
free: (ptr) => {}, // 解放しない, this.heapPtr += (s + 7) & ~7; // 単調増加 → DoSだな。あと「フォームのバリデーション」や「軽いパーサー」程度なら、そもそも素のJSで書いた方が依存も生成物も少ないという事実が
最小バイナリサイズのwasmを作りたいならEmscripten(clang)が現状最強の認識。あと、memcpyを例に出すのは不適切でmemory.copyを使えばwasm上は1命令で済む
1. libc(C標準ライブラリ)の徹底的なセルフホスト化 2. スライス構造による $O(1)$ 文字列処理
“スライスや文字列の扱いやすさは最高だが、GCとスケジューラが丸ごと同梱されるため、最小構成でも2〜3MBに膨らむ。”