柚子快报邀请码778899分享:GNU m4为啥叫m4

http://yzkb.51969.com/

Originally, the Kernighan and Plauger macro-processor, and then m3, formed the engine for the Rational FORTRAN preprocessor, that is, the Ratfor equivalent of cpp. Later, m4 was used as a front-end for Ratfor, C and Cobol. [Ratfor:Rational FORTRAN; cpp: C preprocessor]

René Seindal released his implementation of m4, GNU m4, in 1990, with the aim of removing the artificial limitations in many of the traditional m4 implementations, such as maximum line length, macro size, or number of macros.

https://www.gnu.org/software/m4/manual/ | https://mbreen.com/m4.html

m4 is a macro processor, in the sense that it copies its input to the output, expanding macros as it goes. Macros are either builtin or user-defined, and can take any number of arguments. Besides just doing macro expansion, m4 has builtin functions for including named files, running shell commands, doing integer arithmetic, manipulating text in various ways, performing recursion, etc.… m4 can be used either as a front-end to a compiler, or as a macro processor in its own right [on its own, without depending on others].

At its most basic, m4 can be used for simple embedded text replacement. If it receives the input

define(AUTHOR, William Shakespeare) A Midsummer Night's Dream by AUTHOR

then it outputs

A Midsummer Night's Dream by William Shakespeare

While similar in principle to the better-known C preprocessor, m4 is a far more powerful, general-purpose tool. Examples:

ifdef(`a',b) outputs b if a is defined; ifdef(`a',b,c) outputs c if a is not defined.

the eval macro allows access to integer arithmetic

Strings. substr(`hello', 1, 3); index(`hello',`llo')

Here is a reimplementation of the len builtin (replacing it) as a recursive macro: define(`len',`ifelse($1,,0,`eval(1+len(substr($1,1)))')')

Recursive template explanation C++ | Parameter pack(since C++11) | C++ variadic template recursive example

triadic: 三人组合的;三合一的。sporadic: 偶发的; 偶见的; nomadic: 游牧的

The m4 macro processor is widely available on all UNIXes, and has been standardized by POSIX. GNU Autoconf requires GNU m4 for generating configure scripts.

POSIX (Portable Operating System Interface) is a set of standard operating system interfaces based on the Unix operating system. The most recent POSIX specifications -- IEEE Std 1003.1-2017 -- defines a standard interface and environment that can be used by an operating system (OS) to provide access to POSIX-compliant applications. pthreads or POSIX threads are an implementation of the thread API for C/C++.

Macro languages were invented early in the history of computing. In the 1950s Alan Perlis suggested that the macro language be independent of the language being processed. Techniques such as conditional and recursive macros, and using macros to define other macros, were described by Doug McIlroy of Bell Labs in “Macro Instruction Extensions of Compiler Languages”, Communications of the ACM 3, 4 (1960), 214–20, https://dl.acm.org/doi/10.1145/367177.367223.

The Microsoft Macro Assembler (MASM) is an x86 architecture assembler for MS-DOS and Microsoft Windows.

An important precursor of m4 was GPM; see C. Strachey, “A general purpose macrogenerator”, Computer Journal 8, 3 (1965), 225–41, https://academic.oup.com/comjnl/article/8/3/225/336044. GPM is also succinctly described in David Gries’s book Compiler Construction for Digital Computers, Wiley (1971). Strachey was a brilliant programmer: GPM fit into 250 machine instructions!

The Brian Kernighan and P.J. Plauger book Software Tools, Addison-Wesley (1976), describes and implements a Unix macro-processor language, which inspired Dennis Ritchie to write m3, a macro processor for the AP-3 minicomputer.

Kernighan and Ritchie then joined forces to develop the original m4, described in “The M4 Macro Processor”, Bell Laboratories (1977), https://wolfram.schneider.org/bsd/7thEdManVol2/m4/m4.pdf. It had only 21 builtin macros.

Macros are used to make a sequence of computer commands available to a program as a single program statement, making the program work less tedious and error-free. [link].

A macro (short for “macroinstruction”, from Greek ‘long’) in computer science is a rule or pattern that specifies how a certain input sequence (often a sequence of characters) should be mapped to a replacement output sequence (also often a sequence of characters) according to a defined procedure. [link] 

柚子快报邀请码778899分享:GNU m4为啥叫m4

http://yzkb.51969.com/

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。