🪃
Uiua 言語で実装する http サーバ
の続き。
Uiua は組み込みで Audio や 画像 をサポートしている。また TCP ソケットを扱うこともできるので HTTP のサーバを書くこともできる。公式のリポジトリにサンプルがあるので動かしてみる。
コメントに従って clone してきたリポジトリの site
フォルダで trunk を実行する。
trunk build --release
ちなみに trunk は Rust で書いた wasm ウェブアプリケーションをコンパイルやバンドルするものらしい。 webpack とかに近そう。 JS だけじゃなくて wasm バイナリも生成するけど。
エラー:
Compiling wasm-bindgen v0.2.87
error[E0463]: can't find crate for `core`
|
= note: the `wasm32-unknown-unknown` target may not be installed
= help: consider downloading the target with `rustup target add wasm32-unknown-unknown`
コンパイルターゲットが足りないらしい。
$ rustup target list --installed
aarch64-apple-darwin
x86_64-unknown-linux-gnu
x86_64-unknown-linux-musl
たしかに。
追加する。
$ rustup target add wasm32-unknown-unknown
info: downloading component 'rust-std' for 'wasm32-unknown-unknown'
info: installing component 'rust-std' for 'wasm32-unknown-unknown'
$ rustup target list --installed
aarch64-apple-darwin
wasm32-unknown-unknown
x86_64-unknown-linux-gnu
x86_64-unknown-linux-musl
良さそう。
再度、
$ trunk build --release
....
Compiling uiua v0.0.5 (/Users/xxxx/uiua)
Compiling site v0.1.0 (/Users/xxxx/uiua/site)
Finished release [optimized] target(s) in 1m 25s
2023-09-30T10:55:48.736405Z INFO fetching cargo artifacts
2023-09-30T10:55:49.104612Z INFO processing WASM for site
2023-09-30T10:55:49.116124Z INFO downloading wasm-bindgen version="0.2.87"
2023-09-30T10:55:51.999547Z INFO installing wasm-bindgen
2023-09-30T10:55:52.061216Z INFO calling wasm-bindgen for site
2023-09-30T10:55:52.469286Z INFO copying generated wasm-bindgen artifacts
2023-09-30T10:55:52.471213Z INFO applying new distribution
2023-09-30T10:55:52.471898Z INFO ✅ success
通った。
けど、何が生成されたのかよくわからない。 target/wasm-bindgen/release/ あたりが生成された成果物のよう。
$ cd ../
$ uiua run examples/http_server.ua
Server started
http://localhost:8080 を開くとたしかに、公式サイトと同じウェブページが表示される。
起動したほうのターミナルにはログが吐かれている。
$ uiua run examples/http_server.ua
Server started
Request:
/
Response:
3019 bytes
Request:
/styles-c706be319f8bf9ff.css
Response:
11629 bytes
Request:
/site-8907d00a07aaa18c.js
Request:
/site-8907d00a07aaa18c_bg.wasm
Request:
/uiua-logo.png
Response:
42998 bytes
Response:
28348 bytes
Request:
/DejaVuSans.ttf
Response:
757143 bytes
Response:
7096460 bytes
Request:
/favicon.ico
Response:
2303 bytes
Request:
/DejaVuSansMono.ttf
Response:
335135 bytes
コンテンツはだいたい Rust で書かれていてウェブサーバは Uiua で書いたものが動いているということか。すごいな。
感想
他の言語との大きな違いは http_server.ua
のコード眺めてもまったく内容がわからない。予約語(というか Griph)が頭に入ってないと逐一Griphホバーしてなんのトークンか確認しないといけなくて、ざっと眺めるというのがまだ自分には困難。眺めてるとコードがかわいいなというのはよく分かる。
続きは
Discussion