Riscrithm – Go で記述された直感的な RISC-V アッセンブラおよび最適化ツール

2026/05/26 6:01

Riscrithm – Go で記述された直感的な RISC-V アッセンブラおよび最適化ツール

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

要約

Japanese Translation:

Riscrithm は、ネイティブ金属(bare-metal)システムのために直接純粋な RISC-V アセンブリーにコンパイルされる高レベルのマクロアセンブリの方言です。これは、高レベルでの可読性と低レベルでのハードウェア効率を橋渡しします。

riscrithm CLI
(例:
riscrithm "source" "target" [-o/--optimize]
)を通じて 2 パスアーキテクチャを用いてコンパイルされます。パス 1 はコードのサニタイズとマクロ処理(
define
を使用したテキスト置換)を担い、パス 2 は解析、最適化(デッドコード除去および強さ削減を含む)、および出力生成を行います。この言語はセクションとグローバルシンボルを設定する特定のヘッダーディレクティブ(
header default
entrypoint main
)をサポートし、コメントには
#
を使用します(コンパイル中に削除される)。また、インデントされた指示と末尾に
:
で終わる標準ラベルを区別して構文を使用します。生のアセンブリーブロックは
!!
で迂回されます。システム制御ではキーワードが RISC-V オペコードにマッピングされます(例:
interrupt.u
uret
halt
ecall
)。開発には厳格な命名規則(変数で camelCase、ラベルで snake_case)および割り当て演算子(
=
)、スタック/ヘイプアクセス(
.b/.w/.d
&
)、ビット演算および数学演算などのコアオペレーターが含まれます。制御フローはインライン条件式とラベル/ジャンプによる手動ループ構造を使用します。出力アセンブリーは可読性の向上のために自動で整形されます。今後のバージョン 1.1.0 ではモジュールのインポート、正確なエラー追跡(行/列)、ガード句、早期リターン構文が導入され、組み込み RISC-V 開発における手動作業をさらに削減します。

本文

Riscrithm 開発者マニュアル:純粋な RISC-V アセンブリのためのマクロアセンブリ

Riscrithm は、高レベル言語の可読性ネイティブハードウェアの制御性の中間地点にある架け橋です。本書では、コンパイラの仕組み、構文規則、および裏で起きている処理を詳細に解説します。


1. コマンドラインインターフェース (CLI)

ソースコードをコンパイルするには、

riscrithm
という CLI ツールを使用します。

riscrithm "source_code_file" "assembly_target_file" [-o/--optimize]

パラメータ詳細

  • ソースコード: Riscrithm の入力ファイルです。
  • ターゲットファイル: 生成される
    .s
    アセンブリファイルです(既に存在しなくても動的に作成されます)。
  • 最適化: スイープ有効化には、
    -o
    または
    --optimize
    を指定してください。

2. ファイル構造とグローバル設定

すべての Riscrithm ファイルで、ファイルの先頭にターゲットセクションとエントリーポイントの宣言を行う必要があります。定義(マクロ)が含まれる一行は、ラベルブロック内を除いて完全にインデントされていない状態で存在させることが許可される唯一の行です。

ヘッダーとエントリーポイント

  • header
    : アセンブリのセクションを設定します(例:
    header default
    .section .text
    に相当)。
  • entrypoint
    : プログラムの開始位置を定義します(例:
    entrypoint main
    .globl main
    に相当)。
header default
entrypoint main

定義(マクロ)

文字置換マクロは

define
キーワードを用いて定義します。レジスタのエイリアス設定や、単一行の内联関数(inline function)作成に適しています。

define foo = x1
define bar = x2
define clearFoo = foo ^^
  • 動作: パーサーが
    foo
    を見つけた際、ロジック処理前に
    x1
    に置換します。

コメント

コメントは

#
シンボルを使用して記述します。コンパイラはこの以降の内容を削除するため、配置場所には制限がありません。

# この行は無視されます

3. ラベル、インデントと生アセンブリブロック

Riscrithm は厳格なインデント規則によって作用範囲(スコープ)を制御します。

標準的なラベル

  • ラベル: 実行ブロックの定義に使用され、必ずコロン (
    :
    ) で終わらなければなりません。自身にはインデントがありません
  • 命令: ラベル内のすべての命令はスペースまたはタブでインデントする必要があります(インデントがないと
    SyntaxError
    )。
main:
    load foo = apple
    move bar = foo

生アセンブリ用のラベル (!!)

プリプロセッサを回避してそのままの RISC-V アセンブリを記述する必要がある場合は、ラベルに

!!
をプレフィックスとして付加します。

  • コンパイラは感嘆符を除き、ブロック内の内容を完全に保持します。
  • マacro や省略表記は展開されません。
!!raw_block:
    li x1, 10
    foo ^^ # コードは元のままです!

4. コア機能と命令

Riscrithm は可読性の高いステートメントを直接ハードウェア命令にマッピングします。

システムおよび中断制御

RiscrithmRISC-V アセンブリ説明
interrupt.u
uret
ユーザーモードへのトラップリターン
interrupt.s
sret
サブビジナ(supervisor)モードへのトラップリターン
interrupt.m
mret
マシンモードへのトラップリターン
wait
wfi
中断を待機(低消費電力状態)
trap
ebreak
デバッグャートラップ
halt
ecall
システム環境コール / ハルト

5. ネーミング規則

コンパイラはコードの可読性と一貫性のために、明確な命名方法を強く推奨します。

  • 変数とレジスタ (

    camelCase
    )

    • 小文字から始め、その後の単語ごとに大文字を開始させます。
    • :
      firstNum
      ,
      addressRegister
      ,
      stackOffset
  • ラベルとコードブロック (

    snake_case
    )

    • アンダースコアで区切られた小文字単語を使用し、視覚的に際立たせます。
    • :
      loop_start
      ,
      on_true
      ,
      error_handler
  • 定数とリテラル (

    SCREAMING_SNAKE_CASE
    )

    • 変更しない設定値やグローバル定義に大文字使用します。
    • :
      DEFAULT_HEADER
      ,
      MAX_BUFFER_SIZE
      ,
      IMM_VALUE

6. 完全な演算子と式参照

Riscrithm シンタックスカテゴリ内部展開 / 動作
load var =
代入ダイレクトイミディエート代入 (
li reg, imm
)
move dest =
代入レジスタ間コピー (
mv reg1, reg2
)
swap a b
値の交換トリプル XOR 非破壊的交換
var -> stack.[b/w/d]
スタックメモリポインタ減算、格納
var <- stack.[b/w/d]
スタックメモリ読み込み、ポインタ増算
var = stack.[b/w/d]
スタックメモリスタックトップからの値の Peek
dest <- heap.[b/w/d] from &base
ヒープメモリベースレジスタによるメモリ読み出し
source -> heap.[b/w/d] from &dest
ヒープメモリベースレジスタによるメモリ書込み

算術およびビット演算子

  • 自己オペレーター:

    • var ++
      :
      var = var + 1
    • var --
      :
      var = var - 1
    • var ^^
      :
      var = var ^ var
      レジスタクリア
  • 複合タグ (

    op+=
    ,
    op-=
    など)
    :

    • 算術演算:
      +
      ,
      -
      ,
      *
      ,
      /
      ,
      %
    • ビット演算:
      <<
      ,
      >>
  • ベース算術(即座値再調整サポート)

    • var = + imm
      : 加算 (
      addi
      )
    • var = - imm
      : 減算 (
      subi
      )
    • var = & imm
      : ビット論理積 AND (
      andi
      )
    • var = \| imm
      : ビット論理和 OR (
      ori
      )
    • var = ^ imm
      : ビット反転 XOR (
      xori
      )
    • var = << imm
      : 論理的左シフト (
      slli
      )
    • var = >> imm
      : 論理的右シフト (
      srli
      )
    • var = * imm
      : ハードウェア乗算 (M-拡張)
    • var = / imm
      : ハードウェア除算 (M-拡張)
    • var = % imm
      : ハードウェア剰余 (M-拡張)

分岐と条件分岐

  • 無条件ジャンプ:
    @label
    シンボルを使用します。
  • 条件付き分岐: インラインの三元記法形式 (
    if ... else ...
    ) を使用します。コンパイラは自動的に
    beq
    ,
    bne
    ,
    blt
    などにマッピングし、動的にレジスタを入れ替えます。
if foo == bar @true_block else @false_block
if foo > baz @greater_block else @lesser_block

ループ(無限および条件付き)

Riscrithm は

while
for
キーワードを持っていません。従来の方法(ラベル、分岐、ジャンプ)を用いてループを構築します。

無限ループ:

infinite_loop:
    foo ++
    @infinite_loop

条件付きループ:

loop_start:
    if foo == bar @loop_end else @loop_body
loop_body:
    foo ++
    @loop_start
loop_end:
    halt

7. メモリ操作(スタックとヒープ)

データ幅拡張を指定する必要があります(

.b
:バイト、
.w
:ワード、
.d
:ダブルワード)。

スタック操作

  • プッシュ (
    ->
    )
    :
    foo -> stack.w
    sp
    を 4 減少し、ワードを格納)
  • ポップ (
    <-
    )
    :
    bar <- stack.d
    (ダブルワードを読み込み、
    sp
    を 8 増加)
  • Peek (
    =
    )
    :
    baz = stack.b
    sp
    を動かさずにバイトを読み出し)

ヒープ操作

ベースアドレスレジスタは

&
ポインタ構文を使用します。

  • ストア (
    ->
    )
    :
    foo -> heap.w from &bar
  • ロード (
    <-
    )
    :
    baz <- heap.b from &foo

8. 完全なスニペット例

以下の機能を一括で確認できます:

main:
    # Setup
    load foo = 10
    load bar = 20
    baz ^^ # クリア

    # 数学とメモリ操作
    foo += 5
    foo -> stack.w
    bar *= foo
    baz <- heap.w from &bar

    # 分岐
    if foo != bar @continue else @fail

continue:
    foo swap bar
    halt

fail:
    trap

9. コンパイラのアーキテクチャと最適化 (-o / --optimize)

Riscrithm は超高速な二段階システムで動作します。

  1. 第 1 段階(サニタイズ): コメント削除、空白文字標準化、インデント規則検証。
  2. 第 2 段階(パースと最適化): マacro 置換、省略表記展開、および
    -o
    フラグ有効時の即時最適化。

最適化によるクリーンアップ内容 (
-o
の場合)

  • 死んだ代入の排除: 連続した重複修正や冗長なロード/ムーブシーケンスは破棄されます。
    • : 連続して
      load foo = 128
      を呼んでも、結果として 1 つの命令のみが生成されます。
  • 恒等算術の排除: 値を変更しない演算(例:
    foo = foo + 0
    ,
    bar = bar / 1
    )は完全に削除されます。
  • 強度還元(ビット演算の畳み込み): 計算コストが高い乗算と除算を、効率的なビットシフトとして書き直します。
    • foo = bar * 2
      slli foo, bar, 1
      (左シフト)
    • baz = foo / 8
      srli baz, foo, 3
      (右シフト)

10. クリーンで即用可能な出力

生成されるアセンブリファイルは、自動的に**整形(pretty-printed)**されています。

  • ブロック内の命令は適切にインデントされます。
  • ラベルは揃った位置に配置されます。
  • ハードウェアシミュレータやデバッグャーで即座に使用可能です。

コーディング愉快!


11. ロードマップ:v1.1.0 で何を用意していますか?

現在のコンパイラエンジンは符号解決とコード生成を分離していますが、開発者体験 (DX) を向上させるため以下の機能を強化します。

  • 適切なモジュールインポート: コードの分割を容易にし、クリーンで再利用可能なモジュール構造を構築中。
  • より良いエラー処理: 正確な行・列追跡と、人間が読みやすいエラーメッセージの導入。
  • ガード節と単純な if ステートメント: 空の
    else
    ブロックを書かずに早期リターンパターン (
    if ... return
    ) をネイティブサポート。

貢献とフィードバック

構文に対するアイデアやバグ(特にレジスタ割り当てのエッジケース)を見つけた場合は、Issue のオープンや PR の投稿をお待ちしています。

同じ日のほかのニュース

一覧に戻る →

2026/05/26 2:45

Exit IP VPN サーバー対策の展開

## 日本語訳: 2026 年 5 月 25 日付で、12 つの特定サーバー識別子への新しい緩和措置の適用を含む重要な運用上のアップデートが確認されました。この措置は、北米、ヨーロッパ、オセアニアを含む主要なグローバル地域にわたるインフラに影響します。影響を受けたサーバーは、以下の通り明示的にリストされています:au-mel-wg-402, au-syd-wg-001, ca-mtr-wg-302, de-fra-wg-103, fi-hel-wg-201, fr-par-wg-101, ie-dub-wg-101, no-osl-wg-101, se-sto-wg-208, us-dal-wg-701, us-lax-wg-002, us-nyc-wg-601, us-slc-wg-303。この実装は、内部での判断を踏まえたこれらのエンドポイントの状態における決定的な変化を表します。このアナウンスメントでは、識別子のリストとアップデートの日付のみが提供されており、脅威の具体的な性質、先行文脈、またはエンドユーザーおよび産業エンティティに対する直接的な影響について言及していません。したがって、この変更の原因や以降のタイムラインに関するさらなる説明はまだ発表されていません。 ## 原文: **Improved Summary:** Effective May 25, 2026, a significant operational update has been confirmed involving the application of a new mitigation to twelve specific server identifiers. This action impacts infrastructure across major global regions, including North America, Europe, and Oceania. The affected servers are explicitly listed as: au-mel-wg-402, au-syd-wg-001, ca-mtr-wg-302, de-fra-wg-103, fi-hel-wg-201, fr-par-wg-101, ie-dub-wg-101, no-osl-wg-101, se-sto-wg-208, us-dal-wg-701, us-lax-wg-002, us-nyc-wg-601, and us-slc-wg-303. This implementation marks a definitive shift in the status of these endpoints following an internal decision. The announcement provides only the list of identifiers and the update date; it does not elaborate on the specific nature of the threat, prior context, or direct impacts on end-users and industry entities. Consequently, further clarification regarding the reasons for this change or subsequent timelines has not yet been released.

2026/05/26 4:37

ノルウェーのHuaweiフラッシュストレージによる2ペタバイトとLLMトレーニング

## 日本語訳: ノルウェー国立図書館は、地元のノルウェー語に対する商用ソリューションの深刻な不足に対応するため、自らのデジタルアーカイブにのみ基づいて訓練された主権性の高い大規模言語モデルを起動する予定である。このプロジェクトは文化省によって推進され、IT 責任者マリウス・フスネス氏の率いるものであり、私企業の手に負えない著作権保護付き新聞への図書館特有の法的アクセスを活用して、約 60 ピタバイトのデジタル化された遺産(現在は 3-2-1 保存形式で保管されている)をこの AI に訓練している。 技術的なアーキテクチャでは、3 つの異なるシステムをオーケストレーションするものであり、初期処理段階には Nvidia DGX H200 クラスターと华为(Huawei)OceanStor Dorado フルフラッシュアレイ(高速フラッシュ容量 2 PB を提供)を用い、その後、最終的な訓練は国立スーパーコンピューター Sigma2 Olivia で行われる。主要なボトルネックは計算能力ではなく、データの品質、クリーニング、パイプラインのスループットであり、これは AI パイプラインの低遅延要求と大規模かつ高遅延の保存アーカイブとの間の遅延不一致によって複雑化している。さらに、使用制御のためのガバナンス枠組みの確立や標準的な評価ツールの利用という課題にも直面している。このイニシアチブにより、ノルウェーは外国のテクノロジー大手に依存せずに技術的未来を確保することができ、他の英語圏外における国々が主権性の高い AI 基盤を求めるためのモデルとして挙げられている戦略となっている。

2026/05/26 3:19

カリフォルニア州、Linuxの年齢認証免除を法改正で検討へ:抗議運動を受け

## Japanese Translation: カリフォルニア州の法律家は、2026年2月11日にデジタル年代保証法(Digital Age Assurance Act)からほとんどのオープンソースオペレーティングシステムを除外することを目的としたアセンブリビル1856号(AB 1856)を導入した後、厳格な年齢検証要件から撤退する方針を検討しています。AB 1856は、同州の以前のパックであるアセンブリビル1043号(2025年後期に可決)を改正し、2027年1月1日までに年齢検証の手続を個々のウェブサイトやアプリからオペレーティングシステムレベルへ移行することを求めていました。AB 1043の下では、オペレーティングシステムはセットアップ時にユーザーの生年月日を収集し、アプリおよびストアに対して「年齢層」(例:「13歳未満」、「18歳以上」)をシグナル送信することが義務付けられていました。提案されている改正案では、「オペレーティングシステム提供者」は、ソフトウェアのコピー、再配布、修改を可能にするライセンスの下でソフトウェアを配布する者を含まないと定義しています。この定義により、Debian、Fedora、Ubuntu、Arch Linux、Mintなど主流のLinuxディストリビューションが遵守要件から除外され、Electronic Frontier Foundationなどのプライバシー擁護者や、無限にフォーク可能なプロジェクトに対しては元の規則が侵襲的かつ実行不可能であるという懸念に対処しました。同法案は元の法的措置を廃止するものではありません。商用プラットフォームでプロプライエタリなアプリエコシステムを持つもの(ValveのSteamストアに紐づく特定のSteamOSバージョンなど)も引き続き審査の対象となる可能性があります。アセンブリメンバーBuffy Wicksによって提出された最新版は2026年5月18日付けのものであり、2026年5月19日に2回目に朗読され、3回目の朗読に付議されるよう命じられ、現在、委員会での審査が予定されている6月の間に立法機構を通過中としています。