Hygienic macro (original) (raw)
Hygienic macros are macros whose expansion is guaranteed not to cause the accidental of identifiers. They are a feature of programming languages such as Scheme, Dylan, Rust, Nim, and Julia. The general problem of accidental capture was well known within the Lisp community prior to the introduction of hygienic macros. Macro writers would use language features that would generate unique identifiers (e.g., gensym) or use obfuscated identifiers in order to avoid the problem. Hygienic macros are a programmatic solution to the capture problem that is integrated into the macro expander itself. The term "hygiene" was coined in Kohlbecker et al.'s 1986 paper that introduced hygienic macro expansion, inspired by the terminology used in mathematics.
Property | Value |
---|---|
dbo:abstract | Hygienic macros are macros whose expansion is guaranteed not to cause the accidental of identifiers. They are a feature of programming languages such as Scheme, Dylan, Rust, Nim, and Julia. The general problem of accidental capture was well known within the Lisp community prior to the introduction of hygienic macros. Macro writers would use language features that would generate unique identifiers (e.g., gensym) or use obfuscated identifiers in order to avoid the problem. Hygienic macros are a programmatic solution to the capture problem that is integrated into the macro expander itself. The term "hygiene" was coined in Kohlbecker et al.'s 1986 paper that introduced hygienic macro expansion, inspired by the terminology used in mathematics. (en) 健全なマクロ(Hygienic macros)とは、識別子が誤って捕捉されてしまう問題が起こらないことが保証されているマクロである。SchemeやDylanなどのプログラミング言語はこの機能を持っている。識別子の誤捕捉という問題は、健全なマクロが導入される以前からLispコミュニティで広く知られていた。マクロの作者は、ユニークな識別子を生成するgensymなどの言語機能を使ったり、通常使用されないような複雑な識別子を用いることで、この問題を回避してきた。健全なマクロは、誤捕捉の問題を解決する方法をマクロの展開機能に組み込むことで、問題をプログラマティックに解決している。「健全」を意味する"hygiene"という語は、Kohlbeckerらが1986年に書いた健全なマクロの展開を導入した論文で、数学の用語の影響を受けて初めて使用された。 (ja) 卫生宏(英語:hygienic macro),又称干净宏,是指其扩展保证不会导致意外捕获标识符的宏。Scheme、Dylan、Rust、Nim和Julia等编程语言都有这一特性。在引入卫生宏之前,Lisp社区有众所周知的意外捕获的问题。宏编写者会使用产生唯一标识符的语言特性(如gensym)或使用混淆的标识符来避免这一问题。卫生宏是对捕获问题的一种程序化解决方案,集成在宏扩展器本身中。「卫生」这一术语是在Kohlbecker等人1986年的论文中创造的,灵感来自数学中使用的术语。 (zh) |
dbo:wikiPageExternalLink | https://docs.racket-lang.org/reference/stxparam.html%23%28tech._syntax._parameter%29 http://www.cs.indiana.edu/~dyb/pubs/tr356.pdf http://community.schemewiki.org/%3Fsimpler-macros http://community.schemewiki.org/%3Fsimpler-macros-examples http://community.schemewiki.org/%3Fsyntactic-closures http://community.schemewiki.org/%3Fsyntax-case http://community.schemewiki.org/%3Fsyntax-case-examples http://community.schemewiki.org/%3Fsyntax-rules |
dbo:wikiPageID | 373314 (xsd:integer) |
dbo:wikiPageLength | 20907 (xsd:nonNegativeInteger) |
dbo:wikiPageRevisionID | 1092649313 (xsd:integer) |
dbo:wikiPageWikiLink | dbr:Scheme_(programming_language) dbr:On_Lisp dbc:Dylan_(programming_language) dbr:Julia_(programming_language) dbr:Preprocessor dbr:MacLisp dbr:Common_Lisp dbr:Anaphoric_macro dbr:Rust_(programming_language) dbr:Elixir_(programming_language) dbr:Lisp_(programming_language) dbc:Scheme_(programming_language) dbc:Metaprogramming dbr:C_(programming_language) dbr:C_preprocessor dbr:Haxe_(programming_language) dbr:Dylan_(programming_language) dbr:Nim_(programming_language) dbr:Partial_evaluation dbr:Referential_transparency dbr:Mitchell_Wand dbr:Mary_(programming_language) dbc:Transformation_languages dbr:Identifiers dbr:Nemerle dbr:R6RS dbr:Racket_(programming_language) dbr:Raku_(programming_language) dbr:Macro_(computer_science) dbr:Pattern_matching dbr:Scope_(computer_science) dbr:Variable_shadowing dbr:Undefined_behavior dbr:Programming_language dbr:Syntactic_closure dbr:Paul_Graham_(computer_programmer) dbr:Elisp |
dbp:wikiPageUsesTemplate | dbt:Cquote dbt:More_footnotes dbt:Reflist dbt:Technical |
dcterms:subject | dbc:Dylan_(programming_language) dbc:Scheme_(programming_language) dbc:Metaprogramming dbc:Transformation_languages |
gold:hypernym | dbr:Macros |
rdf:type | yago:WikicatTransformationLanguages yago:Abstraction100002137 yago:Communication100033020 yago:Language106282651 |
rdfs:comment | Hygienic macros are macros whose expansion is guaranteed not to cause the accidental of identifiers. They are a feature of programming languages such as Scheme, Dylan, Rust, Nim, and Julia. The general problem of accidental capture was well known within the Lisp community prior to the introduction of hygienic macros. Macro writers would use language features that would generate unique identifiers (e.g., gensym) or use obfuscated identifiers in order to avoid the problem. Hygienic macros are a programmatic solution to the capture problem that is integrated into the macro expander itself. The term "hygiene" was coined in Kohlbecker et al.'s 1986 paper that introduced hygienic macro expansion, inspired by the terminology used in mathematics. (en) 健全なマクロ(Hygienic macros)とは、識別子が誤って捕捉されてしまう問題が起こらないことが保証されているマクロである。SchemeやDylanなどのプログラミング言語はこの機能を持っている。識別子の誤捕捉という問題は、健全なマクロが導入される以前からLispコミュニティで広く知られていた。マクロの作者は、ユニークな識別子を生成するgensymなどの言語機能を使ったり、通常使用されないような複雑な識別子を用いることで、この問題を回避してきた。健全なマクロは、誤捕捉の問題を解決する方法をマクロの展開機能に組み込むことで、問題をプログラマティックに解決している。「健全」を意味する"hygiene"という語は、Kohlbeckerらが1986年に書いた健全なマクロの展開を導入した論文で、数学の用語の影響を受けて初めて使用された。 (ja) 卫生宏(英語:hygienic macro),又称干净宏,是指其扩展保证不会导致意外捕获标识符的宏。Scheme、Dylan、Rust、Nim和Julia等编程语言都有这一特性。在引入卫生宏之前,Lisp社区有众所周知的意外捕获的问题。宏编写者会使用产生唯一标识符的语言特性(如gensym)或使用混淆的标识符来避免这一问题。卫生宏是对捕获问题的一种程序化解决方案,集成在宏扩展器本身中。「卫生」这一术语是在Kohlbecker等人1986年的论文中创造的,灵感来自数学中使用的术语。 (zh) |
rdfs:label | Hygienic macro (en) 健全なマクロ (ja) 卫生宏 (zh) |
owl:sameAs | freebase:Hygienic macro yago-res:Hygienic macro wikidata:Hygienic macro dbpedia-ja:Hygienic macro dbpedia-zh:Hygienic macro https://global.dbpedia.org/id/gkVi |
prov:wasDerivedFrom | wikipedia-en:Hygienic_macro?oldid=1092649313&ns=0 |
foaf:isPrimaryTopicOf | wikipedia-en:Hygienic_macro |
is dbo:wikiPageRedirects of | dbr:Scheme_macros_system dbr:Syntax-case dbr:Syntax-rules dbr:Hygeinic_macro dbr:Hygienc_macro dbr:Hygienic_macros dbr:Define-syntax dbr:Structural_macros |
is dbo:wikiPageWikiLink of | dbr:Qualia dbr:Scheme_(programming_language) dbr:M-expression dbr:MLisp dbr:Metalinguistic_abstraction dbr:Julia_(programming_language) dbr:List_of_programming_languages_by_type dbr:Anaphoric_macro dbr:SISC dbr:Daniel_P._Friedman dbr:William_Clinger_(computer_scientist) dbr:Chicken_(Scheme_implementation) dbr:Scheme_macros_system dbr:Metaprogramming dbr:Racket_(programming_language) dbr:Macro_(computer_science) dbr:Syntactic_closure dbr:Syntax-case dbr:Syntax-rules dbr:Hygeinic_macro dbr:Hygienc_macro dbr:Hygienic_macros dbr:Define-syntax dbr:Structural_macros |
is foaf:primaryTopic of | wikipedia-en:Hygienic_macro |