Ticket UUID: | 944803 | |||
Title: | new [apply] command | |||
Type: | RFE | Version: | None | |
Submitter: | msofer | Created on: | 2004-04-29 18:54:44 | |
Subsystem: | 22. [proc] and [uplevel] | Assigned To: | dgp | |
Priority: | 5 Medium | Severity: | ||
Status: | Closed | Last Modified: | 2006-02-02 02:26:51 | |
Resolution: | Accepted | Closed By: | dgp | |
Closed on: | 2006-02-01 19:26:51 | |||
Description: |
A proposed new [apply] command to apply anonymous functions, giving one possible (but different) implementation for the goals of TIP 187 (Functions as Values). Attaching a patch that provides the command; a possible manual page is at http://utdt.edu/~mig/apply.html. | |||
User Comments: |
dgp added on 2006-02-02 02:26:51:
Logged In: YES user_id=80530 944803.patch committed for Tcl 8.5a4 dgp added on 2006-02-02 02:12:11: File Added - 165824: 944803.patch Logged In: YES user_id=80530 New patch includes all changes in one (including new files) msofer added on 2006-01-22 09:03:34: File Added - 164358: apply.test msofer added on 2006-01-22 09:02:07: File Added - 164357: apply5.patch msofer added on 2006-01-22 09:02:03: Logged In: YES user_id=148712 Patch apply4 was buggy-as-hell, sorry. The new apply5 should be much better. Added a testfile too. msofer added on 2006-01-19 05:46:16: File Added - 163955: apply4.patch msofer added on 2006-01-19 05:46:11: Logged In: YES user_id=148712 Updated apply4.patch, with fixes for two bugs noticed by dgp on tclcore: * [info level 0] now returns the full command line * error messages do not refer to "procedures" Still missing: * TESTS!! * move ::apply to ::tcl::apply (?) * implement suggestion by jenglish (?): if the first argument to apply is a single-element list, interpret it as a command name instead Coldstore's suggestion (improved) will appear in a forthcoming patch that replaces 'struct Proc' with 'struct Lambda', and arranges for proc to create a command that runs a lambda (instead of apply running a nameless proc, as in this patch). This cleaner approach will break compat with (at least) itcl sources: investigating an approach that avoids that. msofer added on 2006-01-12 05:47:32: Logged In: YES user_id=148712 Comments on coldstore's patches: (1) the idea is more than sound; we need to check if it doesn't break common extensions that include tclInt.h (itcl uses Proc, IIRC). (2) a Proc has to know its namespace in order to (a) cause the body to be compiled in the correct namespace (b) push a CallFrame for the correct namespace before eval'ing the body msofer added on 2006-01-12 05:33:00: File Added - 163010: apply3.patch Logged In: YES user_id=148712 Updated patch apply3.patch, applies to HEAD. Note that this is still a proof-of-concept: missing tests and comments, for instance. coldstore added on 2004-08-23 08:09:31: File Added - 98735: procns2.patch coldstore added on 2004-08-23 08:09:30: Logged In: YES user_id=19214 Second patch to remove Command* from Proc. This handles [rename] and properly refcounts Namespace refs held in Procs. coldstore added on 2004-08-23 06:41:16: File Added - 98730: procns.diff coldstore added on 2004-08-23 06:41:15: Logged In: YES user_id=19214 Following discussion on tkchat, it is possible (and desirable) to simplify struct Proc so that it no longer requires a Command, but instead directly points to its defining Namespace ... this will require further modification to the [rename] command, to preserve rename semantics (where renaming a command associated with a proc will change the proc's Namespace) ... to be attached in a different patch. Justification: a proc needs to know its own namespace (although except for the [variable] command, it's hard to know precisely why ... more analysis work needs to be done) but the additional requirement, that it possess an associated command, doesn't seem warranted. The included patch removes that requirement, and should enable eventual simplification of Miguel's [apply] patch by not absolutely requiring it to create a Command to associate with an anonymous proc. This simplification is beneficial with, or without, changes to tcl semantics permitting direct evaluation of a Lambda ObjType. msofer added on 2004-04-30 17:28:36: File Added - 85602: apply2.patch Logged In: YES user_id=148712 Addressing only the first issue, new apply2.patch with manpage at http://utdt.edu/~mig/apply2.html This version executes the anonymous function in the global namespace by default, but a different (constant) namespace can be specified. The remaining two issues are still unaddressed; this is experimental code, those matters will definitely be fixed before applying. dkf added on 2004-04-30 15:43:29: Logged In: YES user_id=79902 Issues, some of which are not serious in demo code: * Which is the correct namespace to execute in? * The errorInfo messages are misleading * Should the guts of TclObjInterpProc be extracted so that they can be called from [apply]? IncrTcl (and other extensions?) might also be a client of such a function, even if it was internal, so whatever it is ought to go in the stubs table. msofer added on 2004-04-30 01:54:45: File Added - 85535: apply.patch |
Attachments:
- 944803.patch [download] added by dgp on 2006-02-02 02:12:11. [details]
- apply.test [download] added by msofer on 2006-01-22 09:03:33. [details]
- apply5.patch [download] added by msofer on 2006-01-22 09:02:05. [details]
- apply4.patch [download] added by msofer on 2006-01-19 05:46:13. [details]
- apply3.patch [download] added by msofer on 2006-01-12 05:33:00. [details]
- procns2.patch [download] added by coldstore on 2004-08-23 08:09:31. [details]
- procns.diff [download] added by coldstore on 2004-08-23 06:41:16. [details]
- apply2.patch [download] added by msofer on 2004-04-30 17:28:36. [details]
- apply.patch [download] added by msofer on 2004-04-30 01:54:45. [details]