21世紀のプログラミング言語研究
2000年ごろから始めてみたい研究テーマとして、
思いついたものを並べてみました。
- 21世紀のプログラミング言語(および開発環境)
- ハッカーの研究
- その他、普通のプログラミング言語の研究
背景
2010年ころまでにほぼ確実に実現しそうなことについて確認しておく。
- 世界のどこにいても、ネットワークにアクセス可能になる。
- 情報家電が普及し、すべての家電がコンピュータとつながる。
- 大容量ネットワークが普及する。
家庭に届くネットワークは、家族全員が24時間視聴しつづけるのに十分な
量の情報を伝達できるようになる。
- 大容量記憶装置が普及する。
1人の人間の1カ月分の聴覚情報をディスク1枚に
保存することが可能になる。
- 計算能力の増大によって、音声認識、画像認識が実用化される。
- wearable computer が実用化される。
また、プログラミング言語関係では、次のことが予測できる。
- パソコン用アプリケーション開発競争は、機能向上が飽和して終局を向かえるが、
人型ロボットの制御など新たな分野が開拓されるため、
プログラマーの需要は、減ることはない。
- ライブラリの量が膨大化し、必要な API の検索、
広大な名前空間の扱いが深刻化する。
- ソフトウエアのソースコードの規模は増大するが、
計算機の主記憶の量やコンパイル速度の増加がそれを上回る。
例えば、分割コンパイルが不要になる。
- 小学校からのプログラミングの早期教育の必要性がます。
- ASCII コードからなるプログラムをキーボードから入力する現在のスタイルでは、
ソフトウエアの生産性向上に限界が来る。
このような背景から、次のような研究テーマを考えてみた。
21世紀のプログラミング言語(および開発環境)
プログラミングパラダイムは、手続き型言語をベースとするオブジェクト指向言語で
ほぼ決まりだが、大規模なソフトウエア開発を支援するツールや、
構造エディタに基づいた開発環境が必要である。
プログラマーは、趣味のプログラマーから、プロのプログラマーまで
階層構造をなす。それぞれの階層に応じて、生産性を高める開発環境を構築する
必要がある。
教育用プログラミング言語
全小学生を対象とする。
プログラミング言語に関する、以下の基本事項を理解させる。
- 「コンピュータは、命令されたことを逐次的に実行する」
- 「プログラミングにおいては、ライブラリの活用が重要である」
- 「複雑なデータ構造も、オブジェクトとして扱うことができる」
かつての教育言語(BASIC, LOGO)では、1番目は対象とするが、
2、3番目まで教育の対象とする教育用言語はない。
さらに、GUI とマルチメディアに対応した新しい教育用言語が必要である。
この言語は、以下の特徴を持つ。
- 完全なキーボードレス開発環境。主にペン入力。
- アイコンを使った文法。(しかし、図形言語ではない。)
- プログラムカウンタ、変数、スタックの可視化・音声化。
- 正・逆方向のステップ実行、可変速実行。
- 数字・文字以外に、音声や画像も first class data として扱えるようにする。
- virtual reality LOGO 。
LOGO は、線で絵が書けるだけで、今となっては魅力に欠ける。
そこで、「ネットワーク対戦3Dゲームのキャラクターをコントロールする
プログラム」のような、子供の興味をそそるフレームワークをいくつか用意する。
きっどぴくす的に、簡単なプログラムが書けるようにする。
また、中学校以降に習う実用的なプログラミング言語へも、
できるかぎりスムーズに移行できるようにする。
一般人向けスクリプト言語
10世帯に1人ぐらい存在するようになる、趣味のプログラマーを対象とする。
プログラミングの目的は、次のようなものになるだろう。
- 情報家電のコントロール。
- 音声認識・合成、画像認識エンジンのコントロール。
- PDAのプログラミング。
- インターネット中を動くエージェントのコントロール。
例えば、「家庭用ビデオカメラで撮影されたテープの中から、
特定の人物2人が会話している場面を選んで編集する」など。
ここでも、ペン入力、アイコンによるプログラミングを基本とする。
fool proof に徹した知的なライブラリなどを用意する。
職業プログラマー向けプログラミング言語
普通の職業プログラマーを対象とする。
現在のプログラミング言語と違って、以下の特徴を持つ。
- キーボードによる入力がメインだが、視線入力、音声入力も活用する。
例えば、アクティブなウインドウの選択は視線入力、
ライブラリの検索には音声入力を活用する。
- 構造エディタを前提とした言語仕様。
ハイパーテキスト化されたプログラム。
変数名の付け替えはもちろん、クラス階層の変更等も簡単に行なえる。
- プロジェクト開始時点からのすべてのキーボードのログの保存。
これを利用し、常に過去のバージョンを参照したりできる。
- 分割コンパイルの制約をなくす言語仕様。
- 広範囲にカスタマイズ可能な言語仕様とエディタ。
また、すでによく言われているが、
大規模プログラミングのサポート、再利用のサポート、
仕様記述とプログラムとドキュメントの一体化、
可視化等によるデバッグのサポートなども
重要である。が、テーマとして新鮮さに欠ける。
スーパープログラマーのサポート
100万人に1人程度いる優秀なプログラマーをサポートする開発環境。
1億〜10億円くらいの装置で、
スーパープログラマーの生産性をさらに10倍〜100倍に高めることを目的とする。
(ひと昔前のスーパーコンピュータの値段と同程度であり、
必要ならば大企業が買える金額である。)
- 高解像度ディスプレイを視野のすべてに配置。
- 両手・両足、視線入力、音声入力などをフルに使ったユーザインターフェース。
- すべての操作の応答を高速にするために高並列計算機をバックエンドに持つ。
- 過去のすべての操作・実行結果を瞬時に検索し再現できるように、
大容量データベースを持つ。
基本技術は、「普通のプログラマー向け」と同じだが、
高額なインターフェースを用意する点と、優秀なプログラマー向けに
カスタマイズされている点が異なる。
ハッカーの研究
上記「スーパープログラマーのサポート」とも関係するが、
非常に優れたプログラマーの秘密をときあかしたい。
- ハッカーのコーディング、設計、デバッグ方法を科学的に研究する。
- ハッカー度を評価する客観的指標を見つける。
- ハッカーの種類の分類。高抽象度指向ハッカー、 API 活用型ハッカー、など。
応用例として、ハッカーの能力のさらなる向上がある。
ハッカーは、プログラミングスタイルのどこかに欠点があったとしても、
他の能力でカバーされ人並以上の成果を出せるため、
その欠点に気づきにくい。
その欠点を客観的に見つけ、修復することで、生産性をより向上させることが
できるはずである。
その他、普通のプログラミング言語の研究
一般人うけはしないが、やりたい研究テーマは、他にもある。
プログラミング言語の部品化
(「さきがけ研究21」の研究テーマ。今後3年ほどやる予定。)
コンパイラと runtime system のすべてを部品化した
プログラミング言語の設計・実装を行なう。
これにより、パソコンが部品化によって飛躍的に進歩したように、
プログラミング言語を飛躍的に進歩させる。
Java 言語とシームレスに統合されたスクリプト言語
現在は、スクリプト言語と汎用言語など、用途によって
全く異なった言語が用いられている。
しかし、複数の言語を連携させるアプリケーションの構築は面倒なので、
すべての種類の言語をシームレスに統合したい。
その1例として、 EPP を使って、 Java 言語の普通のソースコード中に
埋め込めるスクリプト言語を設計・実装したい。
例えば、今の Java 言語は、
ファイル処理、入出力、
並列処理などを行なおうとすると、かなり面倒である。
しかし、スクリプト言語ならば、これらが非常に簡単に行なえる。
負荷分散
高並列コンピュータ上でのタスクスケジューリングや、
インターネット上でのメタコンピューティングにおけるスケジューリングにおいて、
負荷分散をどうするかが問題である。
タスク投入をユーザの良識にまかせていたのでは、すぐに破綻する。
そこで、計算機資源に市場原理を導入し、
タスク間で、一種の競売を行なわせ、それぞれのタスクの事情に合った
計算機資源が割り当てられる仕掛けを作りたい。
オブジェクト指向言語の研究
現在のオブジェクト指向言語は、クラスとモジュールの役割が
無理矢理 unify されており、
中規模程度のプログラム開発で不都合が生じ始めてしまう。
この問題を解決する system mixin という言語機能を提案しているが、
これの研究を継続し、オブジェクト指向言語の標準的機能にまでしたい。
To Home Page of Ichisugi.