Noweb などの一部のツールはマクロをサポートしていないことがわかりました。識字プログラミングにおけるマクロの長所と短所を知りたいですか?
2 に答える
私は 2 つの異なる LP ツールを作成しました: TCLP - マクロをサポートしていません: http://code.google.com/p/tclp amd NanoLP、サポートしている非常に柔軟なマクロ: http://code.google.com/p/nano- lp .
そして、私が TCLP を書いていたとき、マクロについての私の考えは、プログラムの構造を破壊するので良くない、別のマクロ システムのようなものでした。C 言語の並列マクロ システムのように考えることができます。C マクロは実際のコードを隠します。それらは実際の関数呼び出しではありませんが、(プレースホルダーのように!) 隠します。実際のコードと LP マクロは、コードを隠すための並列の方法です。これはデメリットです。
しかし、読みやすく理解しやすい優れた LP マクロを作成すれば、問題なく使用できるので、次のツールである NanoLP にフレックス マクロ システム (plaeholders、インポート、変数辞書など) を含めました。
「マクロ」とは、C プリプロセッサやほとんどのアセンブラのように、LP ツールに「マクロ置換」を行わせることを意味していると思います。
マクロ置換は「シンタックス シュガー」です。これは、多くの類似した詳細を表す 1 つの記号を記述する方法です。したがって、「マクロ」という用語は、「マクロプログラミング」であり、より高いレベルの抽象化で記述します。
これは、簡単にアクセスできる抽象化レイヤーを提供するオブジェクト指向プログラミングがなかった昔に私たちが行ったことです。
技術的には、関数呼び出しだけを使用して、C で抽象化の層とマクロ スタイルのプログラミングを行うことが可能でした。プリプロセッサの「マクロ」プログラミングは不要です。たとえば、インライン関数をプリプロセッサ「マクロ」として定義して、コードを手作業で最適化していました。これは、初期の C コンパイラが適切に最適化されていなかったためです。
OO プログラミングができたので、より原始的なプログラミング言語のマクロ機能は必要ありません。
Literate Programming マクロ機能は、オブジェクト指向でない言語 (C や Pascal など) で使用され、LP レベルでクラスのような機能と継承のような機能を作成しました。
それには意味がありません。適切なクラスを定義し、適切な継承を使用するだけです。