小さなプログラムと言語

2026/10/25 6:44

小さなプログラムと言語

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

要約▶

Japanese Translation:

概要:

本テキストは、微小なプログラムの独自の魅力を称賛し、膨大なコードベースと比較して、極度の簡潔さがプロジェクトの親しみやすさと読み易さを大幅に向上させると主張する。この視点は、システムが予測不可能な行動をとるのを防ぐため、複雑な表現力よりもシンプルさを優先することを示唆している。これを支援するために、著者はいくつかの超小型プロジェクトを紹介する:Luke Jackson の 25 行の DOM 差分化ライブラリ (ijk)、Arthur Whitney の J 用の 122 行の C インタプリター(「Incunabulum」)、および Roger K.W. Hui の単一ページ C インタプリターである。議論には、Philippe Brochard による 46 バイトの Forth 実装、Frank Force による 2Kb の JavaScript 3D ブラウザゲーム、そして bootable 90 Kb の kOS(Whitney の k 配列言語を採用し、kdb は reportedly 100 行の C で実現)が含まれる。歴史的文脈は、David Ungar の講演への言及で彩られており、そこではシンプルさが表現力を上回るべきであると論じられている。また、Arthur Whitney の J のフラグメントが単一の午後で提示されたこと、および William Byrd の「Ever Written 最も美しいプログラム」——Lisp に書かれた Lisp インタプリター——への言及も含まれる。Kolmogovorev 複雑性(特定の結果を生成する最短のプログラムを測定する概念)や、ビジネスクリープサイズのレイトレーサー、あるいはガベージコレクションが 436 バイトに削減された Lisps のような例は、ミニマリズムの力をさらに示している。これらの最小限のコードベースと小さな言語を採用することは、新規ユーザーも seasoned industry practitioners も容易に理解でき、アクセスしやすくすることでソフトウェア開発を革命させることができる。究極的には、不必要な機能よりも明瞭さが最優先される文化を育成する結果となる。

本文

小型化されたコードとプログラムへの魅力:複雑性の極限と人間性の探求

小型プログラムの魅力

小型なプログラムは直感的で親しみやすいものです。

  • 読解性の向上: コード行数が少ないほど、読む確率は高くなります(例:200 行 vs 20,000 行)。
  • 驚きと発見: 「想定していた膨大な処理量が、実は数行で達成されていた」という発見は、学習意欲を劇的に引き立てます。

具体例による考察

Luke Jackson の
ijk
リポジトリ(DOM 差分計算)

  • 大型 JavaScript ライブラリに慣れた筆者にとって、このライブラリがたった 25 行であることを知った時は衝撃的でした。
  • この極小サイズが示すのは、実用性と最小限の複雑性の調和です。

Philippe Brochard の 46 バイト Forth

  • 46 バイトという極端な短さで動作する「Forth」が存在します。
    50b8 8e00 31d8 e8ff 0017 003c 0575 00ea
    5000 3c00 7401 eb02 e8ee 0005 0588 eb47
    b8e6 0200 d231 14cd e480 7580 c3f4
    
  • 意味: ヘキサダンプとして並べることも可能というほどです。
  • 心理: 「恐ろしい」ではなく、「解明可能な謎」として捉える姿勢が重要です。工夫次第で仕組みは理解できます。

Arthur Whitney の「インクンブゥラム(初版)」

  • AT&T 3B1 コンピュータ上のインタプリタ断片で、1 ページ・1 日で作成された物語です。
  • 難解さの示唆: C 言語だけで記述されつつも、構造とスタイルについて一週間の勉強が必要でした(付録 A に掲載)。
  • 高密度な価値: 社会から追放されて山奥に避難する場合、持ち歩くべき「高密度な知識」としての側面があります。
    • 補足: J 言語(APL ファミリー)は、簡潔さと難解なパズル、高性能計算を追求する方々にとって最適です。

Alex Alejandre と Geo Carncross の kOS (2026 年更新)

  • kOS: Whitney 氏の配列言語「k」の特徴を持つ OS で、起動イメージは90KBです。
    • GUI ウィンドウマネージャ:60 行の C実装。
    • kdb データベース:100 行の C実装(Whitney の C とするならばさらに驚異的です)。
  • 関連リソース: Impending kOS (vector.org.uk) も必見です。

William Byrd の「有史以来最も美しいプログラム」

  • ネタバレ注意: それは Lisp を使ったLisp インタプリタそのものです。
    (define eval-expr
      (lambda (expr env)
        (pmatch expr
          [`,x (guard (symbol? x))
            (env x)]
          [`(lambda (,x) ,body)
            (lambda (arg)
              (eval-expr body (lambda (y)
                                (if (eq? x y)
                                    arg
                                    (env y)))))]
          [`(,rator ,rand)
           ((eval-expr rator env)
            (eval-expr rand env))])))
    
  • 意義: 極めて少ないコードでインタプリタの核心を表現する能力。

再構築か、根本的な真実か?

コードゴルフは娯楽ですが、その実用性や意味は存在します。

コードゴルファーの真摯な意図

  • レイ・トレーサーの例: ビジネスカード一枚(有限スペース)で動作する最小複雑性の達成は、ビジネス上の制約下でも実現可能であることを示唆します。
  • Kolmogorov 複雑性: 「与えられた出力を生成する最短プログラム」の概念は、人類全体の利益のために最小限の表現を探す行為そのものです。

本質的な複雑性の極致

  • Gzip と Lisps: ガベージコレクション付き Lisps の根本的複雑性を抽出すると、436 バイトに収約できます。
    • これは人間が頭で理解可能なサイズです。
  • Frank Force の 3D ブラウザゲーム: 異常に圧縮された JavaScript ソース(2KB)で実現されています。

結論:ミニチュア化の真価

  • ミニチュアプログラムは「時計仕掛けのパズル」ではなく、**「この概念はビジネスカード一杯に収まり、かつあなたの頭の中で処理できる」**という事実そのものです。
  • 推奨アプローチ:
    • ミニチュア自体よりも、それを読み解くことに集中してください。
    • 小型なプログラムには多くの教訓(作成方法を含む)が含まれています。

小型言語への魅力

小型言語は、表現力と簡潔さのバランスを探求する面白さがあります。

小型言語の特徴

  • 制約: サイズが小さいほど表現力は低下しうる(例:アセンブリ言語)。
    • アセンブリ言語は opcode の厳格なシーケンスであり、文法的な構造そのものはほぼ存在しません。
  • 例外となる「奇妙」な言語:
    • SNOBOL: 制御フロー面でアセンブリ言語のような挙動を示しますが、文字列処理においては劇的に異なり、極めて効果的です。

傑出した小型言語(文法的コア:インデックスカード分以下)

言語特徴と魅力
Forth唯一の構文要素がスペースのみ。驚くほど柔軟かつ強力な表現力を持ちます。
Lisp (特に Scheme)シンプルな文法ながら、膨大な表現力と柔軟性を備えたコア言語を有しています。
Tcl「すべてが文字列」であり奇妙ですが、独自の言語構築が可能で面白いです。
  • 思考の変革: これらの言語は小さな核から無限のパワーを引き出しますが、Algol 風の手続き型言語からの慣習からの脱却が必要です。

他の候補:Lua と Zig

  • Lua: 非常に薄手で(印刷版27 ページ)、ゲームマニュアルより薄いほど説明が簡潔です。
    • C よりも扱いやすく、表現力とサイズが良いバランスです。
  • C: サイズは小さいですが、安全かつ効果的に使うのは容易ではありません。
  • Zig: C に似ていますが、学習曲線が大きく、多くの知識を要求します(ファンにとってはその大きさが理由でしょう)。
  • JavaScript: コア言語は小さく、関数・配列・オブジェクトの組み合わせで十分表現力が得られます。

David Ungar による「単純性の優先」

「システムを少しばかり単純に作っておき、人が余計なものを書かねばならない状況—even 同じことを二回書いて 'Look over here' と注釈をつけても— より、奇妙な振る舞いをするシステムで誰もその理由が理解できない状況を避ける方がよほど良い。つまり、単純さが表現力よりも優先される。」

  • マイクロワールド (Microworld): David Ungar の講演から発見された概念。小さく自立した学習環境です(例:Self 言語)。
    • ARK: Smith と Ungar が作成し、今日も開発が続いている Self 言語のプロジェクト。
  • ライブラリの重要性:
    • 言語そのもののサイズだけでなく、「標準ライブラリ」や「関数ライブラリ」が表現力を左右します。
    • 例:Ramda(JavaScript 関数型プログラミング)はカルリー関数の一貫性で開眼体験をもたらしますが、全てをマスターする必要はありません。「少し使うだけで十分」です。

なぜ小型言語なのか?

  • 感覚: 簡潔さは実用性を超えた「喜び」や「魅力」を生みます。
  • 慎重な設計: 小型であるためには、非常に慎重な設計が不可欠です。

小型の事物全般への魅力

コード以外にも、ミニチュアや超小型スケールへの愛着は多くの人が共有しています。

ステファニー・M・ランギン=フーパー氏の説

「…実寸のものを小さなスケールに縮小するという行為には大きな影響力があります。対象は現在、愛らしく、アクセスしやすく、繊細で、'squee(喜び)になります。また無力であり、したがって制御可能—その小ささゆえに心地よく、全く脅威にならない。」

  • コンピュータ文脈での「制御可能」:
    • 巨大で不吉な宇宙の中で、小さな部分を制御することで秩序感と自らの価値を取り戻せます。
    • 広大な現実とは異なり、オフラインのコンピュータは努力次第で全てを理解できる幻想的な場所です。

シモン・ガーフィールド氏の見解

「答えは支配欲と明快さへの渇望にあります。秩序と照明を混沌とした世界に持ち込み、本来なら自分がそれをほとんど制御できないと感じる世界を一層豊かな人生に変える能力は過大評価されるべきではありません。 […] 最も単純に言えば、ミニチュアは『少ないもので多くを学び、賞賛する』方法を教えてくれます。」

アセンブリ・ナイツとの関係

  • 小型スケール: 整然とした論理と内部的一貫性をもたらします。
  • 瞑想的な活動: 「現実生活を一時的に閉ざす」という行為は、パズル愛好家や大人向け塗り絵作家にとって不可欠です。
    • 小さないくつかの詳細に膝を屈している人々は、世界がそれが必要としているかのように振る舞っていますが、それはその世界が実際、そのように依存しているからです。

結論: 私たちの分野における「大きな」ものは、個々が新しい方法で「小さな」問題を解決する多数の「小さな」勝利の集積に過ぎません。

同じ日のほかのニュース

一覧に戻る →

2026/10/25 8:11

米国のメディア・映画・芸術分野で20万人の雇用が失われた。その内訳はいくらなのか?AIの影響はどれくらいか?

## Japanese Translation: ## サマリー: 米国のクリエイティブ産業は歴史的な縮小に直面しており、雇用喪失の規模は 2001 年および 2008 年の不況と匹敵する深刻さです。この減少の主因は、映画制作、サウンド録音、出版セクターにおける大規模なリストラにあります。ハリウッドだけで 4 年で 10 万超の雇用を失い、同セクター全体の雇用の約3分の1となり、総雇用数は 2008 年以来の水準に後退し、30 年ぶりの低水準に近づいています。同様の期間中に記述出版物は約 7 万の雇用を喪失し、デジタルアートの各サブセクターも減少を続けており、特に新聞社のスタッフ数は 90 年代以降に 85% も減少し、雑誌出版業者は同期間でスタッフの 66% を失っています。ツアーや物理メディア販売によって支えられていた過去の時代とは異なり、現在のストリーミング収益では以前ほどの水準には達せず、音楽業界もそのビジネスモデルをシフトさせています。この経済的後退に拍車をかけているのは人工知能技術の戦略的な転換です。これらの労働者の約 32% がすでに生成型 AI を利用しているにもかかわらず、画像、映像、音楽生成などの高コスト分野では数学や科学への投資と比較して経済的リターンが低いため、テックセクターはそうした分野から撤退しており(アンソルピックなどで見られるように)、AI ツールによる迅速な回復は短期間で望むことはできず、伝統的なアートの労働力にとって長引く課題を示唆しています。さらに状況は複雑化しており、2022 年のテック雇用の増加が約 30 万でしたが、それ以降毎年雇用を喪失し続けており、これらのデジタルの逆風にもかかわらず対面エンターテインメントは引き続き成長しているという事実が加わっています。

2026/10/25 6:47

構築するソフトウェアに対し、より雄大であるべきです

## 日本語訳: 本件の核心メッセージは、高度な AI ツールを利用する個人が、大規模資金調達なしに高パフォーマンスで影響力のあるソフトウェアを構築できる可能性を示しており、「vibeslop」や低品質な AI 出力に対する懐疑論に挑戦している点です。具体的な証拠としては、Michael Malis の pgrust プロジェクトがあり、これは PostgreSQL に重大なバグ(SP-GiST、JSONPath、pgcrypto、メモリ安全性)を発見しており、メインプロジェクトが成功しない場合でもその最適化は Clickhouse などの主要システムを採用される可能性があります。パフォーマンスは重要な推進力であり、AI モデルは今や数年を要する論文やコードベースからの複雑な技術(例:カスタムレギュラー表現式エンジン、ボードゲーム AI、IMAP RFC 処理)を数時間以内に実装しており、Ripgrep 検索、Rust コンパイル、ファイルシステムオーバーヘッドなどのタスクにおけるボトルネックを大幅に減少させています。大規模な研究所が SOTA モデルのために高価なハードウェアを使用する一方、独立した取り組みは AI が検証および実装可能な能力の差が広がっていることを証明しており、これによりエンジニアリング課題への挑戦が最小限のオーバーヘッドで行えるようになり、データベースおよびツールエコシステムにおける漸進的な進展を促進しています。

2026/10/25 4:06

Goose プログラミング言語

## 日本語訳: Goose は、動的値をコンパイラ管理のスタック上にインライン保持することで、ヒープ割当とガベージコレクションを排除し、メモリ安全性を実現するシステム言語です。リソースの解放は手動のデアロケーションではなくスコープ終了経由で行われ、単一スタックメモリモデルによって再割当なしでの成長がサポートされ、参照がポインタが進むにつれて拡大する配列内を維持します。コンパイラはすべての参照に対する静的ルートを自動的に推論し、所有者よりも長生きする可能性があるものは却下し、ライフタイムアノテーションやアンセーフブロックの必要はありません。 パフォーマンスベンチマークでは、Goose が標準的な C++、手動最適化された C++、そして安全な Rust に比べて速度とメモリ使用量でともに優れています:標準的な C++ の場合最高 3.3 倍高速に動作し、メモリ使用量は約半分(1.9 倍削減)です。アーキテクチャ上の革新であるバリアントモード enums(各バリアントの正確なサイズを格納)、ナローリンク(位置非依存参照のために 1/2/4 バイトのオフセットを使用)、およびインプレース構築は、オーバーヘッドが著しく低い連続したネスト型データ構造を可能にします。エラーは関数フレーム間を静的に返すことができ、アンワインダーや Result タイプを必要とせず、スレッドは分離されたメモリ空間で動作し、memcpy によってフラットな値が転送されることでデータ競合とロックを回避します。全体として、Goose は組み込みシステムや高频度取引といったクリティカルドメインにおいて高いパフォーマンスと安全性を提供するとともに、開発ライフサイクルを簡素化します。

小さなプログラムと言語 | そっか~ニュース