コンピュータサイエンスにおいて、自動プログラミング[1]とは、何らかのメカニズムによってコンピュータプログラムを生成し、人間のプログラマーがより高い抽象レベルでコードを記述 できるようにするコンピュータプログラミングの一種である。
自動プログラミングの正確な定義についてはほとんど合意が得られていませんが、その主な理由は、その意味が時とともに変化してきたためです。David Parnasは、公開された研究で「自動プログラミング」の歴史をたどり、1940 年代には紙テープに穴を開ける手作業の自動化を指していたと述べています。後に、 FortranやALGOLなどの高水準プログラミング言語の変換を指すようになりました。実際、コンパイラとして識別できる最も初期のプログラムの 1 つはAutocodeと呼ばれていました。Parnasは、「自動プログラミングは常に、プログラマが当時利用できる言語よりも高水準の言語でプログラミングすることの婉曲表現であった」と結論付けています。 [2]
プログラム合成は、数学的要件に基づいて手順が最初から作成される自動プログラミングの一種です。
起源
初期のUNIVACプログラマーであるMildred Koss は次のように説明しています。「マシン コードの作成には、プロセスを個別の命令に分解し、すべてのコマンドに特定のメモリ位置を割り当て、I/O バッファーを管理するなど、いくつかの面倒な手順が含まれていました。これらの手順に従って数学ルーチン、サブルーチン ライブラリ、およびソート プログラムを実装した後、より大きなプログラミング プロセスを検討することが私たちの仕事でした。テスト済みのコードを再利用し、マシンにプログラミングを支援させる方法を理解する必要がありました。プログラミングしながら、プロセスを調べ、これらの手順を抽象化して高水準言語に組み込む方法を考えました。これにより、インタープリター、アセンブラー、コンパイラー、ジェネレーターが開発されました。これらは、他のプログラムを操作したり、他のプログラムを作成したりするように設計されたプログラム、つまり自動プログラミングです。」[3]
生成プログラミング
生成プログラミングと関連用語であるメタプログラミング[4]は、自動化によって「衣類、自動車、化学薬品、電子機器などの伝統的な商品の生産」が改善されたのと同じように、 「ソフトウェアコンポーネントを自動化された方法で製造する」 [5]プログラムを記述できる概念です。 [6] [7]
目標はプログラマの生産性を向上させることです。[8]これは、コンポーネントベースのソフトウェアエンジニアリングなどのコード再利用のトピックに関連することがよくあります。
ソースコード生成
ソースコード生成は、問題の説明[9]やテンプレートなどのオントロジーモデルに基づいてソースコードを生成するプロセスであり、テンプレートプロセッサや統合開発環境(IDE)などのプログラミングツールを使用して実行されます。これらのツールを使用すると、さまざまな方法で ソースコードを生成することができます。
最新のプログラミング言語は、Json4Swift ( Swift ) や Json2Kotlin ( Kotlin )などのツールによって十分にサポートされています。
COBOLコードを生成できるプログラムには次のものがあります。
- DYL250/DYL260/DYL270/DYL280シリーズ[10]
- ビジネスコントロールズ株式会社のSB-5
- Peat Marwick Mitchellの PMM2170 アプリケーション プログラム ジェネレーター パッケージ
これらのアプリケーション ジェネレーターは、COBOL の挿入とオーバーライドをサポートしていました。
Cプリプロセッサなどのマクロプロセッサは、比較的単純な規則に従ってソースコード内のパターンを置き換えるもので、ソースコードジェネレータの単純な形式である。ソースからソースへのコード生成ツールも存在する。[11] [12]
ChatGPTのような大規模言語モデルは、自然言語で与えられたプログラムの記述からプログラムのソースコードを生成することができます。[13]
多くのリレーショナル データベース システムでは、データベースの内容をSQL データ定義クエリとしてエクスポートする機能が提供されています。この機能を実行すると、テーブルとそのデータを再インポートしたり、別の RDBMS に移行したりできます。
ローコードアプリケーション
ローコード開発プラットフォーム( LCDP) は、従来のコンピュータ プログラミングの代わりに、グラフィカル ユーザー インターフェイスと構成を通じてアプリケーション ソフトウェアを作成するためにプログラマーが使用する環境を提供するソフトウェアです。
参照
- 自動バグ修正
- 自動化された機械学習
- コード生成ツールの比較
- 機能指向プログラミング
- 言語指向プログラミング
- モデリング言語
- プログラム変換
- 意味翻訳
- 語彙ベースの変換
- 第4世代プログラミング言語
- ローコード開発プラットフォーム
- 創発コーディング
注記
- ^ Ricardo Aler Mur、「自動帰納的プログラミング」、Wayback Machineで 2016-03-04 にアーカイブ、ICML 2006 チュートリアル。2006 年 6 月。
- ^ DL パルナス。「戦略防衛システムのソフトウェア的側面」アメリカン・サイエンティスト、1985 年 11 月。
- ^ ウェンディ・チュン「ソフトウェアについて、あるいは視覚的知識の持続性について」グレイルーム18。ボストン:2004年、30ページ。
- ^ 「ジェネレーティブプログラミングについて」。
メタプログラミングのサブドメインとしてのジェネレーティブプログラミングは、実行の一部として他のプログラムを生成するプログラムを作成する手法を指します。
- ^ P. Cointe (2005)。「ジェネレーティブプログラミングに向けて」。型破りなプログラミングパラダイム。コンピュータサイエンスの講義ノート。第3566巻。pp. 315–325。doi :10.1007/ 11527800_24。ISBN 978-3-540-27884-9ジェネレーティブプログラミング (GP) は、
他のプログラムを合成するプログラムを開発することで、ソフトウェアコンポーネントを自動的に製造する試みです。
- ^ 「ジェネレーティブプログラミング:概念と経験(GPCE)」。
- ^このトピックに関する SIGPLANの会議は2018 年 11 月に予定されています。この分野での 1970 年代初期の試みには、Yacc と関連する Lex プログラムが含まれていました。
- ^ James Wilcox、「カスタム アプリケーション開発に多額の費用を支払う」、2011 年 3 月。
- ^ 「アプリケーション ジェネレータ」。PCmag.com。
従来のプログラミングではなく、問題の説明からアプリケーション プログラムを生成するソフトウェア。... などの高水準プログラミング言語よりも高水準で、使いやすいです。
- ^ 「DYL-280 コマンド構文」(PDF)。2018 年 7 月 30 日のオリジナル(PDF)からアーカイブ。2018 年 9 月 3 日に取得。
- ^ Noaje、Gabriel、Christophe Jaillet、Michaël Krajecki。「ソースからソースへのコード トランスレータ: OpenMP C から CUDA」。高性能コンピューティングおよび通信 (HPCC)、2011 IEEE 第 13 回国際会議。IEEE、2011 年。
- ^ Quinlan、Dan、Chunhua Liao。「ROSE ソースツーソース コンパイラ インフラストラクチャ」。Cetus ユーザーとコンパイラ インフラストラクチャ ワークショップ、PACT と共同。Vol. 2011。2011 年。
- ^ Tung, Liam (2023年1月26日). 「ChatGPTはコードを記述できる。現在、研究者はバグ修正にも優れていると述べている」ZDNET。2023年2月3日時点のオリジナルよりアーカイブ。2023年6月22日閲覧。
参考文献
- 生成プログラミング: 方法、ツール、アプリケーション、 Krzysztof Czarnecki および Ulrich W. Eisenecker 著、Addison Wesley、2000 年。
外部リンク
- 初心者のためのコード生成
