Wrenについて

Wrenの独自性について学びましょう


Wrenは、小さくて高速な、クラスベースの並行スクリプト言語です。Luaほどの大きさのパッケージにSmalltalkを詰め込み、Erlangを少し加えて、親しみやすい現代的な構文で包んだものだと考えてください。

  • 小さい。 仮想マシン(VM)は、読みやすく丁寧にコメントされたC言語のコード4,000セミコロンにも満たない分量で書かれています。

  • 高速。 賢いシングルパスコンパイラーが、無駄のない効率的なバイトコードを生成します。

  • クラスベース。 クラスとオブジェクトが中心です。

  • 並行。 軽量なファイバーが言語に組み込まれています。

  • スクリプト。 埋め込み可能で、依存関係がなく、小さな標準ライブラリーを備え、使いやすいC APIを提供します。

VM

Wrenの中心にあるのはVMです。Wrenの仮想マシンは言語の中核であり、すべてのWrenソースコードを実行します。単なるライブラリーであって、単体で動くアプリケーションではありません。より大きなホストアプリケーションに埋め込まれるように設計されています。

Wrenは、次のようなプロジェクトに組み込まれています。

  • TIC-80 - 小さなゲームを作って遊んで共有するためのファンタジーコンピューターです(PICO8に似ています)。
  • DOME - ゲームを作るためのクロスプラットフォームフレームワークです。
  • luxe - ゲームを作るための、クロスプラットフォームで開発スピードの速いゲームエンジンです。
  • Wren Console - その大部分がWren自身で書かれた、WrenのREPL兼CLIです。

Wrenは、自分のプロジェクトに組み込むこともできます。Exercismでは、ホストアプリケーションとしてWren Consoleを使います。これを使えば、ターミナルからWrenスクリプトを実行してテストできます。

なぜWrenなのか?

Wrenはもともと、Crafting Interpretersで知られるBob Nystromによって作られました。彼はいくつもの言語を手がけてきましたが、Wrenを作るきっかけとなったことについて、次のように説明しています。

アプリケーションに埋め込んで使われるスクリプト言語は、いくつかあります。主なものはLuaです。かつてはTCLでした。ほかにはGuileがあり、JavaScriptもどんどん使われるようになっていますし、Pythonを埋め込むアプリケーションもあります。私は元ゲーム開発者なので、「スクリプト」と聞くと「ゲームスクリプト」を思い浮かべてしまいます。

Luaは素晴らしい言語です。小さく、シンプルで、高速です。ただ、批判するつもりはありませんが、C++やJavaのような言語に慣れている人には奇妙に映ります。構文が違いますし、意味論、とくにオブジェクトモデルが独特です。1始まりのインデックスには誰でも慣れますが、メタテーブルのようなものを見ると、オブジェクトがあとからLuaに無理やり取り付けられたのだとよくわかります。

Luaと同じくらいシンプルでありながら、オブジェクト指向の経験がある人にとって自然に感じられる言語には、存在する余地があると思います。Wrenは、それを目指した私の試みです。

試してみる

ブラウザーの中ですぐに試すことができます(何もインストールする必要はありません)。洗練されたUIに包まれたWrenを試してみたいなら、Wren Playgroundを覗いてみるとよいでしょう。