Raku / Rakudo / Perl 6

#raku #rust #perl

概要と関係性

  • Perl 6: 2000年にLarry Wallが発表した、Perl 5を置き換える新言語の開発コードネーム。
  • Raku: Perl 6の現在の正式名称。2019年10月に改名された。
  • Rakudo: Rakuの主要実装(コンパイラ)。「Raku」という名称自体もRakudoに由来する(後述)。

つまり「Raku」=言語仕様の名前、「Rakudo」=それを実装したコンパイラ、という関係。

歴史

  • 2000年7月19日、Larry Wallが「State of the Onion 2000」で、Perlの「historical warts(歴史的なイボ)」を取り除く新言語構想を発表。「easy things should stay easy, hard things should get easier」を方針に掲げた。
  • コミュニティから361件のRFC(Request for Comments)を募り、それをもとに設計文書「Apocalypses」を作成するという開発プロセスを取った。
  • 2015年12月25日(クリスマス)、Perl 6 v1.0(通称「6.c / Christmas」)がリリース。
  • Perl 6はPerl 5との後方互換性を目指さず、「fix the language rather than fix the user」という思想で言語仕様を根本から作り直した。この設計思想の違いから両者は事実上の別言語となり、2019年10月に「Perl 6」から「Raku」への改名が正式決定された(Larry Wall本人も承認)。
    • 「Raku」という名前は、実装であるRakudoに由来し、Rakudoは日本語の「駱駝道(らくだどう、Way of the Camel)」の短縮形。camelはPerlのマスコット(ラクダ本 = Camel Book)にちなむ。

Rakudoとその実装コンポーネント

  • Rakudoは現在Rakuの唯一のアクティブな実装。GitHub: rakudo/rakudo
  • MoarVM(Metamodel On A Runtime): Rakudo向けに開発された専用VM。JITコンパイルや型特化などの最適化を持つ、レジスタベースのバイトコードインタプリタ。現在ほとんどのRakuユーザーがこのバックエンドを使用。
  • NQP(Not Quite Perl 6): RakudoとMoarVMの間の中間言語・コンパイラツールチェーン。Rakudo自体もNQPを使って実装されている(自己ホスト的な構造)。
  • 他にJVM、JavaScriptバックエンドも存在するが、MoarVMが主流。

言語機能の特徴

  • Gradual typing: 動的型付けをベースに、任意で静的型注釈を追加できる。
  • Grammar(文法): Perlの正規表現を拡張した「rules」により、PEGやANTLR相当のパーサーを言語内蔵で書ける。エンジンの実装方式はバックトラッキング型とNFA/DFA型を参照。
  • マルチディスパッチ: 同名関数を引数の型・値でオーバーロードできる(例: multi fact(0) { 1 })。
  • Sigil不変性: @, $などのシジルが変数アクセス時に変化しない設計で、複雑なデータ構造を簡潔に扱える。
  • 遅延評価: 0..Infのような無限リストも安全に扱える。
  • Roles: クラス継承ではなく合成(composition)でコードを再利用する仕組み(Rubyのmixin相当)。

現在の状況

  • 最新の安定版言語仕様は6.d「Diwali」(2020年10月24日リリース)。
  • 「公式実装」という概念はなく、公式テストスイートに合格すれば「Raku」を名乗れる、という仕様ベースの認定方式。
  • 開発はGitHub、IRC、メーリングリストで継続中。

エコシステム

Webサービス構築用のライブラリ群としてCroがある。

mutsu — 自作のRaku実装

Rust製のRakuインタプリタ「mutsu」を自分(tokuhirom)で開発している。

  • Rakuソースをパース→AST→バイトコードにコンパイルし、自作VM上で実行するアーキテクチャ(bytecode VM)。
  • 公式テストスイート Roast の1,464ファイル中1,433ファイルをパスする水準(開発が速く進んでいるため変動する)。
  • クラス・ロール・継承、多重ディスパッチ、grammar/regex、gather/take、Promise(start/await)、enum、subset型、MAINサブによるCLI引数パースなど、主要機能を幅広くサポート。
  • Zefパッケージマネージャをmzefとして同梱し、mise・Docker・ソースビルドでインストール可能。
  • 0.21.0からはCro::HTTPをバンドルしており、HTTPサーバが書ける(動作実験)。
  • RakuのIntは最初から多倍長整数(bignum)であり、Gauche由来のループなしで1〜100を印字するトリックFatRatを使わず素のInt除算だけで再現できた
  • サイト(tokuhirom.github.io/mutsu)はWebAssembly化したmutsu自身で動いており、チュートリアルやプレイグラウンドを提供している。
  • まだ本番用途には非推奨(not yet suitable for production use)。RakuASTは未完成、コンパイル時診断の一部が未実装など既知の制限あり。

他の独立実装

mutsu以外にも、Rakudo/MoarVM系列とは別に個人・小規模チームによるRaku処理系の実装が存在する。例えばRaptorは、Perl5に近い構文をRakuのサブセットとして採用したGo製の処理系。

出典

作成日時: 2026-08-09 13:26 / 更新日時: 2026-08-15 17:41