実装なんて人それぞれ


半年に一回開いている集会"SignalBottom"は、今回も盛況でした。参加いただいた皆さん、ありがとうございます。などと1ヶ月半も前の話をしているのは、この記事をずっと寝かしていたからです。お察しください。
さて、その場でUzumeフレームワークの現状をプレゼンにて説明しましたが、以下のようなコメントをいただきました。

その場では「Arduinoを使ったことがないのでわからない」と答えました。が、それだけではコメントを下さった方に申し訳ないので、ちょっと勉強してみました。

Arudinoに似ている?

Uzumeプラットフォームでは、最小構成のアプリケーションの場合、たった一つのC言語コールバック関数を埋めればアプリケーションが出来上がります。この関数はフレームワークとは別のファイルに注意深く分けてあり、ユーザーはライブラリ化したフレームワークのコードを気にすることなく、コールバックのみ埋めればすむようになっています。
また、必要に応じて初期化コールバックを使ってもかまいません。初期化コールバックは初めからスケルトンとして与えられ、必要がなければ空欄のままにしておくことができます。
Arduinoでは、setup() loop()という二つの特別な関数をユーザーが作ることになっており、これらがフレームワークからコールバックされます。
似ている、というのはこれをさしたものでしょう。
ユーザーがコールバックを埋めるというのは、別に珍しいやり方ではありません。C言語のmain()関数もコールバックですし、MacOSが呼び出すイベント・ループもコールバックです。ただ、これらのコールバックはあまりにも多くの仕事をするので、コールバックと呼ばれることはありません。コールバックと呼ぶにふさわしいのは単機能の場合ですね。
Delphiでは、GUIイベント毎に呼び出すイベント・ハンドラをユーザーが簡単に作ることができました。実質コールバックです。
Uzumeでは「オーディオ信号処理をやりたい人が興味があるのは、オーディオ信号処理だけだ」とういう視点から、それ以外のすべての雑事をアプリケーション・プログラマから遮蔽しようとしています。

なぜ、Arduino IDEを使わないのか

調べてみて思ったのですが、そもそも無理な気が…と、思ったらArduino IDEから枝分かれたMapleというIDEが公開されており、ARM用に使えるようです。
ということは、質問の意味としては「なぜArduino言語の皮をかぶったUzumeにしないのか」かもしれません。なるほど当日即答できなかった不明をお詫びします。
現在CodeRed LPCXpresso IDE (Eclipse Galileo)で開発中のUzumeは、デモの作成までは簡単ですが、独自アプリケーションの生成となると、一山あります。それはIDEになれた人やマイコン開発になれた人にとってはなんでもないことだと思われますが、Uzumeを使ってほしいAnalog系のエフェクタ開発者にとっては難儀だと思われます。
一方でArduino IDEの説明を読むと「アーティストにとっても、アーティストにとっても」と、鼻につくほどアーティスト(非プログラマ)を意識しています。
Arduinoは、少なくともそれを標榜できるくらい、プログラミングの敷居を下げたということでしょうか。ひとつの方向として面白いです。
Eclipseでのプロジェクト生成については、自分で触ってみたいとも思うのですが、何しろ時間が。ねぇ。
そう言うわけで、Eclipseで敷居を下げられないなら、Mapleを使わないのはなぜかと言うことになるのでしょうか。よくわかりません。

Arduinoではない

別に意地をあるつもりはありませんが、UzumeはArduinoではありません。一番異なるのは、複数イベントを扱うと言うことでしょう。メインとなるオーディオのイベントの他に、現在考えているものとしてはボタン・スイッチ・イベントがあります。また、遠い将来のことですが、MIDIイベントの実装も一応は考えています。
そう言ったイベントを扱う上で、マルチタスクアーキテクチャプログラマに見せたまま複数コールバックを実装する方がいいのか、タスク内部で単一のイベントループを回し複数イベントを取り扱う方がいいのか、はたまた別の方法がいいのか、実はよくわかりません。あるいは私以外のメンバーが解決するかもしれません。プログラムの実装方法なんて人それぞれです。
言えることがあるとするなら、イベント駆動型のアーキテクチャとしてUzumeは古典的なコールバック型から離れないだろうと言うことと、loop()って名前のセンスには、はなはだ疑問を感じますと言うことくらいです。