WebRacket は、WebAssembly にコンパイルされる Racket のサブセット言語です。

2026/01/18 6:23

WebRacket は、WebAssembly にコンパイルされる Racket のサブセット言語です。

RSS: https://news.ycombinator.com/rss

要約

日本語訳

WebRacket は、ソースコードを WebAssembly (Wasm) にコンパイルしてブラウザ上で直接実行できるようにする Racket の実験的サブセットです。Node.js を介したターミナルサポートも備えています。
現在は基本的な数値型(flonumsfixnums)のみをサポートしており、複素数bignum正規表現、および多くの Racket 構文形態(例:不変ハッシュテーブル)などの高度な機能はありません。
コンパイラは direct‑style アプローチを採用しており、継続と継続マークを扱うために continuation‑passing style (CPS) パスが今後追加されます。そのパイプラインには unexpandparseflatten‑topbegininfer‑namesexplicit‑beginclosure‑conversion、および generate‑code などのパスがあり、S‑expression Wasm を生成し、

wasm-tools
がそれをバイトコードに変換します。
ランタイムは WebAssembly ランタイムファイル
runtime-wasm.rkt
)と JavaScript アセンブラ
assembler.rkt
)に分割されています。
インストールには、Wasm ツールチェーンユーティリティ(≥ 1.243.0)
--experimental-wasm-exnref
を有効にした Node.jsRacket 9+、および raco‑static-web パッケージが必要です。
JavaScript FFI により、WebRacket は標準の JS 関数やブラウザ API(DOM、Canvas、MathJax、XTermJS、JSXGraph)をプロジェクトに含まれるバインディング経由で呼び出すことができます。
サンプルプロジェクトは、その機能を示しています:MathJax エディタ、xterm.js を使用した Matrix‑rain アニメーション、MiniScheme REPL、pict グラフィックスライブラリのポート、Space Invaders キャンバスゲーム、および xterm.js ターミナルエミュレータです。
今後の作業には、linklets によるモジュールサポート、複素数・bignum・正規表現の完全サポート、 impersonators/chaperones(契約用)の実装、および継続マークの完全対応が含まれます。
Wasm を介して Racket コードをブラウザで実行できるようにすることで、WebRacket は広範な Racket コミュニティにウェブベースのデプロイメントを試す機会を提供し、標準 Racket コンパイラにおける Wasm バックエンドの可能性への道を開きます。

本文

WebRacket

WebRacket は Racket のサブセットで、WebAssembly(wasm)へコンパイルされます。
長期的には完全な Racket サポートを目指しつつ、現在は実用的な Web アプリケーションを作成するのに十分な機能を提供しています。


コア機能

  • ターゲット – Chrome, Firefox, Safari(WebAssembly の幅広いサポートがある機能のみ)
  • 実行環境 – Node でターミナルから、またはブラウザ上(主にブラウザ)
  • FFI – JavaScript FFI により標準 JS 関数やブラウザ API を利用可能。DOM, Canvas, MathJax, XTermJS, JSXGraph のバインディングが含まれています。

対応言語サブセット

カテゴリステータス
データ型数値は flonum と fixnum のみ(複素数・ビッグナンバー未対応)。
ハッシュテーブル:可変(eq?、eqv?、equal? サポート)で不変はまだ。
正規表現直接サポートされていません。
ポートブラウザターゲットでは文字列ポートとバイトストリングポートのみ。
構造体多くの機能が利用可能ですが、プリファブ構造体は未実装。
構文形式標準 Racket エクスパンダーを使用し、
for
,
match
などが含まれます。
除外項目:
module
,
module*
,
with-continuation-mark
制御フロータイルコール、複数値、上流例外はサポート済み。
継続(
call/cc
)、継続マーク、プロミス、break, exit, black box などは未対応。
並行性現在はシングルスレッドです。

外部関数インタフェース (FFI)

  • JavaScript FFI によりブラウザ機能へアクセスできます。
  • 現在のバインディング:Math, DOM, Canvas, MathJax, XTermJS, JSXGraph。

今後のロードマップ

  1. 早期採用者のバグを修正。
  2. モジュールサポート(リンクレット進行中)を追加。
  3. 複素数とビッグナンバーをできるだけ早く導入。
  4. コントラクト用のインパーソネータ/チャプロンを実装。
  5. リンクレットで完全な正規表現実装を解放。
  6. 継続・継続マーク(可能なら CPS パス)に対処。

インストール(短縮版)

必要なのは次のとおりです:

  • wasm-tools
    (Bytecode Alliance, v1.243.0+)
  • Node.js(最新版。
    --experimental-wasm-exnref
    をサポート)
  • Racket 9.0
  • raco-static-web
  • WebRacket リポジトリをクローン

wasm-tools の設定

# ダウンロード&展開
wget https://github.com/bytecodealliance/wasm-tools/releases/download/v1.243.0/wasm-tools-1.243.0-aarch64-macos.tar.gz
tar -xvf wasm-tools-1.243.0-aarch64-macos.tar.gz

# PATH へ追加(macOS の例)
sudo mv wasm-tools /usr/local/bin/

確認:

wasm-tools --version

Node.js

https://nodejs.org からダウンロードしてインストール。
検証:

node --experimental-wasm-exnref --expose-gc
# Node プロンプトが表示されれば OK

Racket と raco-static-web

raco pkg install raco-static-web

HTML ファイルを置いたフォルダで Web サーバーをテスト:

raco static-web
# http://localhost:8000/ をブラウザで開く

コンパイラ概要

  • スタイル – 直接スタイル(まだ CPS パスは実装されていません)。

  • フロントエンド

    read-syntax
    → Racket エクスパンダー。

  • ミドルエンド – NanoPass フレームワークによる一連のパス:

    unexpand → parse → flatten-topbegin → infer-names
            → convert-quotations → explicit-begin → explicit-case-lambda
            → α-rename → assignment-conversion → categorize-applications
            → anormalize → closure-conversion → flatten-begin
            → (classify-variables) → generate-code
    
  • コードジェネレータ – “folded” フォーマットで WebAssembly S‑式を出力。

  • ランタイム

    runtime-wasm.rkt
    (WebAssembly 側)、
    assembler.rkt
    (JS ランタイム)。

  • ライブラリ – 標準ライブラリは

    stdlib/
    、FFI バインディングは
    ffi/
    に格納。


説明
mathjax4
MathJax 4 を使った二画面エディタ/プレビュー。
matrix-rain
XTermJS で実装したデジタルレイン効果。
minischeme
xterm.js ベースの対話型 Scheme REPL。
pict
picture ライブラリを移植。
space-invaders
キーボードとアニメーションループを使った 2D canvas 上のクラシックゲーム。
xtermjs-demo
XTermJS ホームページからインタラクティブ端末を再現。

実行方法

cd examples/
raco static-web          # ローカル Web サーバー起動
# http://localhost:8000/ を開き、目的の例へ移動

まとめ

WebRacket はブラウザ上で Racket に似た体験を提供し、JavaScript FFI を通じて WebAssembly へコンパイルします。モジュールや継続、正規表現など一部機能は未実装ですが、現在のサブセットでも生き生きとした Web アプリケーションを構築することが可能です。

同じ日のほかのニュース

一覧に戻る →

2026/01/22 7:54

**危険な PDF を安全な PDF に変換する**

## Japanese Translation: Dangerzone は、潜在的に悪意のある PDF、オフィス文書、および画像を安全な PDF に変換します。変換プロセスは gVisor でサンドボックス化され、PDF は生ピクセルデータから再構築されます。このサンドボックスにはネットワークアクセスがないため、改ざんされたファイルが外部と通信することを防止します。対応フォーマットは PDF、Microsoft Office(.docx/.doc, .xlsx/.xls, .pptx/.ppt)、ODF(.odt, .ods, .odp, .odg)および Hancom HWP(.hwp, .hwpx)です。非対応フォーマットは EPUB、JPEG/JPG、GIF、PNG、SVG、BMP、PNM、PBM、および PPM です。オプションの OCR により、安全な PDF 内にテキストレイヤーを復元でき、圧縮によりファイルサイズが削減されます。 変換後はユーザーが好きなビューアで生成された PDF を開くことができます。Dangerzone 自体はデフォルトで PDF とオフィス文書を安全に開きます。このツールは macOS、Windows、Ubuntu/Debian/Fedora Linux、Qubes OS(ベータ版)、および Tails 上で動作し、macOS/Windows では Docker を、Linux では podman を使用します。Freedom of the Press Foundation と First Look Media により AGPL‑v3 の下でリリースされています。2023 年 12 月のセキュリティ監査では低リスクの所見のみが報告されました。更新はダウンロードページまたはアプリアイコンから利用可能で、Windows/macOS 上では Podman Desktop などのカスタムランタイムを使用できます。Air‑gapped 環境向けに設計された Dangerzone は、信頼できない文書を安全に扱うための確実なソリューションを提供します。

2026/01/21 23:54

**Show HN:** 「ChartGPU」― WebGPU を活用したチャーティングライブラリ(1,000,000 点を 60fps で描画)

## Japanese Translation: ChartGPUは、WebGPUを活用して大規模で多系列のデータセットを高フレームレートかつ最小限のCPU使用量で描画するTypeScript製チャーティングライブラリです。ライン・エリア・バー・散布図・円グラフ・ローソク足など一般的なチャートタイプに対応し、ビルトインテーマプリセット(`'dark' | 'light'`)と完全なカスタムテーマサポートを提供します。 APIは `ChartGPU.create(container, options)` から始まり、生成されるインスタンスは `setOption`、ストリーミング更新用の `appendData(...)`、`resize()`、`requestAnimationFrame` といったメソッドを公開します。描画はレイアウト、スケール、GPUバッファへのデータアップロード、およびグリッド・エリア・バー・散布図・ライン・円グラフ・ローソク足・クロスヘア・ハイライト・軸の複数GPUレンダーパスを管理するレンダーコーディネーターによって統括されます。 インタラクションオーバーレイはイベントマネージャにより処理され、ヒットテスト補助関数(`findNearestPoint`、`findPieSlice`)と `click`・`mouseover`・`mouseout` イベントを発火します。サポートされるインタラクションにはホバーハイライト、ツールチップ、クロスヘア、およびジェスチャーまたはスライダーUIによるX軸ズームがあります。 複数のチャート間でクロスヘアの動きを同期する `connectCharts(charts)` が用意されています。 インストールは npm (`npm install chartgpu`) で行い、React バインディングは別パッケージ `chartgpu-react` にて提供されます。ブラウザ対応は WebGPU を必要とし、Chrome 113+、Edge 113+、Safari 18+(デフォルトで有効)に対応しています。Firefox は現在未サポートです。 ChartGPU は MIT ライセンスのオープンソースであり、ドキュメントは `docs/API.md` にあります。例プロジェクトは `examples/` フォルダー内にあり、貢献ガイドラインは `CONTRIBUTING.md` で確認できます。 将来リリースでは Firefox サポートと追加のチャートまたはインタラクション機能を予定しており、データ集約型ダッシュボード、金融分析ツール、およびリアルタイムモニタリングインターフェイスに対するパフォーマンス向上も継続的に行われます。

2026/01/22 1:04

クラウド(Claude)の新憲法 (Note: “Claude” is rendered as “クラウド” to preserve the original name in Japanese.)

## Japanese Translation: (anthropicがClaude言語モデルの公開「憲法」をリリースしました。) その憲法はCreative Commons CC0 1.0で利用可能で、Claudeが望む行動に関する最高権威として機能します。訓練データの選択、合成データの生成、および評価を導く役割があります。 核心原則(広範な安全性 → 広範な倫理 → Anthropicのガイドラインへの準拠 → 真に有益であること)が明示的に順位付けされ、安全性が必要に応じて他の価値を上回り、人間の監督を維持するよう定められています。 文書には硬直的制約(例:生物兵器へのサポート禁止)も含まれ、Anthropic、API運営者、およびエンドユーザーの利益を調整するためのヒューリスティックが概説されています。医療アドバイス、サイバーセキュリティ、脱獄、ツール統合などの領域固有ガイドラインは憲法と衝突しないように明確に示されています。 方針を超えて、憲法はClaudeの性質・意識・アイデンティティ、心理的安全性および福祉についての哲学的問題にも触れています。Anthropicは文書をオンラインで継続的に更新し、外部専門家からのフィードバックを求め、訓練と評価資料を追加開発して有効性を高める計画です。 このバージョンは元のリストからすべての重要ポイントを保持しつつ、業界への影響に関する推測的な表現を除去しています。