<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ZAX (Zatools Arithmetic Expression) :: kb10uy&#39;s Various Tools</title>
    <link>https://zatools.kb10uy.dev/zax/index.html</link>
    <description>ZAX (Zatools Arithmetic Expression) は RPN (逆ポーランド記法) によるスタックベースの数式・ベクトル処理エンジンです。&#xA;思いついちゃったから作っちゃいました。&#xA;概要 ZAX は、Zatools 内の一部の数値処理をより細かくカスタマイズするために導入されています。 基本的には上級者向けの機能であり、多くのユースケースは既定のプリセットでカバーされるはずです。 またパフォーマンス上の理由から、既定のプリセットの自体を ZAX 上に構築することはありません。&#xA;コード例 基本 ZAX Code:&#xA;; @uv0: float4 @uv0 #xy 2.0 * 0.1 0.2 vec2 + .. 0.0 0.0 vec4 HLSL Equivalent:</description>
    <generator>Hugo</generator>
    <language>ja-jp</language>
    <lastBuildDate>Fri, 04 Sep 2026 23:00:00 +0900</lastBuildDate>
    <atom:link href="https://zatools.kb10uy.dev/zax/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>思想</title>
      <link>https://zatools.kb10uy.dev/zax/model/index.html</link>
      <pubDate>Fri, 04 Sep 2026 23:00:00 +0900</pubDate>
      <guid>https://zatools.kb10uy.dev/zax/model/index.html</guid>
      <description>位置づけ Zax が解くべき問題は「頂点数ぶん繰り返し評価される小さな数式を、ユーザーがインスペクタの 1 行に書けるようにする」ことである。この用途からくる要求は次の 3 つ。&#xA;入力は 1 個の値を返す純粋な式である。文も宣言も要らない。 評価は数万回単位で繰り返される。したがって実行時の型判定・分岐・確保は避けたい。 失敗はビルド時までに分かってほしい。頂点 12345 番で初めて型エラーが出るのは論外。 結果として Zax は「コンパイル時にすべての型を解決し、実行時は型タグ付きの固定長スタックを 舐めるだけ」という形に落ち着いている。&#xA;設計判断 判断 理由 RPN を採用 パーサが要らない。優先順位・結合性・括弧の設計を丸ごと回避でき、字句解析器の出力をそのまま線形に走査すればコード生成が終わる 式のみ (文なし) プログラム全体が「変数の組から 1 値への写像」になり、要素ごとの独立評価 = 並列化が自明になる 静的型付け 実行時型ディスパッチを消せる。命令が自分の引数型・結果型を持つため、評価器の内側ループに型検査が一切ない ホストが変数を宣言 式の側が新しい名前を作れない。どの属性が参照されたかがコンパイル結果から静的に分かるので、ホストは必要な入力だけを用意できる スカラ・4 次元までのベクトルのみ すべての値が float4 1 個に収まり、値表現が固定長になる。SIMD 演算をそのまま使える 最適化しない 式は数トークンから数十トークン。コンパイル時間と実装の単純さを優先し、定数畳み込みも共通部分式除去も行わない (定数プールの重複排除のみ) 意図的に持たない機能 分岐・ループ・ユーザー定義関数・変数への代入・局所束縛・再帰・行列型・真偽型・文字列型・ 配列添字アクセスはいずれも存在しない。</description>
    </item>
    <item>
      <title>処理系実装</title>
      <link>https://zatools.kb10uy.dev/zax/implementation/index.html</link>
      <pubDate>Fri, 04 Sep 2026 23:00:00 +0900</pubDate>
      <guid>https://zatools.kb10uy.dev/zax/implementation/index.html</guid>
      <description>パイプライン source (string) | ZaxTokenizer.TryTokenize 字句解析 (空白分割 + 分類) v List&lt;ZaxToken&gt; | ZaxCompiler.TryCompile 型スタックによる抽象解釈 + コード生成 v ZaxProgram { Instructions, Constants, Variables, StackSize, ResultType } | +- ZaxEvaluator.Evaluate マネージド 1 回評価 (エディタ UI 用) +- ZaxNativeProgram + ZaxEvaluateJob Burst / IJobParallelFor で N 要素一括評価 字句解析器 ZaxTokenizer はスキャナではない。空白と ; でソースを切り刻み、断片ごとに種別を判定するだけの 実装であり、トークンの内部構造 (+ と 12 の連結など) は一切見ない。</description>
    </item>
    <item>
      <title>構文</title>
      <link>https://zatools.kb10uy.dev/zax/syntax/index.html</link>
      <pubDate>Fri, 04 Sep 2026 23:00:00 +0900</pubDate>
      <guid>https://zatools.kb10uy.dev/zax/syntax/index.html</guid>
      <description>プログラムの形 プログラムはトークンの列であり、それ以上の構造を持たない。実行後にスタックへちょうど 1 個の値が 残らなければならない。0 個なら EmptyExpression、2 個以上なら ExtraOperands になる。&#xA;トークン分割 空白 (char.IsWhiteSpace) は区切り文字であり読み飛ばされる。 ; からその行の末尾 (\n) まではコメント。 それ以外の位置から、空白または ; が現れるまでを 1 トークンとして切り出す。 切り出した文字列を 3.3 節の順序で分類する。 つまり トークンの区切りは空白 (とコメント) だけである。1+2 は 3 トークンではなく 1+2 という 1 個の不正トークンになる。1;comment は 1 の直後にコメントが来た扱いになる。&#xA;分類の順序 切り出した文字列 t は次の順に判定される。先にマッチしたものが勝つ。</description>
    </item>
    <item>
      <title>演算子</title>
      <link>https://zatools.kb10uy.dev/zax/operators/index.html</link>
      <pubDate>Fri, 04 Sep 2026 23:00:00 +0900</pubDate>
      <guid>https://zatools.kb10uy.dev/zax/operators/index.html</guid>
      <description>記号で書く演算子と、後置で作用する swizzle・unpack・スタック操作語をまとめる。 記号演算子にはすべて英字の別名があり、どちらで書いても同じ命令になる。&#xA;算術 記号 別名 引数 クラス 意味 + add a b Ei a + b - sub a b Ei a - b * mul a b Ei 成分ごとの積 (内積ではない) / div a b Ef a / b (常に float) // idiv a b Io 整数除算。両辺が int でなければ型エラー。b = 0 なら 0 % mod a b Ei int なら剰余 (b = 0 なら 0)、float なら fmod (符号は被除数に従う) 単項マイナスは演算子ではなく関数 neg である (5.1 節)。</description>
    </item>
    <item>
      <title>関数・定数</title>
      <link>https://zatools.kb10uy.dev/zax/functions/index.html</link>
      <pubDate>Fri, 04 Sep 2026 23:00:00 +0900</pubDate>
      <guid>https://zatools.kb10uy.dev/zax/functions/index.html</guid>
      <description>「引数」列は RPN での並び順 (a b f なら a が第 1 引数)。「クラス」は 3.9 節を参照。 記号を持つ演算子 (+ &lt; など) は演算子にまとめてある。&#xA;算術・丸め 名前 引数 クラス 意味 neg a Ei -a abs a Ei 絶対値 sign a Ei -1 / 0 / +1 min a b Ei 成分ごとの最小 max a b Ei 成分ごとの最大 clamp x lo hi Ei x を [lo, hi] に丸める saturate x Ef clamp(x, 0, 1) floor ceil round x Ef 床・天井・最近接丸め frac x Ef x - floor(x) 指数・対数 名前 引数 クラス 意味 sqrt x Ef 平方根 rsqrt x Ef 1 / sqrt(x) pow a b Ef a の b 乗 exp exp2 x Ef e^x / 2^x log log2 log10 x Ef 自然対数 / 底 2 / 底 10 三角関数 名前 引数 クラス 意味 sin cos tan x Ef 弧度法 asin acos atan x Ef 逆関数 atan2 y x Ef atan2(y, x)。第 1 引数が y degrees x Ef 弧度から度 radians x Ef 度から弧度 補間 名前 引数 クラス 意味 lerp a b t Ef a + t (b - a)。t のクランプはしない step edge x Ef x &gt;= edge なら 1、そうでなければ 0 smoothstep edge0 edge1 x Ef t = saturate((x - edge0) / (edge1 - edge0)) として 3t^2 - 2t^3 引数順を間違えやすい。lerp は始点・終点・係数、step は閾値が先、 smoothstep は下端・上端・入力である。</description>
    </item>
  </channel>
</rss>