diff options
Diffstat (limited to 'doc/ref/api-languages.texi')
-rw-r--r-- | doc/ref/api-languages.texi | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/doc/ref/api-languages.texi b/doc/ref/api-languages.texi index 763e79859..2114258e5 100644 --- a/doc/ref/api-languages.texi +++ b/doc/ref/api-languages.texi @@ -8,13 +8,13 @@ @section Support for Other Languages In addition to Scheme, a user may write a Guile program in an increasing -number of other languages. Currently supported languages include Emacs +number of other languages. Currently supported languages include Emacs Lisp and ECMAScript. Guile is still fundamentally a Scheme, but it tries to support a wide variety of language building-blocks, so that other languages can be -implemented on top of Guile. This allows users to write or extend -applications in languages other than Scheme, too. This section describes +implemented on top of Guile. This allows users to write or extend +applications in languages other than Scheme, too. This section describes the languages that have been implemented. (For details on how to implement a language, @xref{Compiling to the @@ -36,7 +36,7 @@ Guile: at the REPL, and programmatically, via @code{compile}, The REPL is Guile's command prompt (@pxref{Using Guile Interactively}). The REPL has a concept of the ``current language'', which defaults to -Scheme. The user may change that language, via the meta-command +Scheme. The user may change that language, via the meta-command @code{,language}. For example, the following meta-command enables Emacs Lisp input: @@ -64,9 +64,9 @@ Lispy languages, which have a straightforward datum representation. Other languages that need more parsing are better dealt with as strings. The easiest way to deal with syntax-heavy language is with files, via -@code{compile-file} and friends. However it is possible to invoke a +@code{compile-file} and friends. However it is possible to invoke a language's reader on a port, and then compile the resulting expression -(which is a datum at that point). For more information, +(which is a datum at that point). For more information, @xref{Compilation}. For more details on introspecting aspects of different languages, @@ -76,16 +76,16 @@ For more details on introspecting aspects of different languages, @subsection Emacs Lisp Emacs Lisp (Elisp) is a dynamically-scoped Lisp dialect used in the -Emacs editor. @xref{top,,Overview,elisp,Emacs Lisp}, for more +Emacs editor. @xref{top,,Overview,elisp,Emacs Lisp}, for more information on Emacs Lisp. We hope that eventually Guile's implementation of Elisp will be good -enough to replace Emacs' own implementation of Elisp. For that reason, +enough to replace Emacs' own implementation of Elisp. For that reason, we have thought long and hard about how to support the various features of Elisp in a performant and compatible manner. Readers familiar with Emacs Lisp might be curious about how exactly -these various Elisp features are supported in Guile. The rest of this +these various Elisp features are supported in Guile. The rest of this section focuses on addressing these concerns of the Elisp elect. @menu @@ -103,8 +103,8 @@ It is false, and it is the end-of-list; thus it is a boolean, and a list as well. Guile has chosen to support @code{nil} as a separate value, distinct -from @code{#f} and @code{'()}. This allows existing Scheme and Elisp -code to maintain their current semantics. @code{nil}, which in Elisp +from @code{#f} and @code{'()}. This allows existing Scheme and Elisp +code to maintain their current semantics. @code{nil}, which in Elisp would just be written and read as @code{nil}, in Scheme has the external representation @code{#nil}. @@ -127,7 +127,7 @@ Emacs Lisp code, else return @code{#f}. @end deffn This decision to have @code{nil} as a low-level distinct value -facilitates interoperability between the two languages. Guile has chosen +facilitates interoperability between the two languages. Guile has chosen to have Scheme deal with @code{nil} as follows: @example @@ -146,14 +146,14 @@ scm_is_null (SCM_ELISP_NIL) @result{} 1 In this way, a version of @code{fold} written in Scheme can correctly fold a function written in Elisp (or in fact any other language) over a -nil-terminated list, as Elisp makes. The converse holds as well; a +nil-terminated list, as Elisp makes. The converse holds as well; a version of @code{fold} written in Elisp can fold over a @code{'()}-terminated list, as made by Scheme. On a low level, the bit representations for @code{#f}, @code{#t}, @code{nil}, and @code{'()} are made in such a way that they differ by only one bit, and so a test for, for example, @code{#f}-or-@code{nil} -may be made very efficiently. See @code{libguile/boolean.h}, for more +may be made very efficiently. See @code{libguile/boolean.h}, for more information. @subsubheading Equality @@ -189,8 +189,8 @@ However, in Elisp, @code{'()}, @code{#f}, and @code{nil} are all @end example These choices facilitate interoperability between Elisp and Scheme code, -but they are not perfect. Some code that is correct standard Scheme is -not correct in the presence of a second false and null value. For +but they are not perfect. Some code that is correct standard Scheme is +not correct in the presence of a second false and null value. For example: @example @@ -220,7 +220,7 @@ Here, @code{my-length} will raise an error if @var{l} is a Both of these examples are correct standard Scheme, but, depending on what they really want to do, they are not correct Guile Scheme. Correctly written, they would test the @emph{properties} of falsehood or -nullity, not the individual members of that set. That is to say, they +nullity, not the individual members of that set. That is to say, they should use @code{not} or @code{null?} to test for falsehood or nullity, not @code{eq?} or @code{memv} or the like. @@ -254,14 +254,14 @@ This problem has a mirror-image case in Elisp: @end example Guile can warn when compiling code that has equality comparisons with -@code{#f}, @code{'()}, or @code{nil}. @xref{Compilation}, for details. +@code{#f}, @code{'()}, or @code{nil}. @xref{Compilation}, for details. @node Dynamic Binding @subsubsection Dynamic Binding In contrast to Scheme, which uses ``lexical scoping'', Emacs Lisp scopes -its variables dynamically. Guile supports dynamic scoping with its -``fluids'' facility. @xref{Fluids and Dynamic States}, for more +its variables dynamically. Guile supports dynamic scoping with its +``fluids'' facility. @xref{Fluids and Dynamic States}, for more information. @node Other Elisp Features @@ -269,7 +269,7 @@ information. Buffer-local and mode-local variables should be mentioned here, along with buckybits on characters, Emacs primitive data types, the -Lisp-2-ness of Elisp, and other things. Contributions to the +Lisp-2-ness of Elisp, and other things. Contributions to the documentation are most welcome! @node ECMAScript @@ -277,11 +277,11 @@ documentation are most welcome! @url{http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf,ECMAScript} was not the first non-Schemey language implemented by Guile, but it was -the first implemented for Guile's bytecode compiler. The goal was to +the first implemented for Guile's bytecode compiler. The goal was to support ECMAScript version 3.1, a relatively small language, but the -implementor was completely irresponsible and got distracted by other +implementer was completely irresponsible and got distracted by other things before finishing the standard library, and even some bits of the -syntax. So, ECMAScript does deserve a mention in the manual, but it +syntax. So, ECMAScript does deserve a mention in the manual, but it doesn't deserve an endorsement until its implementation is completed, perhaps by some more responsible hacker. |