Amiga用コモンリッチ:クラマIGA

2026/08/13 12:05

Amiga用コモンリッチ:クラマIGA

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

要約

Japanese Translation:

CL-Amiga は、AmigaOS、MorphOS、macOS、Linux で外部ランタイム依存(LLVM や libffi など)を必要としない自立型実装を提供することで、Common Lisp に大きな進歩をもたらします。その核には、タグ付き 32 ビット値を採用し、効率的なコンパacting ガーベージコレクタを搭載したポータブル C バイトコード仮想マシンがあり、68k から PowerPC アーキテクチャにかけて一貫した動作を保証します。システムは、パックされたバイトベクトル、バルク I/O、プリコンパイル済みのブートイメージによりメモリー効率を最適化するとともに、ネイティブバインディングを通じて Intuition、Graphics、GadTools などの特殊な Amiga GUI ライブラリ(ウィンドウ管理やビッターによる合成など)への直接アクセスを可能にします。開発者向けの利点としては、ASDF や Quicklisp とシームレスに統合でき、インスペクタ、再起動機能付きのデバッガー、バイトコードおよびネイティブ m68k アセンブリ用のディスアッセンブラー、コア部での完全な ANSI 準拠など、堅牢なツール群を備えています。パフォーマンス向上は、AmigaOS では JIT コンプアイラーによるもの(sum-to ループなどで 20 倍の高速化を実現)で、MorphOS では PPC VM によるものでありますが、構造上のコストのため純粋な C/アセンブリより低速です。将来的には PPC ジェットコンパイラーと拡張された API サポートが予定されていますが、現在のアーキテクチャ非依存アプローチは、レガシーおよび現代的な計算エコシステムを効果的に橋渡しし、完全なハードウェアアクセスを備えた準拠した Lisp コード用の堅牢な環境を提供します。

本文

Clamiga: アミガ用コモン・リッチ実装紹介

数ヶ月にわたり取り組んできた、「Clamiga (CL-Amiga)」というプロジェクトをご紹介します。これはアミガファミリ向けのコモン・リッチ(Common Lisp)実装です。

プロジェクト概要

  • 対応プラットフォーム:
    • 68k CPU: アマギア OS 3 (クラシックな AmigaOS)
    • PPC CPU: MorphOS (ネイティブビルド)
    • 将来計画: AROS や AmigaOS 4 の対応を目指しています。
  • クロスプラットフォーム対応: macOS や Linux においても、開発・テスト環境として動作します。
  • 名の由来: 「CL-Amiga」の略称です。"Amiga"はスペイン語やポルトガル語で「友人(女性)」を意味するため、「アミガ上で動くリッチ」かつ「あなた自身の友人であるリッチ」という二重の意味を持たせています。

プロジェクトへのリンク (※本文下部参照)

コモン・リッチとは

コモン・リッチは長く愛され続けるプログラミング言語です。

  • 規格: ANSI 規格(1994 年制定)に基づくモダンな印象。古いプログラムも現代のコンパイラで動作します。
  • 主要特徴:
    • CLOS (Common Lisp Object System): オブジェクト指向システムを完備。
    • 条件処理・マクロ: 複雑な制御フローや言語拡張が容易。
    • インタラクティブ開発: イメージベースの開発スタイルにより、機能のライブ再定義が可能。

詳細な入門は「Common Lisp - Oldie but goldie」を参照してください。関数型プログラミングに興味ある方もご覧ください。

なぜ新たな実作なのか?(競合との違い)

SBCL, CCL などの優れた実装や商用製品も存在しますが、68k アミガ向けの実装はありません

  • 既存の高性能実装の課題:
    • x86-64 や ARM 等の現代的アーキテクチャに最適化されており、68k バックエンドがありません
    • メモリ使用量が数十 MB を超える場合があります。
  • Clamiga の特徴:
    • 独立したバイトコード VM: C で実装されたポータブルコアを採用。外部ランタイム(libffi や LLVM)や追加のコンパイラ依存がありません。
    • 性能: コモン・リッチとして完結しており、C やアセンブラとの競争でも遜色ありません。
    • 機能: 数値塔(ビットベクトル、複素数など)、REPL、デバッガー、インスペクター、ソケット、スレッド、AmigaOS API など。

事前用語集

以下の技術用語を理解しておくと理解が深まります。

  • ASDF (Another System Definition Facility):
    • コモン・リッチの事実上の標準ビルドシステム(Gradle のようなもの)。依存関係やバージョン管理を自動化します。Clamiga でも採用されています。
  • FASL (FASt Load):
    • ソースコードがコンパイルされた高速なファイル形式。Clamiga では m68k と PPC で生成した FASL ファイルの互換性を保証しています。
  • Quicklisp:
    • コモン・リッチのライブラリマネージャー。Clamiga には互換シムを同梱しており、多くのライブラリが使えます(m68020 では計算資源不足による制限がある場合があります)。

動作原理とメモリ最適化

Clamiga はスタック型の VM で実行され、アミガの制約に対応した設計がなされています。

  1. 32 ビットタグ付き値: オブジェクトモデルをコンパクトに保ちます。
  2. コンパクト GC ヒープ: マーク・アンド・スイープ方式で、ヒープのスライドコンパクト化が可能。長時間動作してもメモリー不足になりません。
  3. アーキテクチャ独立: コンパイル済みのバイトコードは m68k と PPC で共通します。

4MB リスト環境での運用

アミガではメモリが制限されますが、Clamiga は以下で効率的に動作します。

用途ヒープ推奨サイズスタック (デフォルト)
シンプルなプログラム
--heap 1M
64K
小~中規模プログラム4M (デフォルト)64K
ASDF の読み込み
--heap 11M
64K
Quicklisp + ライブラリ群
--heap 24M
128000

メモリを節約する技術:

  • パックされたバイトベクタ: 8 マスのデータ(I/O、画像など)は GC を走査せず、サイズが 4 分の 1 になります。
  • バッチシーク I/O:
    read-sequence
    等で OS キル単位で処理し、パフォーマンスを向上。
  • プリコンパイル FASL: 起動時に標準ライブラリを事前コンパイルすることで冷間ブートを大幅に短縮(約 92 秒→約 9 秒)。

m68k JIT (Just-In-Time コンパイル)

アミガ OS (68020+) では、Clamiga はバイトコードをネイティブ m6k マシンコードへ変換して実行します。

  • 透明なフォールバック: 対応していない処理は自動的にインタプリタに落ちます。
  • ベンチマーク結果:
    • 計算密集型コードで特に高いスピードアップを実現(例:sum-to で 20 倍)。
    • リアルタイムグラフィックデモでも、JIT により約 615 FPS を達成しています。
  • 設定:
    --no-jit
    オプションでバイトコード専用モードに切り替え可能です。

速度比較データ (グラフ形式の表)

ベンチマーク形状バイトコードJITスピードアップ
sum-toループ処理400 ms20 ms20.0x
struct-loop構造スロット読み込み260 ms20 ms13.0x
arith-chainバイナリ演算チェーン300 ms40 ms7.5x
call-loop関数コール340 ms240 ms1.4x

※ 最大速度は ACE BASIC の ROM コール(約 1900 FPS)に届きません。これはタグ付き値の構造的コストによるものです。

MorphOS: NG アミガ

MorphOS ビルドは、完全なネイティブ PPC バイナリです。

  • 動作: Amiga ライブラリコールを PPC コードから処理します。
  • JIT 省略: m68k のための JIT は実装されていません(ポータブル VM を使用)。ただし G4/G5 等の高速な PPC では十分高速です。
  • 互換性: FASL ファイルは、Clamiga の他のビルドと互換性があります。

Quicklisp の設定とライブラリ

Quicklisp は事実上のライブラリマネージャーとして動作します。インストールは一度きりです。

インストールコマンド

(require "asdf")
(load "lib/quicklisp-install.lisp")
(cl-amiga-ql:install)

以降のセッション

(load #P"~/quicklisp/setup.lisp")
(load "lib/quicklisp-compat.lisp")
(ql:quickload "alexandria")

確認済みおよび独自の実装を含む主要ライブラリ:

  • alexandria: 標準ユーティリティ集合。
  • fiveam: 単体テストフレームワーク。
  • FSet: 関数的コレクション(Clamdia 用の特定実装が必要)。
  • Drakma, Hunchentoot: HTTP クライアント/サーバー(SSL 対応は未実装のため注意)。

GUI バインディングの準備

;; ~/.clamigarc に設定して自動読み込み
(require "amiga/intuition")
(require "amiga/graphics")

Lisp からのネイティブアミガ GUI

require
でオンデマンドロードされる、Intuition や Graphics のバインディングを使用します。以下はウィンドウを作成し、「Hello from Clamiga!」と描画する例です。

コード例:
hello-window.lisp

;; REQUIREs は DEFPACKAGE の前にある必要があります。
(require "amiga/intuition")
(require "amiga/graphics")

(defpackage :hello-amiga
  (:use :cl)
  ;; パッケージを明示するためにニックスネームを使用
  (:local-nicknames (:it :amiga.intuition)
                    (:gfx :amiga.gfx)))
                      
(in-package :hello-amiga)

(defun main ()
  (it:with-window (win :title "Hello Amiga"
                       :width 320 :height 200
                       :idcmp it:+idcmp-closewindow+)
    (let ((rp (it:window-rastport win)))
      (gfx:set-a-pen rp 1)
      (gfx:move-to rp 20 40)
      (gfx:gfx-text rp "Hello from Clamiga!")
      (it:event-loop win
        (it:+idcmp-closewindow+ (msg) (return))))))

(main)
  • AmigaOS 内: Intuition ウィンドウが動作。
  • MorphOS 内: 同じコードで動作(API 実装の違いに対応)。

バインディングが完全ではない部分でも、手書きの 68k アセンブリを介して生レジスタベースコールが可能のため、機能制限にはなりません。

インスペクターとデバッグ環境

インスペクター

ランタイム中の値を REPL で検査できます。以下の手順でハッシュテーブルの内容を確認可能です。

  1. defvar
    で変数を初期化。
  2. キー値ペアを設定。
  3. (inspect *ht*)
    で内部構造を表示。

デバッガーとリスタート

エラーが発生した場合(無視されない限り)、デバッガーが開きます。

  • コモン・リッチ特有の**条件システム (Condition System)**を利用。
  • handler-bind
    restart-case
    を用いて、エラー発生時に自動的に処理を再開(リスタート)できます。

ディーザッセンブラ (
disassemble
)

関数の内部構造を確認可能です。バイトコード VM の場合、バイトコードアセンブリが出力されます。

COMMON-LISP-USER> (disassemble 'f)
Disassembly of F:
  1 required, 0 optional, 0 key
  ...
  0000: FLOAD        0    ; 1+
  ...

ネイティブ m68k アセンブルの確認 (
jitexpand
)

JIT コンパイルされた関数も、マクロ

jitexpand
を用いて m68k アセンブルを出力できます。

(jitexpand (defun add1 (x) (+ x 1)))

ホスト(macOS/Linux)での開発

  • SLY/Emacs連携: REPL、補完、デバッグなど快適な環境が構築できます。
  • ワークフロー: 高速なホストで開発・テストを行い、FASL ファイルをアミガで動作確認するサイクルが可能です。

ステータスとロードマップ

現在のステータス

  • コア言語の安定化完了。
  • テストスイート:スレッド、CLOS、条件処理、数値塔、FFI、JIT、GUI を網羅。
  • ANSI 適合性目標あり(現在一部通過)。

今後のロードマップ

  • AmigaOS API: より完全なインタフェースの実装。
  • MorphOS 機能: 特定機能の追加。
  • ARexx ポート: Emacs や SLIME/Sly との統合を容易化。
  • ANSI 適合性: さらなる向上。
  • インフラ強化: より高性能なインスペクター、デバッガー、PPC JIT の実装など。

結論

Clamiga は、アミガという古いハードウェアに現代的なライブラリ環境をもたらすプロジェクトです。

  • 68k アマギア上: RAM を効率的に使ったネイティブ JIT と完全なコモン・リッチ。
  • MorphOS 上: フル Quicklisp エコシステムが動作する高速 PPC ビルド。
  • macOS/Linux 上: 開発に最適な Emacs ツールリングを備えた環境。

プロジェクトは GitHub で活動中であり、バグ報告や機能リクエストを歓迎します

同じ日のほかのニュース

一覧に戻る →

2026/08/17 2:01

第 3 の世界組み込みエンジニアによる「RISC-V はもっと慎重だったべきだ」という批判への回答

## Japanese 翻訳: RISC-V は、ライセンス料という障壁によって競合他社(ARM など)が妨げられることなく、シームレスなスケーラビリティを提供するオープンアーキテクチャを有しているため、安価なマイクロコントローラー市場で支配的になると位置づけられています。Dmitry Grinberg 氏の「RISC-V:彼らはもっとよく知るべきだった」と題した論文に触発された議論において、トリニダード・トバゴ在住の組み込みエンジニアである Armstrong Subero は、Grinberg 氏の批判が発展途上国における重要な経済的現実を見落としていることを指摘しています。Grinberg 氏が安価なマイクロコントローラーへの要件を正しく特定したことは事実ですが、彼は単一の ISA(指令セットアーキテクチャ)内で低エンドおよび高エンドのニーズの両方を満たす RISC-V の能力を見積もり低估していました。Subero は、ARM が仮想メモリーといった高度な機能のためにユーザーがコアファミリーを切り替える必要(Cortex-M から Cortex-A など)とし、これには高額なロイヤルティ、販売交渉、そして多くの場合主要な小売業者での ID 検証の障壁を含む長いリードタイムが必要とされると反論します。一方、RISC-V は MMU や権限分離といった機能能力を、同じアーキテクチャ内のオプション拡張として扱い、契約上の壁を取り除いています。Subero は、アクセシビリティは単に技術的な設計のみならず経済的実現可能性にもよることを強調しています。発展途上地域へのチップの運搬コスト(他の地域で「送料無料」であるのに対して 60〜200 ドル)が、学生のアクセスを著しく妨げていると指摘します。Subero は、フラグメンテーションという主張に対し、具体的な RISC-V インプレメンテーションを挙げ反論しています:10 セントの CH32V003(RV32EC)、USB 3.2 Gen1 とイーサネットを搭載した高級二コアの CH32H417、そして Linux/seL4/Xous を実行する Baochip-1x SoC です。Subero は、このスタック全体の専門知識を習得するために運搬費だけで 100 ドル未満で達成でき、価格と入手可能性での勝利がグローバルアクセシビリティに決定的要因であることを示しています。AI 主導の需要が高騰させるにつれて ARM ライセンスコストが上昇する中、RISC-V は、発展途上国のエンジニアがアーキテクチャ的な妥協や金銭的ペナルティなしに高度な機能にアクセスすることを可能にする、より包摂的な代替案として登場しています。

2026/08/16 21:48

Claude: システムプロンプト

## Japanese Translation: 入力テキストは「Loading」文字列の繰り返しのみを含んでおり、実際のニュース、記事の内容、または物語構造を提供していません。したがって、関連する背景を確立するための日付、製品名、IT 詳細、または特定のデータポイントはいっさい含まれていません。テキストが実質的な情報を欠いているため、予測、将来の展開、または後続事件を示すことも、ユーザー、企業、あるいはより広い業界に対する含意を特定することもできません。その結果、情報提供レポートではなく汎用的なステータスインジケーターとなっています。

2026/08/17 3:48

Protobuf は LSP をサポートしています。ご自由にご利用ください。

## Japanese Translation: 原文の要約は、発表から技術的な詳細へ、そして今後の改善へと論理的に流れを続け、重要なハイレベル情報を欠かさずにキーポイント一覧の内容を正確に反映しており、よく書かれています。 ## Text to translate: **Repeat the original.** The original summary is well-written, flows logically from the announcement to technical specifics and then to future improvements, while accurately reflecting the content of the Key Points List without missing critical high-level information.