質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

5回答

1890閲覧

コード生成支援機能を標準機能として持っている言語または開発環境

argius

総合スコア9388

IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

1グッド

2クリップ

投稿2016/08/16 09:42

編集2016/08/16 10:03

ぼくらの疑問つぶやき帳からの質問です。

Chironianさんの疑問の種(もう流れてしまいましたが)からヒントを得て

T4の話で思ったんですが、汎用的なコードジェネレーターの仕組みが提供されている言語(環境含む)って少ない気がします。私が知らないだけでしょうか。

という疑問をつぶやきました。

コード生成を支援するテキストテンプレートのような機能について、拡張ライブラリーでは珍しくないですが、T4のようにデフォルトで使用できるものはあまり聞いたことがありません。
言語機能や開発環境にあらかじめ組み込まれているようなものはあるでしょうか?

言語自体がテンプレートであるPHPみたいなのもありますね。
なのでPHPは例外と言うことでお願いします。


追記:以下の条件を満たしているのが望ましいです。

  • コード生成の自由度: 自身のコード生成にも、HTMLの生成にも使える、など
  • 実績: 実際に広く使われている手法であること
takotakot👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

反射的に「C言語のプリプロセッサ」というのが思い浮かびましたが、そういう答えを期待しているのではなさそうですね……

投稿2016/08/16 09:51

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/08/16 10:04

回答ありがとうございます! そうですね、プリプロセッサーでも使い勝手が良ければかまいません。 どういうものを求めているのか分かりにくかったと思うので、条件を追記しました。
guest

0

コードジェネレイターとはちょっと違うかもしれませんが、
COBOLにはCOPY句というものがあります。

COPYで、呼び出し元のコードに呼び出し先のコードを展開してコンパイルすることが出来ます。
これだけなら、サブルーチンやレコード定義の共通化ですが、
面白いことに、オプションで展開時に文字列置換をすることが出来ます。

投稿2016/08/18 21:30

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/08/20 10:33

回答ありがとうございます! COBOLは少しだけ分かりますが、 COPY句にそういう機能があるのは知りませんでした。
iwamoto_takaaki

2016/08/20 11:30

REPLACINGで指定すれば置換が出来ます。正規表現等は使えないので限度はありますが、COPYはコンパイル前に単純にソースコードの展開を行いますので、アイデア次第でいろいろなことが出来そうです。
argius

2016/08/20 11:37

なるほど、プリプロセッサーやマクロの類の機能があるんですね。
iwamoto_takaaki

2016/08/20 11:45

そうです。 展開はプリプロセスです。 まずマクロとして使う人はいないので、 半分は冗談の類ですが・・・
argius

2016/08/20 11:51

COBOLには少ししか縁がありませんが、全く知らない機能(いや見たことはあったかも)だったので勉強になりました。 ありがとうございます。
guest

0

言語機能や開発環境にあらかじめ組み込まれているようなものはあるでしょうか?

言語機能の一部としてマクロシステムを取り込んでいるものが該当するでしょうか。開発環境の方は、モダンなIDEは一通りコード・スニペット機能を持っていると思います。

  • LISP
  • Scheme
  • C, C++ (プリプロセッサマクロ)
  • Scala
  • Template Haskell
  • Rust
  • (etc...)

少し毛色は異なりますが yacc/lex などのパーサ/字句解析器ジェネレータも、ドメイン固有言語(DSL)から異なる言語のソースコードを生成するものですね。

余談:個人的にはマクロシステム有りの言語はそう珍しくないと思ってました。C#のT4はちょっと癖が強すぎて苦手。

投稿2016/08/17 01:05

編集2016/08/17 01:11
yohhoy

総合スコア6189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/08/17 17:41

回答ありがとうございます! 確かにマクロは珍しくないですね。 ただそれをテキストテンプレートのように使うことはあるのでしょうか。
yohhoy

2016/08/18 00:10

話題にされている「テキストテンプレート」の意味合いにもよりますが、ソースコードを自動生成するという観点においては、マクロシステムと区別する意味はないと考えています。
argius

2016/08/18 12:57

例えば、どの言語でも良いのでマクロを使うとして、 ひな型は生成される言語の体裁に合わせて書けるようなものです。 HTMLならtemplate.htmlとして書いておいて、HTMLとしてある程度読める状態になっている。 私のT4の解釈が間違っている可能性があります。
yohhoy

2016/08/18 14:52

> ひな型は生成される言語の体裁に合わせて書けるようなものです。 言わんとしていることが理解できた気がします。そのパターンで他に思いつくとしたら XSLT+XML によるXML文書生成でしょうか。かなり異色ですけどね:P
argius

2016/08/18 14:56

> XSLT+XML それはかなり近いです。 実際それで書かれたジェネレーターも見たことあります。 でもそれだと処理系を何にするかという話になってしまうので...(^-^;
guest

0

ベストアンサー

実績: 実際に広く使われている手法であること

実績と言うことだと、アセンブラマクロの話になってしまいますが、IBM系メインフレームだと、OS自身も含む各種ソフトの定義ファイルを、マクロを使ってアセンブルすることで、バイナリデータや定型テキストを生成しています(何でも生成できます)。
Unix/Linuxなどだと、各種ソフトが定義ファイルを自前で構文解析して読み込んでいますが、その部分を下請けに出しているわけです。

テンプレートエンジン的な物も1980年代からあります。言語か開発環境かというと、スクリプト言語内蔵の開発&実行環境ですかね。ざっくり言うと、「ウェブブラウザとHTTPサーバーを1つのソフトにしたようなもの」でしょうか。

投稿2016/08/16 14:25

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/08/16 14:43

回答ありがとうございます! メインフレームとはまた予想外のところから来ましたねー。 その環境に縁のない人間にはイメージがつかみにくいですが、 確かに使われる場面はあるということですね。 手法としては取り立てて新しいものではないですからね。
guest

0

こんにちは。(なんとなく呼ばれたような気がしたので出てきてしまいました。)

一部のアセンブラもあると思います。Repeat擬似命令とかマクロとか。貧弱ですがアセンブラですし。

もちろん、maisumakunさんも言及しているようにC言語のプリプロセッサもそこそこ強力なコード生成できますね。
clangで使われているテクニックは、なかなか強力です。
でも、これって標準かというと、言語設計者は想定していなかった使い方っぽいので標準とは言えないかも?

ところで、C#のT4テキストテンプレートやRubyのincludeによるMixinは、スッゴイ頭の良い人達が#defineでパラメータを定義して#includeでそれを展開するテクニックをたいへん使いやすくしたものではないかと推測してます。

投稿2016/08/16 10:31

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/08/16 10:47

回答ありがとうございます! 元ネタがChironianさんのつぶやきなので、来ていただいてうれしいです。 私が想定していたのはマクロ的なものでは無く、テキストテンプレートっぽいものだったのですね。 たとえば、スケルトンを作ったりする時に使うような。 でも、この質問はマクロのことをもう少し考えても良かったかな、と思い至ったので、 これはこれで良いかな、という感じです。 (ぶっちゃけ)質問自体はそれほど疑問と言うわけでもないので、 関連したお話が聞ければそれで良いかな...という(^-^;
Chironian

2016/08/16 12:48

編集に時間をかけてしまったので、実は追加を見る前に投稿してしまいました。 フォローありがとうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問