[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] branch main updated: New module (oop goops keyword-forma
From: |
Mikael Djurfeldt |
Subject: |
[Guile-commits] branch main updated: New module (oop goops keyword-formals) |
Date: |
Tue, 26 Nov 2024 13:38:08 -0500 |
This is an automated email from the git hooks/post-receive script.
mdj pushed a commit to branch main
in repository guile.
The following commit(s) were added to refs/heads/main by this push:
new fe05646f7 New module (oop goops keyword-formals)
fe05646f7 is described below
commit fe05646f7c5881b6b53060d552026d41dd30ff35
Author: Mikael Djurfeldt <mikael@djurfeldt.com>
AuthorDate: Tue Nov 26 19:02:07 2024 +0100
New module (oop goops keyword-formals)
This module replaces the method and define-method bindings with their
method* and define-method* counterparts, for use by users who prefer not
to use both kinds of syntactic forms.
* module/oop/goops/keyword-formals.scm: New module.
* am/bootstrap.am: Added
* doc/ref/goops.texi: Document this change.
---
am/bootstrap.am | 1 +
doc/ref/goops.texi | 31 +++++++++++++++++++++++++++++++
module/oop/goops/keyword-formals.scm | 31 +++++++++++++++++++++++++++++++
3 files changed, 63 insertions(+)
diff --git a/am/bootstrap.am b/am/bootstrap.am
index d4a415e35..96023d83d 100644
--- a/am/bootstrap.am
+++ b/am/bootstrap.am
@@ -271,6 +271,7 @@ SOURCES = \
oop/goops/stklos.scm \
oop/goops/accessors.scm \
oop/goops/simple.scm \
+ oop/goops/keyword-formals.scm \
\
scheme/base.scm \
scheme/case-lambda.scm \
diff --git a/doc/ref/goops.texi b/doc/ref/goops.texi
index e7d1923c8..1a75af89f 100644
--- a/doc/ref/goops.texi
+++ b/doc/ref/goops.texi
@@ -954,11 +954,39 @@ the rest argument, as for @code{define*}.
@end deffn
@menu
+* Advanced argument handling in method and define-method::
* Type dispatch and redefinition for advanced argument handling::
* next-method call in method*::
* Advanced argument handling design choices::
@end menu
+@node Advanced argument handling in method and define-method
+@subsubsection Advanced argument handling in method and define-method
+
+Some users may find it more natural not to have to choose between
+@code{define-method} and @code{define-method*} in their code.
+
+It turns out that @code{method*} and @code{define-method*} can do just
+fine also for ordinary methods without keyword formals. They take
+marginally longer to compile but result in the same code as
+@code{method} and @code{define-method} if keyword formals are absent.
+
+For this reason, we provide a module (oop goops keyword-formals) which
+replaces the standard @code{method} and @code{define-method} bindings
+with their keyword formal counterparts. It can be used like this:
+
+@lisp
+(use-modules (oop goops) (oop goops keyword-formals))
+@end lisp
+
+or
+
+@lisp
+(define-module (foo)
+ #:use-module (oop goops)
+ #:use-module (oop goops keyword-formals))
+@end lisp
+
@node Type dispatch and redefinition for advanced argument handling
@subsubsection Type dispatch and redefinition for advanced argument handling
@@ -1082,6 +1110,9 @@ to only provide the simpler functionality (through
@code{method} and
@code{define-method}).
@end enumerate
+However, note that users who prefer to only use @code{define-method} can
+do so. @xref{Advanced argument handling in method and define-method}.
+
Second, we have chosen not to do type dispatch on optional or keyword
arguments. Reasons include:
diff --git a/module/oop/goops/keyword-formals.scm
b/module/oop/goops/keyword-formals.scm
new file mode 100644
index 000000000..92c064de4
--- /dev/null
+++ b/module/oop/goops/keyword-formals.scm
@@ -0,0 +1,31 @@
+;;; installed-scm-file
+
+;;;; Copyright (C) 2024 Free Software Foundation, Inc.
+;;;;
+;;;; This library is free software; you can redistribute it and/or
+;;;; modify it under the terms of the GNU Lesser General Public
+;;;; License as published by the Free Software Foundation; either
+;;;; version 3 of the License, or (at your option) any later version.
+;;;;
+;;;; This library is distributed in the hope that it will be useful,
+;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;;;; Lesser General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU Lesser General Public
+;;;; License along with this library; if not, write to the Free Software
+;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
+;;;;
+
+
+;;; This module replaces the standard method and define-method syntax
+;;; with versions with advanced argument handling. This doesn't incur
+;;; overhead for methods without keyword formals except marginally for
+;;; compilation.
+;;;
+(define-module (oop goops keyword-formals)
+ #:use-module ((oop goops)
+ #:select ((method* . method)
+ (define-method* . define-method)))
+ #:re-export-and-replace (method define-method))
+
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Guile-commits] branch main updated: New module (oop goops keyword-formals),
Mikael Djurfeldt <=