小孩记忆力差需要补充什么营养| 鸟飞进家里是什么预兆| 喝酒头晕是什么原因| 屎特别臭是什么原因| 撸铁是什么意思| 鲱鱼是什么鱼| bart是什么意思| 宫颈锥切术是什么意思| 抠脚大汉什么意思| 相表里什么意思| 蛇缠腰是什么病怎么治| 泡脚什么时候最佳时间| 营救是什么意思| 学海无涯苦作舟的上一句是什么| 小孩睡觉磨牙是什么原因引起的| 驳什么意思| 排卵期会有什么症状| 合成碳硅石是什么| 胃湿热吃什么中成药| 左心室高电压是什么意思| 血糖高吃什么菜| 妇科腺肌症是什么病| 小孩反复发烧是什么原因引起的| 刀伤用什么药愈合最快| 喉咙发炎挂什么科| 什么是梭织面料| 心脏病吃什么药| 牙龈肿痛挂什么科| 汪字五行属什么| hbv是什么| 口臭睡觉流口水什么原因| 厅级是什么级别| 逍遥丸什么人不能吃| 外阴白斑用什么药| 何曾是什么意思| 手震颤是什么原因引起的| b型钠尿肽高说明什么| 奶阵是什么意思| 什么水果好吃| 骂人是什么意思| arg是什么氨基酸| 低置胎盘有什么危险| 本来无一物何处惹尘埃是什么意思| 财鱼是什么鱼| 肾出问题了有什么症状| 吃什么油最健康| 过氧化氢弱阳性什么意思| 集分宝是什么意思| 先下手为强是什么意思| 马华念什么字| 心率过缓有什么危害| 心率过快吃什么药好| 桑黄是什么东西| 吃维生素b6有什么好处和副作用| 为什么会梦魇| 梦见老公出轨预示什么| 黑曜石属于五行属什么| 猫咖是什么| 什么是逆向思维| 女人为什么会得甲状腺| 冰箱发烫是什么原因| 检查贫血做什么检查| 104岁属什么生肖| 血为什么是红色的| 梦到自己杀人是什么意思| 牛奶不能和什么一起吃| 抹茶是什么意思| 怀孕前有什么征兆| 妇科炎症用什么药好| 三月十六是什么星座| 干咳无痰是什么原因引起的| 什么样的心情| 95年猪五行属什么| 过敏是什么症状| 白虎关是什么意思| 关节炎有什么症状| 洗完牙需要注意什么| 95年的猪是什么命| 比例是什么| 子宫肌瘤是什么原因引起的| 颈动脉挂什么科| 祭奠用什么花| 湿疹是什么引起的| 手心发热吃什么药| 眼镜pd是什么意思| 阴道息肉长什么样| 阴虱用什么药可以根除| 冬虫夏草生长在什么地方| national是什么牌子| 深渊什么意思| 狗跟什么生肖最配| 一什么雨| 驿什么意思| 叶酸片什么时候吃最好| 什么是色弱| 酱油是什么做的| 男孩子断掌有什么说法| 玄猫是什么猫| 2月23号是什么星座| 前夫是什么意思| 大年初一是什么星座| cps是什么单位| 粗钢是什么| 营养包是什么| 胎毛什么时候剃最好| 猫叫什么名字好听| 帛字五行属什么| 绝经三年了突然又出血了什么原因| 爸爸的姐夫叫什么| 无限未来为什么不写了| 总是拉肚子是什么原因| 篱笆是什么东西| 米肉是什么| 吃什么不便秘可以通便| aps是什么意思| 口臭去医院挂什么科室看病| 阑尾是什么| 印度什么时候独立的| 蚊子最怕什么| 谷草谷丙偏低代表什么| 一人一口是什么字| 宫内小囊是什么意思| 脾胃虚弱吃什么| 什么时候入秋| 七月十一日是什么日子| 蚊子咬了为什么会痒| 放疗和化疗有什么区别| 生吃洋葱有什么好处| 红润润的什么| 骨头咔咔响是什么原因| 糯米粉做什么好吃| 马标志的车是什么牌子| 大油边是什么肉| 乳头内陷是什么原因| 孕初期需要注意些什么| 蛇盘疮什么原因引起的| 蛋清加蜂蜜敷脸有什么好处| 坐西向东是什么宅| 晚上睡觉流口水什么原因| 艾草长什么样子图片| 什么是破窗效应| 尿气味很重是什么原因| 红参有什么功效| 望尘莫及是什么意思| 罗锅是什么意思| 扬州有什么好玩的| 玉和玉髓有什么区别| 每天喝一杯豆浆有什么好处| w是什么单位| 阴道长什么样子| 邮箱抄送是什么意思| 什么是人格分裂| 景泰蓝是什么地方的特种工艺| 女人有腰窝意味着什么| 甲状腺属于什么科| 欣字属于五行属什么| 明天什么节| 光宗耀祖是什么意思| 头响脑鸣是什么原因引起的| 狗头是什么意思| 属鸡与什么属相最配| 漂洗什么意思| 30岁属什么| 男生为什么要割包皮| N1是什么| 哪吒是什么意思| 尿肌酐低说明什么| 今年62岁属什么生肖| 盐酸左氧氟沙星片治什么病| 梦见偷鸡是什么预兆| 平安喜乐什么意思| 生孩子送什么花比较好| hg是什么元素| 脑血管堵塞是什么症状| 推拿是什么| 古灵精怪什么意思| 爱的反义词是什么| 梦见买馒头是什么意思| 脂肪瘤应该挂什么科| 高筋面粉和低筋面粉有什么区别| 草字头弓读什么字| 什么是类风湿| 本科毕业证是什么颜色| 咳嗽发烧是什么原因| lh是什么意思啊| 吃什么补气| 倒挂金钩是什么意思| 炝锅是什么意思| 肺气肿是什么原因引起的| 小龙虾和什么不能一起吃| 痔疮应该挂什么科室| 胆汁反流用什么药好| vfu是什么牌子| 雨字五行属什么| 澳门车牌号是什么样子| 丹青指什么| 八月十五什么星座| lm是什么意思| 黄芪精适合什么人喝| 医保定点医院是什么意思| 为什么总是做噩梦| 身体湿热吃什么中成药| 吐血是什么病| 小刺猬吃什么东西| 烧仙草是什么| 一抹多是什么意思| 男性泌尿道感染吃什么药| nd是什么意思| 肺炎支原体感染吃什么药| 西汉后面是什么朝代| 桃子不能和什么食物一起吃| 忽什么忽什么| 蛊惑什么意思| 肺大泡吃什么药| 什么非常什么| 苦瓜有什么作用| 结合是什么意思| 芒种是什么季节| 柴鸡是什么鸡| 什么样的血管瘤不用治| 红细胞高什么原因| 煮虾放什么| 命宫是什么意思| 嘴角疱疹用什么药膏| 血压高是什么原因| 白参是什么参| 白芷是什么| 什么是电商平台| 清炖牛肉放什么调料| 玉米须加什么治痛风| 什么算熬夜| 出汗吃什么药| 眼球发黄是什么原因| 私生子是什么意思| 女性胃炎有什么症状| 1966年属马的是什么命| 嗜碱性粒细胞偏高是什么原因| 2004属什么生肖| 女性私处长痘痘是什么原因| 什么是礼仪| 为什么老做梦| 尿多是什么原因引起的| 反哺是什么意思| 虫至念什么| 雌二醇低吃什么补得快| 外阴长水泡是什么原因| 为什么抽烟会恶心想吐| 药流后需要注意什么| 梦见种地是什么意思| 油头粉面是什么意思| 甲状腺功能亢进吃什么药| 吃什么最补胶原蛋白| 汐字五行属什么| 维生素ad和维生素d有什么区别| 甲状腺不能吃什么食物| 为什么糙米越吃血糖越高| 甲状腺是什么病啊| 什么枕头好| 南瓜子有什么功效| 男性内分泌失调有什么症状| 德国是什么民族| 吃头孢不能吃什么水果| 谷草转氨酶偏低是什么原因| 天蝎男喜欢什么样的女生| 百度

新华网VR|自贡搞了个大新闻,太亮了!

(Redirected from Lisp macro)
百度 省委宣传部召开部务会(扩大)会议传达学习全国两会精神,研究贯彻落实意见。

In computer programming, a macro (short for "macro instruction"; from Greek μακρο- 'long, large'[1]) is a rule or pattern that specifies how a certain input should be mapped to a replacement output. Applying a macro to an input is known as macro expansion.

jEdit's macro editor

The input and output may be a sequence of lexical tokens or characters, or a syntax tree. Character macros are supported in software applications to make it easy to invoke common command sequences. Token and tree macros are supported in some programming languages to enable code reuse or to extend the language, sometimes for domain-specific languages.

Macros are used to make a sequence of computing instructions available to the programmer as a single program statement, making the programming task less tedious and less error-prone.[2][3] Thus, they are called "macros" because a "big" block of code can be expanded from a "small" sequence of characters. Macros often allow positional or keyword parameters that dictate what the conditional assembler program generates and have been used to create entire programs or program suites according to such variables as operating system, platform or other factors. The term derives from "macro instruction", and such expansions were originally used in generating assembly language code.

Keyboard and mouse macros

edit

Keyboard macros and mouse macros allow short sequences of keystrokes and mouse actions to transform into other, usually more time-consuming, sequences of keystrokes and mouse actions. In this way, frequently used or repetitive sequences of keystrokes and mouse movements can be automated. Separate programs for creating these macros are called macro recorders.

During the 1980s, macro programs – originally SmartKey, then SuperKey, KeyWorks, Prokey – were very popular, first as a means to automatically format screenplays, then for a variety of user-input tasks. These programs were based on the terminate-and-stay-resident mode of operation and applied to all keyboard input, no matter in which context it occurred. They have to some extent fallen into obsolescence following the advent of mouse-driven user interfaces and the availability of keyboard and mouse macros in applications, such as word processors and spreadsheets, making it possible to create application-sensitive keyboard macros.

Keyboard macros can be used in massively multiplayer online role-playing games (MMORPGs) to perform repetitive, but lucrative tasks, thus accumulating resources. As this is done without human effort, it can skew the economy of the game. For this reason, use of macros is a violation of the TOS or EULA of most MMORPGs, and their administrators spend considerable effort to suppress them.[4]

Application macros and scripting

edit

Keyboard and mouse macros that are created using an application's built-in macro features are sometimes called application macros. They are created by carrying out the sequence once and letting the application record the actions. An underlying macro programming language, most commonly a scripting language, with direct access to the features of the application may also exist.

The programmers' text editor Emacs (short for "editing macros") follows this idea to a conclusion. In effect, most of the editor is made of macros. Emacs was originally devised as a set of macros in the editing language TECO; it was later ported to dialects of Lisp.

Another programmers' text editor, Vim (a descendant of vi), also has an implementation of keyboard macros. It can record into a register (macro) what a person types on the keyboard and it can be replayed or edited just like VBA macros for Microsoft Office. Vim also has a scripting language called Vimscript[5] to create macros.

Visual Basic for Applications (VBA) is a programming language included in Microsoft Office from Office 97 through Office 2019 (although it was available in some components of Office prior to Office 97). However, its function has evolved from and replaced the macro languages that were originally included in some of these applications.

XEDIT, running on the Conversational Monitor System (CMS) component of VM, supports macros written in EXEC, EXEC2 and REXX, and some CMS commands were actually wrappers around XEDIT macros. The Hessling Editor (THE), a partial clone of XEDIT, supports Rexx macros using Regina and Open Object REXX (oorexx). Many common applications, and some on PCs, use Rexx as a scripting language.

Macro virus

edit

VBA has access to most Microsoft Windows system calls and executes when documents are opened. This makes it relatively easy to write computer viruses in VBA, commonly known as macro viruses. In the mid-to-late 1990s, this became one of the most common types of computer virus. However, during the late 1990s and to date, Microsoft has been patching and updating its programs.[citation needed] In addition, current anti-virus programs immediately counteract such attacks.

Parameterized and parameterless macro

edit

A parameterized macro is a macro that is able to insert given objects into its expansion. This gives the macro some of the power of a function.

As a simple example, in the C programming language, this is a typical macro that is not a parameterized macro, i.e., a parameterless macro:

 #define PI   3.14159

This causes PI to always be replaced with 3.14159 wherever it occurs. An example of a parameterized macro, on the other hand, is this:

 #define pred(x)  ((x)-1)

What this macro expands to depends on what argument x is passed to it. Here are some possible expansions:

 pred(2)    →  ((2)   -1)
 pred(y+2)  →  ((y+2) -1)
 pred(f(5)) →  ((f(5))-1)

Parameterized macros are a useful source-level mechanism for performing in-line expansion, but in languages such as C where they use simple textual substitution, they have a number of severe disadvantages over other mechanisms for performing in-line expansion, such as inline functions.

The parameterized macros used in languages such as Lisp, PL/I and Scheme, on the other hand, are much more powerful, able to make decisions about what code to produce based on their arguments; thus, they can effectively be used to perform run-time code generation.

Text-substitution macros

edit

Languages such as C and some assembly languages have rudimentary macro systems, implemented as preprocessors to the compiler or assembler. C preprocessor macros work by simple textual substitution at the token, rather than the character level. However, the macro facilities of more sophisticated assemblers, e.g., IBM High Level Assembler (HLASM) can't be implemented with a preprocessor; the code for assembling instructions and data is interspersed with the code for assembling macro invocations.

A classic use of macros is in the computer typesetting system TeX and its derivatives, where most functionality is based on macros.[6]

MacroML is an experimental system that seeks to reconcile static typing and macro systems. Nemerle has typed syntax macros, and one productive way to think of these syntax macros is as a multi-stage computation.

Other examples:

Some major applications have been written as text macro invoked by other applications, e.g., by XEDIT in CMS.

Embeddable languages

edit

Some languages, such as PHP, can be embedded in free-format text, or the source code of other languages. The mechanism by which the code fragments are recognised (for instance, being bracketed by <?php and ?>) is similar to a textual macro language, but they are much more powerful, fully featured languages.

Procedural macros

edit

Macros in the PL/I language are written in a subset of PL/I itself: the compiler executes "preprocessor statements" at compilation time, and the output of this execution forms part of the code that is compiled. The ability to use a familiar procedural language as the macro language gives power much greater than that of text substitution macros, at the expense of a larger and slower compiler. Macros in PL/I, as well as in many assemblers, may have side effects, e.g., setting variables that other macros can access.

Frame technology's frame macros have their own command syntax but can also contain text in any language. Each frame is both a generic component in a hierarchy of nested subassemblies, and a procedure for integrating itself with its subassembly frames (a recursive process that resolves integration conflicts in favor of higher level subassemblies). The outputs are custom documents, typically compilable source modules. Frame technology can avoid the proliferation of similar but subtly different components, an issue that has plagued software development since the invention of macros and subroutines.

Most assembly languages have less powerful procedural macro facilities, for example allowing a block of code to be repeated N times for loop unrolling; but these have a completely different syntax from the actual assembly language.

Syntactic macros

edit

Macro systems—such as the C preprocessor described earlier—that work at the level of lexical tokens cannot preserve the lexical structure reliably. Syntactic macro systems work instead at the level of abstract syntax trees, and preserve the lexical structure of the original program. The most widely used implementations of syntactic macro systems are found in Lisp-like languages. These languages are especially suited for this style of macro due to their uniform, parenthesized syntax (known as S-expressions). In particular, uniform syntax makes it easier to determine the invocations of macros. Lisp macros transform the program structure itself, with the full language available to express such transformations. While syntactic macros are often found in Lisp-like languages, they are also available in other languages such as Prolog,[7] Erlang,[8] Dylan,[9] Scala,[10] Nemerle,[11] Rust,[12] Elixir,[13] Nim,[14] Haxe,[15] and Julia.[16] They are also available as third-party extensions to JavaScript[17] and C#.[18]

Early Lisp macros

edit

Before Lisp had macros, it had so-called FEXPRs, function-like operators whose inputs were not the values computed by the arguments but rather the syntactic forms of the arguments, and whose output were values to be used in the computation. In other words, FEXPRs were implemented at the same level as EVAL, and provided a window into the meta-evaluation layer. This was generally found to be a difficult model to reason about effectively.[19]

In 1963, Timothy Hart proposed adding macros to Lisp 1.5 in AI Memo 57: MACRO Definitions for LISP.[20]

Anaphoric macros

edit

An anaphoric macro is a type of programming macro that deliberately captures some form supplied to the macro which may be referred to by an anaphor (an expression referring to another). Anaphoric macros first appeared in Paul Graham's On Lisp and their name is a reference to linguistic anaphora—the use of words as a substitute for preceding words.

Hygienic macros

edit

In the mid-eighties, a number of papers[21][22] introduced the notion of hygienic macro expansion (syntax-rules), a pattern-based system where the syntactic environments of the macro definition and the macro use are distinct, allowing macro definers and users not to worry about inadvertent variable capture (cf. referential transparency). Hygienic macros have been standardized for Scheme in the R5RS, R6RS, and R7RS standards. A number of competing implementations of hygienic macros exist such as syntax-rules, syntax-case, explicit renaming, and syntactic closures. Both syntax-rules and syntax-case have been standardized in the Scheme standards.

Recently, Racket has combined the notions of hygienic macros with a "tower of evaluators", so that the syntactic expansion time of one macro system is the ordinary runtime of another block of code,[23] and showed how to apply interleaved expansion and parsing in a non-parenthesized language.[24]

A number of languages other than Scheme either implement hygienic macros or implement partially hygienic systems. Examples include Scala, Rust, Elixir, Julia, Dylan, Nim, and Nemerle.

Applications

edit
Evaluation order
Macro systems have a range of uses. Being able to choose the order of evaluation (see lazy evaluation and non-strict functions) enables the creation of new syntactic constructs (e.g. control structures) indistinguishable from those built into the language. For instance, in a Lisp dialect that has cond but lacks if, it is possible to define the latter in terms of the former using macros. For example, Scheme has both continuations and hygienic macros, which enables a programmer to design their own control abstractions, such as looping and early exit constructs, without the need to build them into the language.
Data sub-languages and domain-specific languages
Next, macros make it possible to define data languages that are immediately compiled into code, which means that constructs such as state machines can be implemented in a way that is both natural and efficient.[25]
Binding constructs
Macros can also be used to introduce new binding constructs. The most well-known example is the transformation of let into the application of a function to a set of arguments.

Felleisen conjectures[26] that these three categories make up the primary legitimate uses of macros in such a system. Others have proposed alternative uses of macros, such as anaphoric macros in macro systems that are unhygienic or allow selective unhygienic transformation.

The interaction of macros and other language features has been a productive area of research. For example, components and modules are useful for large-scale programming, but the interaction of macros and these other constructs must be defined for their use together. Module and component-systems that can interact with macros have been proposed for Scheme and other languages with macros. For example, the Racket language extends the notion of a macro system to a syntactic tower, where macros can be written in languages including macros, using hygiene to ensure that syntactic layers are distinct and allowing modules to export macros to other modules.

Macros for machine-independent software

edit

Macros are normally used to map a short string (macro invocation) to a longer sequence of instructions. Another, less common, use of macros is to do the reverse: to map a sequence of instructions to a macro string. This was the approach taken by the STAGE2 Mobile Programming System, which used a rudimentary macro compiler (called SIMCMP) to map the specific instruction set of a given computer into machine-independent macros. Applications (notably compilers) written in these machine-independent macros can then be run without change on any computer equipped with the rudimentary macro compiler. The first application run in such a context is a more sophisticated and powerful macro compiler, written in the machine-independent macro language. This macro compiler is applied to itself, in a bootstrap fashion, to produce a compiled and much more efficient version of itself. The advantage of this approach is that complex applications can be ported from one computer to a very different computer with very little effort (for each target machine architecture, just the writing of the rudimentary macro compiler).[27][28] The advent of modern programming languages, notably C, for which compilers are available on virtually all computers, has rendered such an approach superfluous. This was, however, one of the first instances (if not the first) of compiler bootstrapping.

Assembly language

edit

While macro instructions can be defined by a programmer for any set of native assembler program instructions, typically macros are associated with macro libraries delivered with the operating system allowing access to operating system functions such as

  • peripheral access by access methods (including macros such as OPEN, CLOSE, READ and WRITE)
  • operating system functions such as ATTACH, WAIT and POST for subtask creation and synchronization.[29] Typically such macros expand into executable code, e.g., for the EXIT macroinstruction,
  • a list of define constant instructions, e.g., for the DCB macro—DTF (Define The File) for DOS[30]—or a combination of code and constants, with the details of the expansion depending on the parameters of the macro instruction (such as a reference to a file and a data area for a READ instruction);
  • the executable code often terminated in either a branch and link register instruction to call a routine, or a supervisor call instruction to call an operating system function directly.
  • Generating a Stage 2 job stream for system generation in, e.g., OS/360. Unlike typical macros, sysgen stage 1 macros do not generate data or code to be loaded into storage, but rather use the PUNCH statement to output JCL and associated data.

In older operating systems such as those used on IBM mainframes, full operating system functionality was only available to assembler language programs, not to high level language programs (unless assembly language subroutines were used, of course), as the standard macro instructions did not always have counterparts in routines available to high-level languages.

History

edit

In the mid-1950s, when assembly language programming was the main way to program a computer, macro instruction features were developed to reduce source code (by generating multiple assembly statements from each macro instruction) and to enforce coding conventions (e.g. specifying input/output commands in standard ways).[31] A macro instruction embedded in the otherwise assembly source code would be processed by a macro compiler, a preprocessor to the assembler, to replace the macro with one or more assembly instructions. The resulting code, pure assembly, would be translated to machine code by the assembler.[32]

Two of the earliest programming installations to develop macro languages for the IBM 705 computer were at Dow Chemical Corp. in Delaware and the Air Material Command, Ballistics Missile Logistics Office in California.

Some consider macro instructions as an intermediate step between assembly language programming and the high-level programming languages that followed, such as FORTRAN and COBOL.

By the late 1950s the macro language was followed by the Macro Assemblers. This was a combination of both where one program served both functions, that of a macro pre-processor and an assembler in the same package.[32][failed verification] Early examples are FORTRAN Assembly Program (FAP)[33] and Macro Assembly Program (IBMAP)[34] on the IBM 709, 7094, 7040 and 7044, and Autocoder[35] on the 7070/7072/7074.

In 1959, Douglas E. Eastwood and Douglas McIlroy of Bell Labs introduced conditional and recursive macros into the popular SAP assembler,[36] creating what is known as Macro SAP.[37] McIlroy's 1960 paper was seminal in the area of extending any (including high-level) programming languages through macro processors.[38][36]

Macro Assemblers allowed assembly language programmers to implement their own macro-language and allowed limited portability of code between two machines running the same CPU but different operating systems, for example, early versions of MS-DOS and CP/M-86. The macro library would need to be written for each target machine but not the overall assembly language program. Note that more powerful macro assemblers allowed use of conditional assembly constructs in macro instructions that could generate different code on different machines or different operating systems, reducing the need for multiple libraries.[citation needed]

In the 1980s and early 1990s, desktop PCs were only running at a few MHz and assembly language routines were commonly used to speed up programs written in C, Fortran, Pascal and others. These languages, at the time, used different calling conventions. Macros could be used to interface routines written in assembly language to the front end of applications written in almost any language. Again, the basic assembly language code remained the same, only the macro libraries needed to be written for each target language.[citation needed]

In modern operating systems such as Unix and its derivatives, operating system access is provided through subroutines, usually provided by dynamic libraries. High-level languages such as C offer comprehensive access to operating system functions, obviating the need for assembler language programs for such functionality.[citation needed]

Moreover, standard libraries of several newer programming languages, such as Go, actively discourage the use of syscalls in favor of platform-agnostic libraries as well if not necessary, to improve portability and security.[39]

See also

edit

References

edit
  1. ^ Oxford English Dictionary, s.v. macro, macro-instruction, and macro-
  2. ^ Greenwald, Irwin D.; Kane, Maureen (April 1959). "The Share 709 System: Programming and Modification". Journal of the ACM. 6 (2). New York, NY, USA: ACM: 128–133. doi:10.1145/320964.320967. S2CID 27424222. One of the important uses of programmer macros is to save time and clerical-type errors in writing sequence of instructions which are often repeated in the course of a program.
  3. ^ Strachey, Christopher (October 1965). "A General Purpose Macrogenerator". Computer Journal. 8 (3): 225–241. doi:10.1093/comjnl/8.3.225.
  4. ^ "Runescape: The Massive Online Adventure Game by Jagex Ltd". Retrieved 2025-08-05.
  5. ^ "scripts: vim online". www.vim.org.
  6. ^ Fine, Johnathan. "T E X forever!" (PDF). Tex Users Group. p. 141. Retrieved 6 December 2024. TEX has a macro programming language, which allows features to be added.
  7. ^ "Prolog Macros". www.metalevel.at. Retrieved 2025-08-05.
  8. ^ "Erlang -- Preprocessor". erlang.org. Retrieved 2025-08-05.
  9. ^ "The Dylan Macro System — Open Dylan". opendylan.org. Retrieved 2025-08-05.
  10. ^ "Def Macros". Scala Documentation. Retrieved 2025-08-05.
  11. ^ "About - Nemerle programming language official site". nemerle.org. Retrieved 2025-08-05.
  12. ^ "Macros - The Rust Programming Language". doc.rust-lang.org. Retrieved 2025-08-05.
  13. ^ "Macros". elixir-lang.github.com. Retrieved 2025-08-05.
  14. ^ "macros". nim-lang.org. Retrieved 2025-08-05.
  15. ^ "Macros". Haxe - The Cross-platform Toolkit.
  16. ^ "Metaprogramming · The Julia Language". docs.julialang.org. Retrieved 2025-08-05.
  17. ^ "Sweet.js - Hygienic Macros for JavaScript". www.sweetjs.org.
  18. ^ "LeMP Home Page · Enhanced C#". ecsharp.net.
  19. ^ Marshall, Joe. "untitled email". Retrieved May 3, 2012.
  20. ^ Hart, Timothy P. (October 1963). "MACRO Definitions for LISP". AI Memos. hdl:1721.1/6111. AIM-057.
  21. ^ Kohlbecker, Eugene; Friedman, Daniel; Felleisen, Matthias; Duba, Bruce (1986). "Hygienic Macro Expansion". LFP '86: Proceedings of the 1986 ACM conference on LISP and functional programming. pp. 151–161. doi:10.1145/319838.319859. ISBN 0897912004.
  22. ^ [1] Clinger, Rees. "Macros that Work"
  23. ^ Flatt, Matthew. "Composable and compilable macros: you want it when?" (PDF).
  24. ^ Rafkind, Jon; Flatt, Matthew. "Honu: Syntactic Extension for Algebraic Notation through Enforestation" (PDF).
  25. ^ "Automata via Macros". cs.brown.edu.
  26. ^ [2], Matthias Felleisen, LL1 mailing list posting
  27. ^ Orgass, Richard J.; Waite, William M. (September 1969). "A base for a mobile programming system". Communications of the ACM. 12 (9). New York, NY, USA: ACM: 507–510. doi:10.1145/363219.363226. S2CID 8164996.
  28. ^ Waite, William M. (July 1970). "The mobile programming system: STAGE2". Communications of the ACM. 13 (7). New York, NY, USA: ACM: 415–421. doi:10.1145/362686.362691. S2CID 11733598.
  29. ^ "University of North Florida" (PDF). Archived from the original (PDF) on 2025-08-05. Retrieved 2025-08-05.
  30. ^ "DTF (DOS/VSE)". IBM.
  31. ^ "IBM Knowledge Center". IBM Knowledge Center. 16 August 2013.
  32. ^ a b "Assembler Language Macro Instructions". Cisco.
  33. ^ FORTRAN ASSEMBLY PROGRAM (FAP) for the IBM 709/7090 (PDF). 709/7090 Data Processing System Bulletin. IBM. 1961. J28-6098-1.
  34. ^ IBM 7090/7094 Programming Systems: - Macro Assembly Program (MAP) Language (PDF). Systems Reference Library. 1964. C28-6311-4. Retrieved January 12, 2025.
  35. ^ Reference Manual - IBM 7070 Series Programming Systems - Autocoder (PDF). IBM Systems Reference Library (First ed.). IBM Corporation . 1961. C28-6121-0.
  36. ^ a b Holbrook, Bernard D.; Brown, W. Stanley. "Computing Science Technical Report No. 99 – A History of Computing Research at Bell Laboratories (1937–1975)". Bell Labs. Archived from the original on September 2, 2014. Retrieved February 2, 2020.
  37. ^ "Macro SAP – Macro compiler modification of SAP". HOPL: Online Historical Encyclopaedia of Programming Languages. Archived from the original on August 13, 2008.
  38. ^ Layzell, P. (1985). "The History of Macro Processors in Programming Language Extensibility". The Computer Journal. 28 (1): 29–33. doi:10.1093/comjnl/28.1.29.
  39. ^ "syscall package - syscall - Go Packages". pkg.go.dev. Retrieved 2025-08-05.
edit
海参是补什么 清真是什么意思 雨中漫步是什么意思 牛仔是什么面料 什么时辰出生最好
塑料袋属于什么垃圾 痛风吃什么中药最有效 屁为什么是臭的 锲而不舍下一句是什么 ivy是什么意思
大拇指有黑色竖纹是什么原因 八月一日是什么日子 人为什么会过敏 四不伤害是指什么 痛风用什么药
阿莫西林有什么副作用 什么是介质 泌乳素高有什么症状 办健康证需要带什么 这次是我真的决定离开是什么歌
ecco是什么品牌hcv8jop9ns1r.cn 甲状腺激素是什么hcv8jop8ns2r.cn 喝冰糖水有什么好处和坏处hcv8jop1ns9r.cn 上海有什么好玩的地方旅游景点hcv9jop4ns7r.cn 字母圈什么意思hcv9jop5ns8r.cn
油麦菜不能和什么一起吃hcv9jop2ns8r.cn 西洋参吃了有什么好处hcv8jop4ns7r.cn 中年人手抖是什么原因hcv9jop2ns8r.cn 总是很困想睡觉是什么原因hcv8jop3ns0r.cn 铁蛋白高吃什么药能降下来hcv9jop3ns2r.cn
什么榴莲好吃hcv8jop3ns8r.cn 油漆用什么能洗掉hcv7jop5ns4r.cn 些几是什么意思hcv8jop8ns5r.cn 28岁属什么生肖hcv8jop9ns9r.cn uhd是什么意思hcv9jop7ns1r.cn
骨科是什么梗hcv7jop4ns6r.cn 翡翠什么样的好hcv8jop4ns0r.cn 为什么会心肌缺血hcv9jop0ns4r.cn cocoon是什么品牌hcv8jop5ns0r.cn fda认证是什么意思hcv7jop6ns8r.cn
百度