今後こんな環境できるといいな概要ある程度まとめ。(2010年における現状。)具体例の辺りはそれなりに開発経験ないと難しいかも。目指すところは、突き詰めると「アプリケーション開発を楽にする」だとは思うんですが、その在り方にはいろんな形があるかと思います:非プログラマーが直接実行可能な「ドメインモデル」を書く。いう層が直接実行可能なものを書けるようにする。現実には、プログラマーが不要という意味ではありません。以下のような用途が「落としどころ」かもしれません。ドメインモデリングを担当する人とプログラマーのコミュニケーションを円滑にするための共通言語にする。プログラミングが主業務だった人もドメインモデリングに関われるようにする。ディジタルネイティブがそろそろ就職しだす昨今、顧客側にもある程度プログラムの読み書きが必要かも:少なくとも委託で開発してもらったものの良し悪しの判断つく程度に。委託先と保守契約でもめても、引き継ぎ先を探すまでの間くらい自前で保守できるように。プログラマーがより「意図通り」にプログラムを書けるようにする。プログラミング作業を簡単に。コードを書くだけが仕事だったような人も、もっと上流の設計を容易にできるように。学習コスト既存の汎用言語とは異なる言語を作る以上、学習コストが発生します。学習コストは大きめに見積もられる傾向があります。作らずとも、何らかのライブラリを作ってドメインモデルを表現することになるはず。このライブラリにも、モデルを理解するための学習コストが少なからず発生する。学習コストはそこまで大きくないはず。よる支援を期待できる。補助を受けつつ学習できる。支援の受けやすさの差と考えるべきかも。作る場合、構文解析を作る手間がかかります。対応まで考える必要があり、ここまで考え出すと実装コストは非常に高くなります。実装から考えてみるべきでしょう。記述もあまり煩雑にならずに実現可能かと思われます。用途によっては、純然たるデータを表現するものも多くあります。ロジックを全く含まない。ようなマークアップ言語を使うべきでしょう。よる補完や検証などのサポートも受けられます。範囲内で書こうとして、トリッキーなコードを書いてしまうことがあります。自体の修正を考えましょう。自体(構文解析やコード生成する部分)の保守性が非常に重要になります。自体の修正頻度はあまり高くありません。いって、「めったに修正しないものだから多少見づらくても平気」とはなりません。めったに修正しないからこそ、忘れやすく、読みやすい記述を心がけないと保守できなくなります。実装してしまうことがあります。これは、必要もないのに新しい言語を増やし、学習コストを上げてしまうだけなので避けるべきことです。汎用言語の混在開発を考えましょう。文法を考える際、普段から使い慣れている言語に近づけることを考えましょう。使うのが一番でしょう。自然言語に近づけない「既存の汎用プログラミング言語よりも、自然言語に近づけよう」というのはあまりうまくいきません。自然言語は、文脈の共有(今何の話をしているとか、相手がどこまで知っているかお互いわかっているとか)を前提としています。それは、機械言語には期待できません。自然言語は、音声メディアを通すことを前提としていて、文にする場合には実はあまりいい文法ではありません。記号を使った方がすっきりします。人と人とのコミュニケーションは、普段から言葉以外のものも使っています。文章だけの資料で、ホワイトボードも使わない会議の不毛さを想像してください。作る際には、このような(図表などの)言葉に表れない表現まで念頭に入れておくべきでしょう。似たような考え方(メタプログラミング)はありました。技術が未熟だったというのもあると思いますし、メタプログラミングの欠点の部分が許容できないくらい深刻でした。パフォーマンス低下になっていました。現在と比べるとコンピューターの性能が低く、パフォーマンス低下の影響が深刻でした。当時は、「メタプログラミングが簡単な言語は、逆に普通のプログラミングの難しい言語」でした。両立が無理なら、「普通」の側に傾くのも仕方のないことです。して、作った人にしか読めない状況を生みます。利用が考えづらくなります。作る側も使う側も、もっと楽に効率的に作れて、もっと楽に読み書きできる状況が必要です。言語に偏向していたように思えます。言語というのは、ツール上で視覚的に見れて、ドラッグ&ドロップなどの操作で開発を行えるものです。視覚的なモデリング」という意識が強かったためだと思われます。問題点としては以下のようなものがありました。製品間の連携が難しかった。言語偏重:作る側のハードルが高かった。言語が使いやすいわけじゃない。何も視覚化だけがツールサポートじゃない。テキストベースでも、キーワードのハイライトや、コード補完、リアルタイム構文チェックなどのサポートの仕方もある。見直されるようになります。間での相互連携という課題も残されました。ドラッグ&ドロップによる開発もできるし、テキストベースで記述することもできます。一方の変更が他方に即座に反映されます。コードは色分けされていて、どの部分がどういう意味を持つかが一目でわかります。テキストを途中まで入力するだけで、補完機能が働いて、入力を省略できます。「今、どういう入力が可能なのか」が分かるので、学習も容易になります。入力にエラーがあれば、その場に即座に警告が出ます。これも、開発を容易にすると同時に、学習のハードルを下げます。間の連携に関しては、2つの方法が考えられます。用途として2つのものが考えられます。データとして解釈され、データベースなどに格納されます。間の連携の仕方としては2つの方法が:データベースへの格納の仕方を標準化する。データの取り出し方を標準化する。(現在、こちらの方が主流になっていると思います。コンパイルされて実行可能ファイルになったり、インタープリター的に動的に実行されます。IL(中間言語)のような「共通基盤」になっているものにコンパイルする。共通のライブラリを用いて実行すれば、ある程度の相互運用も容易になる。実現には、以下のようなものがそろう必要があると思います。個別にみるとだいぶ出そろっていて、案外そう遠くない未来に統合的に実現されるかもしれない。いう、文法定義に向いた構文を持っています。C#)に慣れ親しんだ人が読みやすい形式の文法定義言語なども出てきています。汎用言語に影響を与える可能性はあります。データソースに対して、読み書きするための仕組みが標準化されていくと思われます。推進するGDataなどが有力です。Runtime)もあります。LLVMのように、コンパイラ作成の共通基盤となるような取組もあります。プラグインの作成・配布を容易にする仕組みが提供されました。かければいいのに(願望)という例。書けるようになりたい。