aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorBasil L. Contovounesios2019-04-17 16:34:47 +0100
committerBasil L. Contovounesios2019-04-22 13:48:20 +0100
commit4430a9b54fca266e48d0eb8b72d83706910f10b8 (patch)
tree182029118aaac0c6702ac50dc787a3e0c952b891 /doc
parenta2a51b4e94d3e058a71815cb309a21b707c3473b (diff)
downloademacs-4430a9b54fca266e48d0eb8b72d83706910f10b8.tar.gz
emacs-4430a9b54fca266e48d0eb8b72d83706910f10b8.zip
Improve pure and side-effect-free docs
For discussion, see thread starting at: https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00316.html * doc/lispref/customize.texi (Composite Types): Do not overspecify :match-alternatives predicates. * doc/lispref/eval.texi (Intro Eval): Anchor definition of "side effect" for cross-referencing... * doc/lispref/functions.texi (What Is a Function): ...from here. Define what a pure function is. * doc/lispref/internals.texi (Writing Emacs Primitives): Describe currently preferred approach to marking primitives as pure and side-effect-free. * doc/lispref/symbols.texi (Standard Properties): Expand description of pure and side-effect-free properties.
Diffstat (limited to 'doc')
-rw-r--r--doc/lispref/customize.texi8
-rw-r--r--doc/lispref/eval.texi1
-rw-r--r--doc/lispref/functions.texi7
-rw-r--r--doc/lispref/internals.texi7
-rw-r--r--doc/lispref/symbols.texi15
5 files changed, 25 insertions, 13 deletions
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index f71dedfd8b0..02eefe0f585 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -950,10 +950,10 @@ possibilities:
950 950
951@itemize @bullet 951@itemize @bullet
952@item 952@item
953A predicate---that is, a function of one argument that has no side 953A predicate---that is, a function of one argument that returns either
954effects, and returns either @code{nil} or non-@code{nil} according to 954@code{nil} or non-@code{nil} according to the argument. Using a
955the argument. Using a predicate in the list says that objects for which 955predicate in the list says that objects for which the predicate
956the predicate returns non-@code{nil} are acceptable. 956returns non-@code{nil} are acceptable.
957 957
958@item 958@item
959A quoted constant---that is, @code{'@var{object}}. This sort of element 959A quoted constant---that is, @code{'@var{object}}. This sort of element
diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi
index db42dfb6373..39c5a1ec506 100644
--- a/doc/lispref/eval.texi
+++ b/doc/lispref/eval.texi
@@ -87,6 +87,7 @@ also temporarily alter the environment by binding variables
87(@pxref{Local Variables}). 87(@pxref{Local Variables}).
88 88
89@cindex side effect 89@cindex side effect
90@anchor{Definition of side effect}
90 Evaluating a form may also make changes that persist; these changes 91 Evaluating a form may also make changes that persist; these changes
91are called @dfn{side effects}. An example of a form that produces a 92are called @dfn{side effects}. An example of a form that produces a
92side effect is @code{(setq foo 1)}. 93side effect is @code{(setq foo 1)}.
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index 222f863c988..97f7fb9f79e 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -38,11 +38,16 @@ define them.
38@cindex return value 38@cindex return value
39@cindex value of function 39@cindex value of function
40@cindex argument 40@cindex argument
41@cindex pure function
41 In a general sense, a function is a rule for carrying out a 42 In a general sense, a function is a rule for carrying out a
42computation given input values called @dfn{arguments}. The result of 43computation given input values called @dfn{arguments}. The result of
43the computation is called the @dfn{value} or @dfn{return value} of the 44the computation is called the @dfn{value} or @dfn{return value} of the
44function. The computation can also have side effects, such as lasting 45function. The computation can also have side effects, such as lasting
45changes in the values of variables or the contents of data structures. 46changes in the values of variables or the contents of data structures
47(@pxref{Definition of side effect}). A @dfn{pure function} is a
48function which, in addition to having no side effects, always returns
49the same value for the same combination of arguments, regardless of
50external factors such as machine type or system state.
46 51
47 In most computer languages, every function has a name. But in Lisp, 52 In most computer languages, every function has a name. But in Lisp,
48a function in the strictest sense has no name: it is an object which 53a function in the strictest sense has no name: it is an object which
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index fc5ce594e61..25892d4b57c 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -1031,10 +1031,9 @@ number of arguments. They work by calling @code{Ffuncall}.
1031@file{lisp.h} contains the definitions for some important macros and 1031@file{lisp.h} contains the definitions for some important macros and
1032functions. 1032functions.
1033 1033
1034 If you define a function which is side-effect free, update the code 1034 If you define a function which is side-effect free or pure, give it
1035in @file{byte-opt.el} that binds @code{side-effect-free-fns} and 1035a non-@code{nil} @code{side-effect-free} or @code{pure} property,
1036@code{side-effect-and-error-free-fns} so that the compiler optimizer 1036respectively (@pxref{Standard Properties}).
1037knows about it.
1038 1037
1039@node Writing Dynamic Modules 1038@node Writing Dynamic Modules
1040@section Writing Dynamically-Loaded Modules 1039@section Writing Dynamically-Loaded Modules
diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi
index a214a2d3fd8..5d71fb39a25 100644
--- a/doc/lispref/symbols.texi
+++ b/doc/lispref/symbols.texi
@@ -558,9 +558,12 @@ deleted from the local value of a hook variable when changing major
558modes. @xref{Setting Hooks}. 558modes. @xref{Setting Hooks}.
559 559
560@item pure 560@item pure
561@cindex @code{pure} property
561If the value is non-@code{nil}, the named function is considered to be 562If the value is non-@code{nil}, the named function is considered to be
562side-effect free. Calls with constant arguments can be evaluated at 563pure (@pxref{What Is a Function}). Calls with constant arguments can
563compile time. This may shift run time errors to compile time. 564be evaluated at compile time. This may shift run time errors to
565compile time. Not to be confused with pure storage (@pxref{Pure
566Storage}).
564 567
565@item risky-local-variable 568@item risky-local-variable
566If the value is non-@code{nil}, the named variable is considered risky 569If the value is non-@code{nil}, the named variable is considered risky
@@ -579,9 +582,13 @@ The value specifies a function for determining safe file-local values
579for the named variable. @xref{File Local Variables}. 582for the named variable. @xref{File Local Variables}.
580 583
581@item side-effect-free 584@item side-effect-free
585@cindex @code{side-effect-free} property
582A non-@code{nil} value indicates that the named function is free of 586A non-@code{nil} value indicates that the named function is free of
583side-effects, for determining function safety (@pxref{Function 587side effects (@pxref{What Is a Function}), so the byte compiler may
584Safety}) as well as for byte compiler optimizations. Do not set it. 588ignore a call whose value is unused. If the property's value is
589@code{error-free}, the byte compiler may even delete such unused
590calls. In addition to byte compiler optimizations, this property is
591also used for determining function safety (@pxref{Function Safety}).
585 592
586@item variable-documentation 593@item variable-documentation
587If non-@code{nil}, this specifies the named variable's documentation 594If non-@code{nil}, this specifies the named variable's documentation