ToonTalkは、子供たちがプログラミングすることを目的としたコンピュータプログラミングシステムです。「Toon」は漫画を意味します。このシステムは、アニメーションキャラクターの形で提示され、例題を通して学習できるロボットも含まれています。これは、学術界以外で並行制約論理プログラミングパラダイムを実装した数少ない成功例の一つです。
これは1995年にケネス・M・カーンによって作成され[ 1 ] 、1996年から2009年にかけて世界中で配布されたソフトウェアパッケージであるToonTalk IDEの一部として実装されました[ 2 ]。 2009年以降、その仕様は学術的に出版され[ 3 ]、その実装は無料で利用できます。
2014年から、ToonTalk Reborn for the Web [ 4 ] [ 5 ] [ 6 ]と呼ばれるJavaScript HTML5版のToonTalkが利用可能になりました。これは最新のWebブラウザで動作し、デスクトップ版のToonTalkとはいくつかの点で異なります。ToonTalkプログラムは任意のDOM要素で実行でき、さまざまなブラウザ機能(オーディオ、ビデオ、スタイルシート、音声の入出力、ブラウザイベント)がToonTalkプログラムで利用できます。GoogleドライブなどのWebサービスが統合されています。ToonTalk Rebornは無料でオープンソースです。
ToonTalkは、商用製品としての歴史を超えて、ロンドン・ナレッジ・ラボや教育研究所における様々な研究プロジェクト、特にPlaygroundやWebLabsといったプロジェクトで学術的に活用され、発展を遂げました。これらのプロジェクトには、ケンブリッジ(子会社Logotronを通じてAddison Wesley Longman )、ポルトガル( Cnotinforとリスボン大学)、スウェーデン(王立工科大学)、スロバキア(コメニウス大学)、ブルガリア(ソフィア大学)、キプロス(キプロス大学)、イタリア(イタリア国立研究評議会教育技術研究所)の研究パートナーが参加しました。また、スウェーデンではMikael KindborgがToonTalkプログラムの静的表現を提案し[ 7 ]、ポルトガルではLeonel Morgadoが読み書きのできない子供たちによるコンピュータプログラミングを可能にする可能性を研究するなど、学術的な関心を集めました[ 8 ] 。
ToonTalkは、Janusプログラミング言語とアクターモデルの影響を受けて開発されました。ToonTalkにおける主要なコミュニケーション抽象化は、鳥と巣のペアです。プログラマーやロボットが鳥に物を渡すと、鳥は巣に飛んでいき、その物を巣の中に入れ、戻ってきます。巣に既に物が1つ以上ある場合は、鳥は新しい物を他の物の下に置きます。
ToonTalk プログラムは一連のルールで構成され、各ルールには先頭と末尾があります。先頭は、タプルである引数と照合できるパターンです。ToonTalk の表現では、ルールはロボット、プログラムはロボットのチーム、タプルは、物を収納できる任意の数の穴や仕切りを持つ箱として表示されます。物のアルファベットには、テンキー、テキストパッド、他の箱、ロボットチーム、鳥、巣、その他のカテゴリの物が含まれます。プロセスは、作業中のロボットチームがいる箱で構成されます。どのパターンも箱と一致しない場合、プロセスは一時停止します。そうでない場合は、最初に一致したルールが実行されます。ルールの末尾は、プロセスを破棄するか、同じチームでプロセスを続行することができます。空の巣があるにもかかわらず、パターンが空の巣以外のものを要求している場合、鳥が巣に何かを置くまで (通常は他のプロセスの動作の結果として) プロセスは一時停止します。何かが乗ったネストは、ネストが存在しないかのように、つまり(一番上の)何かだけが乗っているかのようにパターンに一致します。末尾のアクションも、ネスト全体ではなく、その何かだけを操作します。したがって、ネストを使用して未来をプログラムすることができます。
ToonTalkは命令型としても宣言型としても解釈できます。入出力を容易にするために設計された特定の構造を無視すれば、ToonTalkは可変メモリへの共有アクセスを持たないと考えることができます。鳥/巣メカニズムはアクターモデルの通信に似ていますが、巣を渡すことができ、プロセスが複数の巣を保持できるという追加機能があります(これはJanusでも同様です)。アクターモデルとToonTalkの通信の違いは、ToonTalkはメッセージの順序を保持することですが、ToonTalkはメッセージストリームの非決定的なマージも提供できます。