自動プログラミング

自動プログラミング(じどうプログラミング、: Automatic programming)は、人間のプログラマがコードを書くのではなく、何らかの機構によってプログラムを生成するプログラミングの一種である[1]

概要

自動プログラミングという用語に関しては、これまでその意味がさまざまに変化してきたため、定義について明確な合意が得られているとは言い難い。例えば、デイビッド・パーナスが公開されている研究成果から「自動プログラミング」の歴史を調査したところ、1940年代では、紙テープのパンチ処理を自動化することを意味していたとされる。その後、FORTRANALGOLといった高水準言語で書かれたプログラムの変換を指すようになった。実際、初期のコンパイラには Autocode と名づけられたものがあった。パーナスは、「自動プログラミングとは、いつの時代もその当時のプログラマが使える言語より高水準の言語でプログラミングすることを意味する婉曲表現だった」と結論付けた[2]

自動プログラミングはコンピュータプログラムの歴史と共にある。より高いプログラミング効率を求めて、より高水準の自動化が長い間推し進められている。

現在のところ、人の指示なしにプログラムを自動生成する技術は実用化されていない。すなわち現在の自動プログラミングは全自動プログラム生成ではなく、抽象度の高いソースコードを基にしたコード生成・変換および記述の省力化と同義である。

以下は自動プログラミングの例である。

  • 紙テープへのコードパンチング自動化(現代でいうタイピングが当時のパンチング。両方ともコードを「打ち込む」)
  • コード変換
  • ソースコード生成
    • スキーマ定義言語で書かれたスキーマからプログラミング言語で書かれたclientコードの生成
    • スキーマ定義言語で書かれたスキーマからプログラミング言語で書かれたserverスタブの生成
    • スキーマ定義言語で書かれたスキーマからDSLで書かれたバックエンドプロビジョニングコード (Infrastructure as Code) の生成、それによるプロビジョニング
    • テンプレートと変数セットからのコード生成(テンプレートエンジン)

生成的プログラミング

生成的プログラミング: Generative programming)とは、ジェネリッククラスプロトタイプベーステンプレートアスペクトコード生成などの技法を使ってソースコード作成を自動化し、プログラマの生産性を向上させるプログラミングのスタイルである。ソフトウェアコンポーネントなどのコード再利用の技法とも連携して使用される。

ソースコード生成

ソースコード生成: Source code generation)とは、テンプレートなどのオントロジー的モデルを使ってソースコードを生成することであり、テンプレートエンジン統合開発環境(IDE)などのプログラミングツールを使って行われる。これらのツールは、様々なソースコード生成手段を提供する。ソースコード生成器の単純な例としてマクロプロセッサ(例えば、C言語のプリプロセッサ)があり、ソースコード上のパターンを比較的単純な規則に従って置換する。

Microsoft Visual Studio などの IDE はさらに進んだソースコード生成を行う。プログラマは、ソースコードの「スニペット(snippet、断片)」と呼ばれるものを対話的に選択しカスタマイズできる。プログラム「ウィザード」もソースコード生成の典型的な形態であり、プログラマは対話的にグラフィカルユーザインタフェースを設計し、その結果を自動的に反映したソースコードが生成される。Windows Formsではフォームデザイナーを使って視覚的にGUI部品を配置したり、プロパティを設定したりすると、対応するC#やVB.NETによるプログラムコードが自動生成される。

3次元コンピュータグラフィックスの統合ソフトウェアやグラフィックスエンジンの中には、直感的な操作によって各種視覚効果のノードをつなぎ組み合わせることで、リアルタイムまたは非リアルタイムのシェーダープログラムを自動生成する、「ノードエディター」と呼ばれるオーサリングツールを備えているものもある。

実装例

  • NConstruct - .NET Framework 環境での開発ツール。C# ソースコードを生成する。
  • MyGeneration - .NET Framework 向けソースコード生成器。ORMアーキテクチャ向けのコードを生成する。データベースのメタデータを MyMeta API を使ってテンプレート化する。

関連項目

脚注

  1. Ricardo Aler Mur, "Automatic Inductive Programming", ICML 2006 Tutorial. June 2006.
  2. D. L. Parnas. "Software Aspects of Strategic Defense Systems." American Scientist. November 1985.

参考文献

  • Generative Programming: Methods, Tools, and Applications by Krzysztof Czarnecki and Ulrich W. Eisenecker, Addison Wesley, 2000.

外部リンク

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.