28 lines
1.6 KiB
Factor
28 lines
1.6 KiB
Factor
USING: help.markup help.syntax quotations kernel ;
|
|
IN: macros
|
|
|
|
HELP: MACRO:
|
|
{ $syntax "MACRO: word ( inputs... -- ) definition... ;" }
|
|
{ $description "Defines a compile-time code transformation. If all inputs to the word are literal and the word calling the macro has a static stack effect, then the macro body is invoked at compile-time to produce a quotation; this quotation is then spliced into the compiled code. If the inputs are not literal, or if the word is invoked from a word which does not have a static stack effect, the macro body will execute every time and the result will be passed to " { $link call } "."
|
|
$nl
|
|
"The stack effect declaration must be present because it tells the compiler how many literal inputs to expect."
|
|
}
|
|
{ $notes
|
|
"Semantically, the following two definitions are equivalent:"
|
|
{ $code "MACRO: foo ... ;" }
|
|
{ $code ": foo ... call ;" }
|
|
"However, the compiler folds in macro definitions at compile-time where possible; if the macro body performs an expensive calculation, it can lead to a performance boost."
|
|
} ;
|
|
|
|
HELP: macro
|
|
{ $class-description "Class of words defined with " { $link POSTPONE: MACRO: } "." } ;
|
|
|
|
ARTICLE: "macros" "Macros"
|
|
"The " { $vocab-link "macros" } " vocabulary implements macros in the Lisp sense; compile-time code transformers and generators. Macros can be used to calculate lookup tables and generate code at compile time, which can improve performance, the level of abstraction and simplify code."
|
|
$nl
|
|
"Defining new macros:"
|
|
{ $subsection POSTPONE: MACRO: }
|
|
"Macros are really just a very thin layer of syntax sugar over " { $link "compiler-transforms" } "." ;
|
|
|
|
ABOUT: "macros"
|