Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.forth > #14025
| From | Bernd Paysan <bernd.paysan@gmx.de> |
|---|---|
| Newsgroups | comp.lang.forth |
| Subject | Re: Quotations revisited |
| Date | 2012-07-15 23:53 +0200 |
| Organization | 1&1 Internet AG |
| Message-ID | <jtve49$99d$1@online.de> (permalink) |
| References | <00808889968435@frunobulax.edu> <50031807.129829772@192.168.0.50> |
Stephen Pelc wrote:
> On Sat, 14 Jul 2012 15:55:03 +0200, mhx@iae.nl (Marcel Hendrix) wrote:
>
>>Recently, the subject of quotations popped up again and I remembered
>>an unfinished project.
>
> Given the increasing popularity of talking about "quotations" and
> "closures", would someone like to specify them in Forth terminology.
> Andrew provided an implementation that only made sense to people
> with carnal knowledge of SwiftForth.
Ok, quotations are fairly trivial. The experession
: foo ... [: some words ;] ... ;
is equal to
:noname some words ; Constant #temp#
: foo ... #temp# ... ;
I.e.
[: ( -- nestd-sys )
Compilation: suspends compiling to the current definition, starts a new
nested definition, and compilation continues with this nested
definition.
;] ( nested-sys -- )
Compilation: Ends the current nested definition, and resumes compilation
to the previous current definition. It appends the following run-time to
the current definition:
run-time: ( -- xt )
xt is the execution token to execute the nested definition.
If it's just a quotation, it can have its own locals, but it can't
access the locals of the outer word. We have some boy compilers here
(iForth, it would be possible with Gforth, too), which could access
locals from the outer scope, but not as real closure or correctly nested
frame.
Boy compiler:
: foo { a b } ... [: ... a b ... ;] execute ;
Here, a and b referenced in the boy-closure are offsets into the locals
stack which are identical to code generated within foo, and when
executed from within foo directly, they access the same locals. These
are not real closures, not even correctly nested frames.
Algol 60 (with its famous man-or-boy-test) has nested frames, which
requires that the xt carries a reference to the scope it was created in,
i.e. [: would produce an xt at run-time, which sets the frame for access
to outer locals, and then runs the code defined within the [: ;]
boundaries. Algol-like compilers usually solve that by adding an
implicit paramenter to the nested function, which points to the
environment, and the compiler knows to insert the proper parameter, but
in Forth, we can't do this.
Full closures go even further, they make sure that the environment is
active as long as the closure (the xt returned after ;]) is alive. This
means that the locals would be allocated on the heap, an some sort of
garbage collection is necessary to free unused memory.
> I have seen two or three sets of requirements dicussed, but for
> those of us who distinguish between hand-waving and specifications,
> would an interested party be prepared to specify what is required?
>
> Stephen
> P.S. "Go read this in WikiPedia" is inadequate.
Read the source, Luke. There are quotations for VFX in the MINOS
harness.
This is [: ;] in VFX Forth, not taking into account locals, stripped
down to the actual requirement:
: [: ( compile-time: -- nest-sys )
<headerless> @ last @ POSTPONE AHEAD
postpone [ :noname ; immediate
: ;] ( compile-time: nest-sys -- ; run-time: -- xt )
discard-sinline POSTPONE ; ( xt ) >r
] POSTPONE THEN r> POSTPONE Literal
last ! <headerless> ! discard-sinline ; immediate
--
Bernd Paysan
"If you want it done right, you have to do it yourself"
http://bernd-paysan.de/
Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar
Quotations revisited mhx@iae.nl (Marcel Hendrix) - 2012-07-14 15:55 +0200
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-15 19:26 +0000
Re: Quotations revisited Bernd Paysan <bernd.paysan@gmx.de> - 2012-07-15 23:53 +0200
Re: Quotations revisited mhx@iae.nl (Marcel Hendrix) - 2012-07-15 23:54 +0200
Re: Quotations revisited Bernd Paysan <bernd.paysan@gmx.de> - 2012-07-16 00:48 +0200
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-22 15:01 +0000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-23 16:49 +0000
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-23 21:39 +0000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-25 13:13 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-22 11:07 -0500
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-22 10:21 -0700
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-22 12:35 -0500
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-22 11:39 -0700
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-22 15:16 -0500
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-22 14:35 -0700
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-23 04:18 -0500
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-23 12:58 +0000
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-23 11:55 -0700
Re: Quotations revisited BruceMcF <agila61@netscape.net> - 2012-07-23 05:45 -0700
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-27 12:41 +0000
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-15 14:11 -1000
Re: Quotations revisited "A. K." <akk@nospam.org> - 2012-07-16 07:47 +0200
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-16 13:56 +0000
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-16 07:20 -1000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-17 13:49 +0000
Re: Quotations revisited Mark Wills <markrobertwills@yahoo.co.uk> - 2012-07-16 02:32 -0700
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-27 12:58 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 04:32 -0500
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-16 11:41 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 07:40 -0500
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-16 14:05 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 09:20 -0500
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-16 15:46 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 11:33 -0500
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-16 15:32 +0000
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-16 17:56 +0000
Re: Quotations revisited Bernd Paysan <bernd.paysan@gmx.de> - 2012-07-16 23:37 +0200
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-27 13:05 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-27 08:21 -0500
Re: Quotations revisited Roelf Toxopeus <rt4all@notthis.hetnet.nl> - 2012-07-16 10:14 +0200
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 04:23 -0500
Re: Quotations revisited m.a.m.hendrix@tue.nl - 2012-07-16 03:39 -0700
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 07:09 -0500
Re: Quotations revisited mhx@iae.nl (Marcel Hendrix) - 2012-07-16 23:47 +0200
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-17 04:14 -0500
Re: Quotations revisited Coos Haak <chforth@hccnet.nl> - 2012-07-17 17:39 +0200
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-17 12:18 -0500
Re: Quotations revisited mhx@iae.nl (Marcel Hendrix) - 2012-07-17 20:26 +0200
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-19 16:21 +0000
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-19 15:58 -0700
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-16 14:05 +0000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-16 12:47 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 08:56 -0500
Re: Quotations revisited Gerry Jackson <gerry@jackson9000.fsnet.co.uk> - 2012-07-16 15:04 +0100
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 09:23 -0500
Re: Quotations revisited Gerry Jackson <gerry@jackson9000.fsnet.co.uk> - 2012-07-16 17:38 +0100
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-16 12:58 -0500
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-16 14:56 +0000
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-16 22:53 +0000
Re: Quotations revisited BruceMcF <agila61@netscape.net> - 2012-07-16 19:59 -0700
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-16 17:04 -1000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-17 06:51 +0000
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-16 21:39 -1000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-17 07:48 +0000
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-16 22:24 -1000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-17 10:48 +0000
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-17 08:19 -1000
Re: Quotations revisited Aleksej Saushev <asau@inbox.ru> - 2012-07-18 01:31 +0400
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-19 16:11 +0000
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-19 12:41 -1000
Re: Quotations revisited Aleksej Saushev <asau@inbox.ru> - 2012-07-21 01:24 +0400
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-20 16:20 -1000
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-21 03:59 -0700
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-21 21:33 -1000
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-22 01:35 -0700
Re: Quotations revisited Aleksej Saushev <asau@inbox.ru> - 2012-07-22 21:19 +0400
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-22 08:15 -1000
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-22 11:48 -0700
Re: Quotations revisited Coos Haak <chforth@hccnet.nl> - 2012-07-22 21:48 +0200
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-22 15:22 -0500
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-22 14:50 -0700
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-22 15:08 -0700
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-22 15:20 -0700
Re: Quotations revisited Aleksej Saushev <asau@inbox.ru> - 2012-07-23 03:29 +0400
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-22 14:22 -1000
Re: Quotations revisited Aleksej Saushev <asau@inbox.ru> - 2012-07-23 05:46 +0400
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-22 21:46 -1000
Re: Quotations revisited Aleksej Saushev <asau@inbox.ru> - 2012-07-25 03:31 +0400
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-23 16:50 +0000
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-23 07:57 -1000
Re: Quotations revisited Aleksej Saushev <asau@inbox.ru> - 2012-07-25 03:38 +0400
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-26 13:01 +0000
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-21 12:10 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-21 09:19 -0500
Re: Quotations revisited Bernd Paysan <bernd.paysan@gmx.de> - 2012-07-21 18:58 +0200
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-22 04:24 -0500
Re: Quotations revisited Bernd Paysan <bernd.paysan@gmx.de> - 2012-07-22 14:25 +0200
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-22 11:11 -0500
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-21 19:29 +0000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-23 16:31 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-23 12:21 -0500
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-23 17:32 +0000
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-23 11:23 -0700
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-24 03:28 -0500
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-25 13:15 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-25 11:47 -0500
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-26 13:06 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-26 09:50 -0500
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-26 15:11 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-26 11:06 -0500
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-26 16:46 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-27 04:52 -0500
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-26 09:48 -0700
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-27 14:51 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-28 08:29 -0500
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-23 16:17 +0000
Re: Quotations revisited "Rod Pemberton" <do_not_have@notemailnot.cmm> - 2012-07-22 18:41 -0400
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-23 16:53 +0000
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-17 12:22 +0000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-17 07:30 -0500
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-17 06:34 -0700
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-17 09:04 -0500
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-18 07:07 -0700
Re: Quotations revisited Coos Haak <chforth@hccnet.nl> - 2012-07-18 17:43 +0200
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-18 09:29 -0700
Re: Quotations revisited Coos Haak <chforth@hccnet.nl> - 2012-07-18 20:59 +0200
Re: Quotations revisited Coos Haak <chforth@hccnet.nl> - 2012-07-18 21:14 +0200
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-19 16:05 +0000
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-20 14:50 +0000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-20 15:08 +0000
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-21 11:27 +0000
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-23 16:28 +0000
Re: Quotations revisited Albert van der Horst <albert@spenarnc.xs4all.nl> - 2012-07-23 19:41 +0000
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-18 10:18 -0700
Re: Quotations revisited anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2012-07-19 17:00 +0000
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-19 15:34 -0700
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-19 16:08 -0700
Re: Quotations revisited Bernd Paysan <bernd.paysan@gmx.de> - 2012-07-17 20:09 +0200
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-16 12:01 +0000
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-16 10:42 -0700
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-16 18:06 +0000
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-16 11:08 -1000
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-16 21:38 +0000
Re: Quotations revisited Bernd Paysan <bernd.paysan@gmx.de> - 2012-07-17 00:29 +0200
Re: Quotations revisited "Elizabeth D. Rather" <erather@forth.com> - 2012-07-16 12:38 -1000
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-17 04:20 -0500
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-17 03:21 -0700
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-17 03:14 -0700
Re: Quotations revisited Bernd Paysan <bernd.paysan@gmx.de> - 2012-07-17 19:58 +0200
Re: Quotations revisited Andrew Haley <andrew29@littlepinkcloud.invalid> - 2012-07-17 13:05 -0500
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-20 11:12 +0000
Re: Quotations revisited Alex McDonald <blog@rivadpm.com> - 2012-07-20 05:40 -0700
Re: Quotations revisited stephenXXX@mpeforth.com (Stephen Pelc) - 2012-07-20 15:55 +0000
Re: Quotations revisited Paul Rubin <no.email@nospam.invalid> - 2012-07-22 20:54 -0700
Re: Quotations revisited Aleksej Saushev <asau@inbox.ru> - 2012-07-25 03:55 +0400
csiph-web