//このときxは10。//これ以降、ずっと20で、以前10だった痕跡は一切残らない。0;}タイムリープでフロー制御。戻りたい時だってあるかもしれません。ユーザーのログイン処理なんかそうでしょうか。"こんにちは、正しいユーザーさん!"すっきり書けました。正しいパスワードが入力されたらログインしていいけど、そうじゃなかったら門前払いなのではないでしょうか?「ど~なっつ」では、こんな感じで同じプログラムを書けます!//このあとの命令を使って、この時点まで時を戻せるようになります。save_time=Homura.tick();System.print("パスワードを入力してください。");//パスワードを読み込みます。//パスワードの認証に成功しました。System.println("こんにちは!正しいユーザーさん。上で記録した時間まで、スクリプトエンジン全体を戻します。Homura.seek(save_time);};「Homura」というオブジェクト1を使って、パスワードが間違っていたときはログイン処理前にまでタイムリープさせてしまいます。変数、コールスタック、全ての「環境」が文字通り「戻ります」。これで不自然な繰り返しを使わずにユーザーログイン処理が書けてしまうのです!(ドヤァ私は何度でも繰り返す。gotoでも同じように書けますが、変数も全て巻き戻されるので、安全に巻き戻す事ができます。この事を利用すると、「時が戻る事を利用したループ」がつくれます。普通に起こすと無限ループになりそうですが、ほむらオブジェクトに突っ込んだ値はタイムリープ前の事を覚えているので、コレを使います。交わした約束忘れないよ//普通の変数は、時間操作の影響を受けますが...tabeta=0;//Homuraは時間操作前の事を覚えていて、時間操作の影響を受けません。Homura.counter=0;//このあとの命令を使って、この時点まで時を戻せるようになります。ドーナッツを食べましょう。この足し算の結果は、時間操作で戻ってしまいます。時間操作を行なってもこの足し算の結果は戻りません。上で記録した時間まで、スクリプトエンジン全体を戻します。//ど~なっつでは、else節を省略することはできません。1番目のドーナッツを食べた!このように何度ループをめぐっても1番めのドーナッツを食べ続けることができますが、Homuraは時間操作の影響を受けないので、無限ループには陥らずに済みます。スクリプト外部への副作用も制御できるこういったループはSchemeのcall/ccやRubyのFiberような「継続」を使えば記述することができます。「継続」のアプローチでは戻せないものがあります。それは、言語処理系外の環境です。Scheme内から外界(たとえばウィンドウシステム)に、「ウインドウを表示する」と言った副作用を起こしていた場合、「ウインドウを表示する」以前の継続に戻っても、戻るのはSchemeの中でだけであって、ウインドウは表示されたままになってしまいます2。「ど〜なっつ」では言語処理系外に起こした副作用も、「副作用」に対応した「反副作用」みたいなものを登録して管理させることができます。時間操作が行われた瞬間にその「反副作用」を用いて副作用を打ち消させることができます。「反副作用」を作れない場合もありますよね?例えば、ネットワークでデータを送信するような操作は絶対取り消せませんから、「反副作用」は作れません。そのときにその時刻以前には戻れないようにする機構も作られています。コンソールへの出力も取り消せませんから、今回使ってるSystem.printlnなども本当は取り消せないメソッドとして登録すべきなのですが、副作用のないメソッドとして登録されています。HaskellのUnsafeIOみたいな感じです。関数も使えますし、関数はクロージャーですし、第一級オブジェクトです。JavaScriptのような感じで使えます。//戻り値を明示することもできます。55またプロトタイプ型オブジェクト指向言語で、__proto__にオブジェクトを指定するとJSのようにプロトタイプを巡ってくれます(この辺のドキュメントも書かなきゃ...)。―「良いパーツ」によるベストプラクティスを参考に設計されています。開発中で、リポジトリも未踏でのプロジェクトと同じリポジトリに入っていて大変使いづらいとは思うのですが、テンションを上げるために公開してみました。ダウンロードダウンロードはど~なっつのサイトからお願いします!githubでのソースは本体プロジェクトの「ちさ」と同じ所に入ってます。ライセンスど~なっつのライセンスはGPLv3となっています。他に開発中のもの他に開発中の本体プロジェクト「ちさ」は、このど~なっつをネイティブで使用して、時を司り、さらに任意の時点での実行状態を保存できるGUIツールキット兼電子コンテンツエンジンです。出来てないので公開はまだしません。採択された「CPUの理解を容易にするシステムと解説サイトの構築」の一部分として開発され、支援を受けています。