カンニングペーパーを貼ります。http://scratch.mit.edu/projects/propella/811272自己紹介こんにちは、山宮と言います。プロジェクトの紹介をします。簡単に自己紹介をさせてください。作ったアランケイに会いまして、その関係で三年前から彼の研究所であるロサンゼルスのビューポインツに居ます。開発メンバーが参加しています。年間の研究プロジェクトです。プロジェクトの内でも特にプログラミング好きの皆様が興味を持ちやすいポイントに絞ってご説明します。アプリまでを含んだ自由なシステムの良さについて自明だと思うので省略します。短いコード個人のための自由な環境にはプログラム全体の長さが重要です。システムが大きく複雑になると個人の手に負えなくなるからです。行を目標にしています。ページの文庫本に収まります。プロジェクトの全体像が理解出来るというのが目標です。手法それではどうすれば短いプログラムが可能になるでしょうか?注意しなくてはならないのが、短ければ良いという事では無いという事です。分かりやすく短くというのがポイントです。「ムード固有言語」という物を使います。問題に応じて必要な言語を使い分けるという事です。ドメイン固有を極端に進めた形としてムード固有とシャレで呼んでいます。風の内部表現に変換します。使って今度はハードウェアやバーチャルマシン用のアセンブラに変換し、実行します。それでは細かく見て行きましょう。いうと難しく聞こえますが、みなさんも、ある機能に特化されたミニ言語を使われる事はよくあると思います。BNF/PEG何故固有言語によって記述量が減るのかという事について確認します。言語には様々な特性がありますが、ここでは語彙と文法に着目しましょう。語彙について考えます。問題によって使われる語彙が違うので、出来るだけ小さい語彙を使うと使い勝手がよくなります。単語の数が多くなると区別のために長い単語が必要になります。予約語を上手く選択すると、複雑なアイデアを単純な記法で表現する事が出来ます。ある、テーブルを組み合わせて結果を出すような事をループを使ってプログラムで書くと、相当複雑になってしまいます。次に文法について考えます。文法にはそれぞれ固有の複雑さがあるという事が知られています。記法は行指向で、失敗してもおかしくなるのはその行限りです。これは、言語の文法には複雑な物と簡単な物があって、複雑になるほど出来る事が増える一方で失敗の原因も増えてしまうという事です。出来るだけ複雑さの無い文法を選択する事が重要になってくるでしょう。結局、出来るだけ少ない語彙で、単純な文法を選ぶ事が短いプログラムに繋がります。いう仕組みを使います。使って動作をご紹介します。PEGここまでは主にテキストとしての言語を上手く使い分ける話をしましたが、言語という物をもっと広く捉えて、中間的なデータ構造やコンピュータへの入力等、あるルールに従ってやってくる信号全てを言語と考えてみましょう。マウスからの入力やネットからやってくるパケットにも構造があり、言語として捉える事が出来ます。した考え方は新しい物ではなく、コンピュータサイエンスの初期からありました。歴史を振り返ってみましょう。年にノーム・チョムスキーによって体系づけられています。彼のアイデアによると、表現出来る質によって様々なレベルの文法があって形式的に表現出来るそうです。記法でプログラミング言語向けに練り直されました。それ以前のプログラミング言語の文法の説明には主にステートマシンを図示した物が使われていました。みなさんの中でも古い書籍の中に、丸い記号と矢印を使って言語の文法が図示されているのを覚えていらっしゃる方がいるかと思います。いうアイデアを発表します。書かれた文法をコンピュータで処理してパーサーを作り出す仕組みでした。書かれていた点でした。いう仕組みに発展しました。開発に使われ、大いに役立ちました。デモは大きな話題を集め、アラン・ケイ達若い研究者を刺激しました。パターンマッチングを言語に組み合わせて、拡張可能な言語を作り出す事でした。プログラムは次のシンボルを読み進めながら実行パスを選択して行くという形になっています。オブジェクトとメッセージ名の組み合わせでメソッドを選択するのに比べて、より柔軟で「メッセージ送信」というメタファに合っているかもしれません。しての多態性インターネット的プログラミング拡張可能文法については先ほどお話しました。多態性とはオブジェクトが種類に応じて一つのメッセージに対して独自に処理を行うという物です。これは大変柔軟なアイデアでしたが、すぐに問題が明らかになりました。メッセージの実装については何の制約も無いので、プログラムを読んで実際の動作が予想出来ないという事が起こります。演算子の定義が出来るので、ユーザの作ったオブジェクトに加算や乗算を定義する事が出来ます。気まぐれに加算の定義が引き算だったらプログラマは安心してプログラムを組む事が出来ません。これを解決するには代数的な方法があります。代数では、演算につかうデータ、整数、実数、ベクトル等を気にしないで、演算子同士の関係を使って演算子の性質を定義します。加算と乗算について考えると、おなじみの交換法則や分配法則が挙げられます。演算子が扱うオブジェクトが例え整数であっても複素数であっても、この法則さえ満たせば式だけを見て代数的な変換が出来ます。このような制約が必要だと考えていました。メッセージ送信というメタファを非同期通信に拡張する事も考えられていました。これは単にマルチプロセスを行うという事では無くて、理想としては一台のコンピュータがインターネットのようにシステムを止めずに進化して行く事を目標にしていました。私たち生物が細胞レベル、個体レベル、生態系レベルでフラクタルな循環系を持つように、コンピュータ内部にもネットワークを持つ事によって強靭なシステムが出来上がると考えたのです。実現されなかったこれらのアイデアを復活させようという狙いもあります。demoプロジェクトが開始されてからこれまで、私たちのチームは小さなプロトタイプを作ってはやり直すという事を繰り返してきました。その中からいくつかご紹介します。ついてご紹介しました。込められたアランケイの最初の動機を忠実に再現しようとしている物とも言えます。完成まではほど遠いですが、ここから生まれた部分的なアイデアもちょくちょく公開して行きますので是非ご期待下さい。「からくり計算器」ご報告カラクリ計算器とは何か?月別アーカイブはてなブログをはじめよう!propellaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。