4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語プログラミング言語「なでしこ」Advent Calendar 2024

Day 17

これまでに実装した「日本語プログラミング言語」を回顧しRust版を動かす

Last updated at Posted at 2024-12-16

今年の冬のなでしこカレンダーは、開発が中断されたC#版のなでしこv2に注目してくださる方がいました。

C#版のなでしこv2も、泣く泣く開発が中断されたものとは言え、10年以上前?に、それなりに頑張って開発したので、発掘していただけて嬉しい限りです。メンテナンスが終了して何年も経ちますが、今でも、それなりに動いたようです。

これまでに作った日本語プログラミング言語の実装

さて、筆者は、これまで、なでしこをいろいろなプログラミング言語で作り直しています。私が覚えているだけで、結構あります。

また、皆さんすっかりお忘れかと思いますが、なでしこv1の後継言語として「葵」という言語を作りました。「葵」は現在のなでしこv3に似た文法を備えた言語でした。現在のなでしこ3があるのは、葵のおかげといっても過言ではありません!

葵2は、Java VM上で動作するプログラミング言語でした。

このように、何度も何度も、日本語プログラミング言語を作り直しているわけですが・・・理想のプログラミング言語の開発を開発するのは、とても難しいものです。

言語の設計というのは、ある意味、芸術作品を仕上げるのに似ています。「陶芸家がいくつも陶器を作っては、気に入らなくて割って土に戻す」という、そんな雰囲気です。

今年の冬は「なでしこ3(Rust実装版)」で温かくなる

現行メジャーバージョンの、なでしこv3よりも後に作成したのは、

  • なでしこv3(Go言語)と、
  • なでしこv3(Rust版)です。

Go言語版は、コンパイラコンパイラを利用したものですが、気に入らず、現在は放置しています。

Rustで実装した、なでしこv3 Rustは、比較的お気に入りです。Rustという言語がよくできており、書き心地がよく、ゼロからパーサーを記述したので、自由度が高く、拡張も容易になっています。

Rustをインストールした状態で、次のように試すことができます。

# リポジトリを取得
git clone git@github.com:kujirahand/nadesiko3rust.git
# コンパイル
cd cli
cargo build

すると、cli/debug/rnako3 (Windowsならcli/debug/rnako3.exe) に実行ファイルが作成されます。

コマンドラインから簡単な計算10+10×2を表示を実行してみましょう。

$ ./rnako3 -e "10+10×2を表示"
30

以下のようなFizzBuzzを実行してみましょう。プログラムを「fizzbuzz.nako3」という名前で保存します。

# fizzbuzz.nako3
Nを1から100まで繰り返す
  もし、(N%3=0)かつ(N%5=0)ならば「FizzBuzz」と表示。
  違えば、もし、N%3=0ならば「Fizz」と表示。
  違えば、もし、N%5=0ならば「Buzz」と表示。
  違えば、Nを表示。
ここまで。

これを実行します。

$ ./target/debug/rnako3 fizzbuzz.nako3
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
…

このように、実行されます。

なでしこ3Rust版はブラウザ上でも実行できる

Rustで作ると良いことがあります。手軽にブラウザ上で実行できるのです。以下のようなコードで、Rust版なでしこv3をブラウザ上で実行できます。

<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8">
    <title>なでしこ3Rustテスト</title>
    <script type="module">
        import init, { nako_eval_str, nako_eval_getlogs }
            from 'https://cdn.jsdelivr.net/npm/nadesiko3rust@0.2.0/nadesiko3rust.js';
        async function runWasm() {
            await init(); // WASM モジュールを初期化
            // Rustで定義された関数を呼び出す
            const greeting = nako_eval_getlogs("「こんにちは、なでしこ3です。」と表示。");
            console.log(greeting); // コンソールに出力
        }
        runWasm().catch(console.error);
        // Rustから送出される表示ログなどを処理するハンドラ(必須)
        window.nako3_handler = (name, arg) => {
            console.log(name, arg);
            return arg;
        }
    </script>
</head><body></body></html>

まとめると、Rust版の良い点は次の通りです。

  • バイナリ(実行ファイル)としてリリースできる
  • ブラウザ上でも動く
  • 実行ファイルが小さい
  • 省メモリである

とは言え、Rust版は、まだまだ開発途中です。

現在のなでしこ3には、日々いろいろな便利な機構が追加されているので、完全に追いつくのは、まだまだ先になりそうです。しかし、開発がうまく進めば、次世代の「なでしこ4」や現行のなでしこ3を置き換えるものになるかもしれません。

あるいは、夢破れて「葵」のように破棄される可能性もありますが、その場合も、現行のなでしこ3に、アイデアをフィードバックしようと思っています。人生に無駄はないのです!

まとめ

今後も、時間を見つけて、いろいろな言語で「日本語プログラミング言語」を実装しようと思っています。また、なでしこで、なでしこを開発してみたいとも思っています。

これからも、理想の言語を目指して開発を進めていきます。応援よろしくお願いします!

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?