* status: separation of expansion/optimization/memoization/execution @ 2002-08-02 22:42 Dirk Herrmann 2002-08-02 23:15 ` Rob Browning ` (4 more replies) 0 siblings, 5 replies; 30+ messages in thread From: Dirk Herrmann @ 2002-08-02 22:42 UTC (permalink / raw) Hi folks, just wanted to let you know that I have actually been working on the issue above: Currently I am splitting up built-in macros following the following pattern: Former function: SCM scm_m_foo (SCM expr, SCM env) { /* perform syntax checking, expansion, minor optimizations and memoization in one step. */ return <new_expr>; } New set of functions: static SCM expand_foo (SCM expr, SCM env) { /* perform syntax checking and expansion. After this step, the code is still valid scheme code. However, not all features are used. */ return expanded_expr; } static SCM optimize_foo (SCM expr, SCM env SCM_UNUSED) { /* Most optimization functions are empty upto now. In some cases, minor optimizations are performed. After this step, the code is still valid scheme code. However, not all features are used. */ return optimized_expr; } static SCM memoize_foo (SCM expr, SCM env) { /* return the memoized form of foo. In some cases, minor memoization related optimizations are performed. After this step, the code is not valid scheme code any more, and, with the current printer and reader, it can not be written and re-read. */ return memoized_expr; } SCM scm_m_foo (SCM expr, SCM env) { /* first, call expand_foo. Then, using the result, call optimize_foo. Then, using the result of optimize_foo, call memoize_foo. */ return memoized_expr; } Basically, with the changes above everythings still works as before, that is, expansion and friends are still executed dynamically during execution. However, the functionality of each of the builtin-mmacros is more cleanly separated into different tasks with different responsibilities. And, I have added more exhaustive syntax checks into the expand_foo functions. Up to now I have done this only for "if", "set!", "and", "or", "case", "cond" and "do". I also have simplified SCM_CEVAL at those places, where due to the more extensive syntax checks in expand_foo some execution-time syntax checks could be eliminated. (However, all this takes some time, since I only manage to finish at most one macro each day.) The effect so far is, that booting guile takes noticably longer (at least 15%), but for example executing the test-suite is almost as fast as before (2% slower). Unfortunately, it is not yet possible to achieve large performance improvements. This will only be possible when the steps are really separated. Then, memoizing variable locations in the memoize_foo functions will be possible, which simply can not work at the moment: One reason is the re-writing of internal defines, which disallows the memoization of variables until the expansion phase is completed. I have, however, not taken care of keeping track of debugging information so far. That is, I would like to hear suggestions about how this should be done, since I don't have looked into that issue yet. If someone is interested to give the stuff a review (with respect to the debugging issues or just generally), I would be glad to send you the patches for eval.c and eval.h. If the debugging stuff is worked out, it could even make sense to submit the changes so far to allow for a broader testing in the head branch. Best regards, Dirk Herrmann _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-02 22:42 status: separation of expansion/optimization/memoization/execution Dirk Herrmann @ 2002-08-02 23:15 ` Rob Browning 2002-08-02 23:47 ` Han-Wen 2002-08-02 23:20 ` Dale P. Smith ` (3 subsequent siblings) 4 siblings, 1 reply; 30+ messages in thread From: Rob Browning @ 2002-08-02 23:15 UTC (permalink / raw) Cc: guile-devel, guile-user Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> writes: > Basically, with the changes above everythings still works as before, > that is, expansion and friends are still executed dynamically during > execution. However, the functionality of each of the > builtin-mmacros is more cleanly separated into different tasks with > different responsibilities. And, I have added more exhaustive > syntax checks into the expand_foo functions. Eeeeexcelent :> > The effect so far is, that booting guile takes noticably longer (at least > 15%), but for example executing the test-suite is almost as fast as before > (2% slower). Unfortunately, it is not yet possible to achieve large > performance improvements. This will only be possible when the steps are > really separated. Then, memoizing variable locations in the memoize_foo > functions will be possible, which simply can not work at the moment: One > reason is the re-writing of internal defines, which disallows the > memoization of variables until the expansion phase is completed. I don't know if you *are* worrying about the performance cost right now, but if you are, I'd say don't. Even if guile stays 20% slower for a while, the long term benefits (and potential speedups) of this work far outweigh the medium-term performance cost. BTW has anyone else played with valgrind http://developer.kde.org/~sewardj/docs/manual.html? I'm planning to play with it, but so far have only had a chance to see that it doesn't like some of our ptr manipulations. I also wonder if cachegrind might be able to tell us anything useful... > I have, however, not taken care of keeping track of debugging > information so far. That is, I would like to hear suggestions about > how this should be done, since I don't have looked into that issue > yet. If someone is interested to give the stuff a review (with > respect to the debugging issues or just generally), I would be glad > to send you the patches for eval.c and eval.h. I don't really know a lot about how debugging's being handled now, so I'm not the best person to comment here. > If the debugging stuff is worked out, it could even make sense to > submit the changes so far to allow for a broader testing in the head > branch. Absolutely. Actually I'd even say that if the debugging info is not worked out, but if we think it *can* be worked out within a couple of months, and if everything else is OK, then perhaps you should go ahead and merge. Your work will definitely get more attention in HEAD. -- Rob Browning rlb @defaultvalue.org, @linuxdevel.com, and @debian.org Previously @cs.utexas.edu GPG=1C58 8B2C FB5E 3F64 EA5C 64AE 78FE E5FE F0CB A0AD _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-02 23:15 ` Rob Browning @ 2002-08-02 23:47 ` Han-Wen 0 siblings, 0 replies; 30+ messages in thread From: Han-Wen @ 2002-08-02 23:47 UTC (permalink / raw) Cc: Dirk Herrmann, guile-devel, guile-user rlb@defaultvalue.org writes: > > BTW has anyone else played with valgrind > http://developer.kde.org/~sewardj/docs/manual.html? I'm planning to > play with it, but so far have only had a chance to see that it doesn't > like some of our ptr manipulations. I also wonder if cachegrind might > be able to tell us anything useful... Yes, I tried running it on lilypond (which is linked to GUILE). I got a ton of warnings that was not able to suppress (it seems that the suppressions don't work for valgrind internal functions, like strncmp). Running valgrind for checking is probably pointless for GUILE, as GUILE manages its own memory; the stack scanning GC also generates lots of spurious warnings. I did run it through the CPU cache simulator, which indicated that gc_mark, gc_sweep and scm_ceval are causing a lot of cache misses. I hope to improve the GC part when I can compile guile with GCC 3.1 ; GCC 3.1 supports prefetch instructions, so cache misses can be decreased by doing stuff like mark_cons: prefetch (cdr) scm_gc_mark (car) ptr = cdr; goto mark_again; probably there are some techniques to boost cache rates for eval() as well. This is with the java-tree GC benchmark: -------------------------------------------------------------------------------- I1 cache: 16384 B, 32 B, 4-way associative D1 cache: 16384 B, 32 B, 4-way associative L2 cache: 524288 B, 32 B, 4-way associative Command: ./libguile/.libs/lt-guile -s /tmp/graphs.sch Events recorded: Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw Events shown: Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw Event sort order: Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw Thresholds: 99 0 0 0 0 0 0 0 0 Include dirs: User annotated: Auto-annotation: off -------------------------------------------------------------------------------- Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw -------------------------------------------------------------------------------- 566,304,440 177,926 22,634 214,093,739 5,330,222 439,850 60,193,298 122,340 31,098 PROGRAM TOTALS -------------------------------------------------------------------------------- Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw file:function -------------------------------------------------------------------------------- 188,450,666 28,572 4,577 69,348,246 1,248,161 6,579 18,620,442 22,047 84 eval.c:scm_ceval 94,460,034 1,574 368 31,701,931 1,627,987 249,416 7,924,122 14,992 1,579 gc-mark.c:scm_gc_mark_dependencies 90,846,605 7,899 114 38,685,160 620,624 134,205 5,581,738 746 8 gc-card.c:scm_sweep_card 36,806,561 479 76 12,092,342 63,732 79 1,526,389 0 0 eval.c:scm_ilookup 36,027,996 92 11 11,734,622 487,301 2,201 5,880,036 14,057 1,682 gc-mark.c:scm_gc_mark 12,369,948 642 642 5,936,102 422,488 9,297 1,083,306 0 0 weaks.c:scm_mark_weak_vector_spines 11,620,162 652 652 4,374,134 353,606 1,097 1,193,150 47 0 weaks.c:scm_scan_weak_vectors 11,124,410 873 37 5,781,750 106,113 38 2,669,915 7 0 ../libguile/inline.h:scm_acons 7,826,240 6,519 337 2,201,130 67,895 173 733,710 0 0 vectors.c:scm_vector_ref 7,241,746 448 5 3,897,614 67,863 27 1,671,236 20 0 ../libguile/inline.h:scm_cons 7,217,944 902 232 1,740,251 4,410 4 1,332,234 3,415 10 eval.c:scm_eval_args 6,957,761 16,749 1,561 6,956,140 54,050 2,073 702 6 6 ???:??? -- Han-Wen Nienhuys | hanwen@cs.uu.nl | http://www.cs.uu.nl/~hanwen _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-02 22:42 status: separation of expansion/optimization/memoization/execution Dirk Herrmann 2002-08-02 23:15 ` Rob Browning @ 2002-08-02 23:20 ` Dale P. Smith 2002-08-03 12:12 ` Han-Wen ` (2 subsequent siblings) 4 siblings, 0 replies; 30+ messages in thread From: Dale P. Smith @ 2002-08-02 23:20 UTC (permalink / raw) On Sat, 3 Aug 2002 00:42:21 +0200 (CEST) Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> wrote: > Hi folks, > > just wanted to let you know that I have actually been working on the issue > above: Currently I am splitting up built-in macros following the > following pattern: Whoo Hooo! /me cheers! (Sorry, too much irc lately) -Dale -- Dale P. Smith Senior Systems Consultant, | Treasurer, Altus Technologies Corporation | Cleveland Linux Users Group dsmith@altustech.com | http://cleveland.lug.net 440-746-9000 x339 | _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* status: separation of expansion/optimization/memoization/execution 2002-08-02 22:42 status: separation of expansion/optimization/memoization/execution Dirk Herrmann 2002-08-02 23:15 ` Rob Browning 2002-08-02 23:20 ` Dale P. Smith @ 2002-08-03 12:12 ` Han-Wen 2002-08-04 1:51 ` Dirk Herrmann 2002-08-05 18:15 ` status: separation of expansion/optimization/memoization/execution Marius Vollmer 2002-08-05 18:11 ` Marius Vollmer 2002-08-05 18:36 ` Neil Jerram 4 siblings, 2 replies; 30+ messages in thread From: Han-Wen @ 2002-08-03 12:12 UTC (permalink / raw) Cc: guile-devel dirk@sallust.ida.ing.tu-bs.de writes: > The effect so far is, that booting guile takes noticably longer (at least > 15%), but for example executing the test-suite is almost as fast as before How do you measure that effectively? I now installed my new-gc guile, and starting it up takes as long as it used to (the speed up seems to have been disappeared.) Isn't the benchmark suite a much better test? Is there some magical command that shows the startup time? (Would be easy to implement, just do something similar to gc-stats). FWIW, I "installed" some of the GC benchmarks over here --pretty trivial-- and the code is GPL, but probably not (c) assigned. We can't accept it then, Marius (right?), so shall I try asking the guy for a disclaimer & assignment? (I think it has a slim chance working). BTW, on a completely different note: I realized that it should not be difficult to maintain coverage statistics for all primitive (implemented in C) subroutines: when they are invoked a flag is set. Is that possible? Wouldn't that be very good for testing the test-suite? Any thoughts? -- Han-Wen Nienhuys | hanwen@cs.uu.nl | http://www.cs.uu.nl/~hanwen _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-03 12:12 ` Han-Wen @ 2002-08-04 1:51 ` Dirk Herrmann 2002-08-04 2:03 ` Han-Wen 2002-08-04 2:05 ` Tom Lord 2002-08-05 18:15 ` status: separation of expansion/optimization/memoization/execution Marius Vollmer 1 sibling, 2 replies; 30+ messages in thread From: Dirk Herrmann @ 2002-08-04 1:51 UTC (permalink / raw) Cc: guile-devel On Sat, 3 Aug 2002, Han-Wen wrote: > dirk@sallust.ida.ing.tu-bs.de writes: > > The effect so far is, that booting guile takes noticably longer (at least > > 15%), but for example executing the test-suite is almost as fast as before > > How do you measure that effectively? I now installed my new-gc guile, > and starting it up takes as long as it used to (the speed up seems to > have been disappeared.) Isn't the benchmark suite a much better test? I measured it using "time guile < /dev/null" and repeated it several times. Each time the execution time varies, thus I tried to make out a general tendency. And, sure, the benchmark suite would be a better test, if it contained some relevant benchmarks. This is, up to now, not the case. However, didn't you say that you had some nice benchmark application called lilypond ;-) If there was a significant change due to your gc changes, I believe you would notice it, right? However, performance improvements are not the major objective of your current patches, at least that's what I understand: IMO the code cleanup is the important point here. Best regards, Dirk _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-04 1:51 ` Dirk Herrmann @ 2002-08-04 2:03 ` Han-Wen 2002-08-04 2:05 ` Tom Lord 1 sibling, 0 replies; 30+ messages in thread From: Han-Wen @ 2002-08-04 2:03 UTC (permalink / raw) Cc: guile-devel dirk@sallust.ida.ing.tu-bs.de writes: > However, didn't you say that you had some nice benchmark application > called lilypond ;-) If there was a significant change due to your gc :) I ran some tests on the anomalous machine (50% gc time), now it's back down to 15 to 20 % -- still a lot, but credible. Compared to the old scheme there is some slight advantage (gc-times down from 70 to 25), perhaps due to the new malloc trigger, but I also increased the segment size (I fixed a silly bug in our use of putenv). -- Han-Wen Nienhuys | hanwen@cs.uu.nl | http://www.cs.uu.nl/~hanwen _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-04 1:51 ` Dirk Herrmann 2002-08-04 2:03 ` Han-Wen @ 2002-08-04 2:05 ` Tom Lord 2002-08-04 2:11 ` Tom Lord ` (2 more replies) 1 sibling, 3 replies; 30+ messages in thread From: Tom Lord @ 2002-08-04 2:05 UTC (permalink / raw) Cc: hanwen, guile-devel > IMO the code cleanup is the important point here. Such work was rudely interrupted in the early days and, I agree, is very important, hence, long overdue. My bibop comment went by un-acked --- really and truly, just from a schemeimplhacking perspective, look into that direction. I used to think -- "no gc strategy is special -- bibop advocates are exaggerating", but after plotting out a fresh implementation in detail -- nah, they are exactly right. Staggered tags and bipbop. -t "Rape me" -- Kurt Kobain _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-04 2:05 ` Tom Lord @ 2002-08-04 2:11 ` Tom Lord 2002-08-04 2:20 ` for example Tom Lord 2002-08-04 2:27 ` i know -- let's play bridge! Tom Lord 2 siblings, 0 replies; 30+ messages in thread From: Tom Lord @ 2002-08-04 2:11 UTC (permalink / raw) Cc: dirk, hanwen, guile-devel bibop advocates are exaggerating", but after plotting out a fresh implementation in detail -- nah, they are exactly right. Staggered tags and bipbop. After all -- there's only so many small integers and bit patterns. It's essential -- not a fasion choice. Bye. -t <td align="center" width="50%"> <p align="left"><small><i> I've got to be direct;<br> If I'm wrong, please correct.<br> You're standing on my neck.</i></small> <p align="center"><small>-- Daria</small> </td> _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* for example 2002-08-04 2:05 ` Tom Lord 2002-08-04 2:11 ` Tom Lord @ 2002-08-04 2:20 ` Tom Lord 2002-08-04 2:27 ` i know -- let's play bridge! Tom Lord 2 siblings, 0 replies; 30+ messages in thread From: Tom Lord @ 2002-08-04 2:20 UTC (permalink / raw) ok -- these are input to simple awk scripts (couple k lines) -- though I'm probably sending you versions that don't currently compile: And yes --- I'm being cryptic (a side effect of trying to compress a lot of info down to a short message) --- but the basic message is "bye", so don't waste time complaining. -t ! Register Types This file is part of the source code for the Hackerlab C library. It's translated to C by the awk program "./register-tags.awk". VM registers have small _external tags_ so they can hold a limited selection of unboxed values. This file declares the register tags and the union type for (various kinds of) register. *> core-registers register-type scm_register 2 **> holds scm s **> holds scm_u u **> holds scm_i i **> holds scm_f f -------------- ! The Bit Tag Spec File A popular misconception is that a tagging system simply maps values to a set of densely-packed, small integer tags, each tag representing a type. You'll see people write: <<< struct generic_object_header; { t_uint tag; ... }; >>> but that's really _oversimplified._ A good tagging system does much more than that. For example, here is an outline that is processed automatically to produce `enum' declarations for a system of "staggered tags" (see SCM, for example), predicate functions, and case labels. Since scheme is important enough that we should (at least casually) worry about the length and complexity of the bootstrap path from front-panel toggle-switches to full hosting environment, this file is designed to processed by a small `awk' script (i.e., a script for a little language with hash tables, loops, conditionals, and regexps but not much more). CLS note: I'm not sure how clear this will be to people who aren't looking at the rest of its context. I hope the notation is clear enough to be puzzled out.... *> scm-tags tags scm **: decodes-to scm_u We're going to define tags with a basename "scm" for values of type "scm". **> split-tag val 2 The smallest in-line tag will be two bits. ***> tag bibop_object (00) ****: tags-by-mask ****: decodes-to t_scm_sptr; Bibop objects are the lightest weight in terms of meta-data overhead (e.g., they don't necessarily have reference counts) and (if a direct pointer representation is used) alignment requirements (they are 4-byte aligned) Bibop objects share storage with page objects (see below). ***> tag cow_bibop_object (..) ****: tags-by-mask ****: decodes-to t_scm_cow_sptr; Lazy-linear bibop objects. There is a one bit reference count for each bibop object. When the first cow reference to an object is formed, that reference count is 0. If the cow reference is copied (to produce a second cow reference), the count is 1. If yet another cow-copy is made, the new copy is in fact a shallow-copy of the object with reference count 0 (references in shallow copy are cow references). When fetching a possibly cow field, programs can request a non-cow reference to a stable object which the field will continue to hold with a cow reference: if, before the fetch, the field held a cow reference to an object with (possibly) more than one cow reference, then a shallow copy is made and the field updated before the fetch returns. ***> split-tag heavy_pointer 2 (..) Bibop pointers have the nice property of being small (if implemented as direct pointers) but the drawback that reclamation of objects weakly held by bibop pointers can not occur until a scan has updated all pointers to the object. At the opposite extreme are object-table pointers and fat pointers: more or less interchangable ways to obtain cheap (in time) weak references and even cheaply destroyable objects. ****> tag vm_object (....) ****: tags-by-mask ****: decodes-to t_scm_obj The heap format of an object is quite complicated and is dcoumented in other files. ****> tag cow_vm_object (....) ****: tags-by-mask ****: decodes-to t_scm_cow_obj Lazy-linear vm objects. Similar to cow bibop objects, except that the reference count is larger. ****> tag vm_object_promise (....) ****: tags-by-mask ****: decodes-to t_scm_promise_obj Lazy, memoized, and referencer-memoized vm objects. ****> split-tag vm_page 1 (....) *****: tags-by-mask *****: decodes-to t_scm_page A modest pool of very-large-alignment (256 bytes) types. *****> split-tag vm_direcct_page 2 (....) ******> tag vm_page16 (......) ******> tag vm_page128 (......) ******> tag vm_page512 (......) ******> tag vm_page1024 (......) *****> split-tag vm_cow_page 2 (....) ******> tag vm_cow_page16 (......) ******> tag vm_cow_page128 (......) ******> tag vm_cow_page512 (......) ******> tag vm_cow_page1024 (......) ***> split-tag immediate 1 (..) Characters want to be "unicode+bucky bits" which adds up to _at least_ 24 bit and more comfortably to 29. Numbers are weird. Do we want one or two big-as-possible immediate integer types? or do we want to cram in lots of little types for tiny immediate rationals and complex numbers? How much of it should make sense in 16-bit environments? Atomic values: I don't care much about them. `nil' is the 0 non-immediate value. I wouldn't horribly miss `#t' or seeing it become a non-immediate -- almost nothing low-level ever dispatches on #t specifically. Indeed -- it's easy for an allocator to create disjoint, immutable, non-referencing objects that can be re-used across all VM instances and have well-known fixed addresses per-process. Use values of that sort for atomics: one extra memory fetch for eq? test (to look up the well-known address) but otherwise just as good. So it's a two way battle: numbers v. characters. Characters have the stricter data-size demands: let's give them half the remaining values: ****> tag character (...) *****: decodes-to t_unicode *****: decodes-exp (t_unicode)( ((val >> scm_tag_width_character) & (((scm)1 << scm_char_code_bits) - 1)) \ | (val & ((((scm)1 << scm_bucky_bits) - 1) << (scm_bits - scm_bucky_bits)))) In a 32-bit or larger environment, we get 29 bits for immediate characters -- enough for 21-bits of Unicode plus bucky-bits {left,right}x{shift,ctl,meta,alt}. Sweet. In the expanded (at least 32-bit) form, we keep the bucky bits in the high-order 8 bits. ****> tag immediate_signed (111) signed! *****: decodes-to scm_i *> scm-fast-dispatchers scm **> dispatcher is_bibop **> return 0 for bibop_object cow_bibop_objec **> return 1 otherwise **> dispatcher is_vm_object **> return 1 for vm_object cow_vm_object vm_object_promise **> return 0 otherwise **> dispatcher vm_obj_discipline ? ***> return cow for vm_cow_page16 vm_cow_page128 vm_cow_page512vm_cow_page1024 ***> return cow for cow_vm_object cow_bibop_object ***> return promise for vm_object_promise ***> return immediate for immediate ***> return regular otherwise this should generate [extern]enum scm_vm_obj_discipline scm_vm_obj_discipline(scm? obj) { switch (scm_tag(..)) ... } and inline t_uint8 scm_vm_obj_discipline_switch(scm? obj) { return scm_tag (...); } #define SCM_VM_OBJ_DISCIPLINE_COW_CASE ... #define SCM_VM_OBJ_DISCIPLINE_PROMISE_CASE ... #define SCM_VM_OBJ_DISCIPLINE_IMMEDIATE_CASE ... #define SCM_VM_OBJ_DISCIPLINE_REGULAR_CASE ... add a way to make pointer types for tags (e.g. vm_object) and for any binary dispatcher + a conversion function that return nil on "wrong type". (`scm_as_vm_obj(scm val) => `t_scm_vm_obj'). _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* i know -- let's play bridge! 2002-08-04 2:05 ` Tom Lord 2002-08-04 2:11 ` Tom Lord 2002-08-04 2:20 ` for example Tom Lord @ 2002-08-04 2:27 ` Tom Lord 2002-08-04 2:46 ` Tom Lord 2 siblings, 1 reply; 30+ messages in thread From: Tom Lord @ 2002-08-04 2:27 UTC (permalink / raw) Hey, do you think if i suck the right cock i can get my picture in wired? -t _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 2:27 ` i know -- let's play bridge! Tom Lord @ 2002-08-04 2:46 ` Tom Lord 2002-08-04 2:50 ` Thomas Bushnell, BSG 0 siblings, 1 reply; 30+ messages in thread From: Tom Lord @ 2002-08-04 2:46 UTC (permalink / raw) Cc: guile-devel And I don't mean tournament bridge (where partners are blinded) -- but the fun kind.... you know, the one where you play to see who can cheat best. But really --- "bye" -- and please look into bibop and staggered tags for your GNU project. ****TYT***** Take _Your_ Time. Thanks, -t _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 2:46 ` Tom Lord @ 2002-08-04 2:50 ` Thomas Bushnell, BSG 2002-08-04 2:57 ` Tom Lord 0 siblings, 1 reply; 30+ messages in thread From: Thomas Bushnell, BSG @ 2002-08-04 2:50 UTC (permalink / raw) Cc: guile-devel Tom Lord <lord@regexps.com> writes: > And I don't mean tournament bridge (where partners are blinded) -- but > the fun kind.... you know, the one where you play to see who can > cheat best. Uh, that's fun? Remind me not to bother playing bridge with you. Cheating is only fun for those who find the actual game too hard to bother with. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 2:50 ` Thomas Bushnell, BSG @ 2002-08-04 2:57 ` Tom Lord 2002-08-04 3:04 ` Thomas Bushnell, BSG 0 siblings, 1 reply; 30+ messages in thread From: Tom Lord @ 2002-08-04 2:57 UTC (permalink / raw) Cc: guile-devel Tom Lord <lord@regexps.com> writes: > And I don't mean tournament bridge (where partners are blinded) -- but > the fun kind.... you know, the one where you play to see who can > cheat best. Uh, that's fun? Remind me not to bother playing bridge with you. Cheating is only fun for those who find the actual game too hard to bother with. Si! -t _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 2:57 ` Tom Lord @ 2002-08-04 3:04 ` Thomas Bushnell, BSG 2002-08-04 3:43 ` Tom Lord ` (2 more replies) 0 siblings, 3 replies; 30+ messages in thread From: Thomas Bushnell, BSG @ 2002-08-04 3:04 UTC (permalink / raw) Cc: guile-devel Bushnell (I) said: > Uh, that's fun? Remind me not to bother playing bridge with you. > Cheating is only fun for those who find the actual game too hard to > bother with. Tom Lord said: > Si! So maybe more comment is appropriate. I take as a basic of playing games that everyone knows the rules. So you could easily have two games: the game of contract bridge as generally known, and another, which Tom Lord claims to prefer, to see "who can cheat best". But in that latter game, of course, it's not cheating at all to signal to your partner what your heart suit is. Let's call these two "Real Bridge" (with limited information about your partner's hand) and "Tom Lord Bridge" (where you can develop whatever signalling method you like). Now Tom Lord Bridge has a curious property. If everyone is playing it, then the game rapidly becomes uninteresting. It becomes a matter of double-dummy bridge play. (Actually, it's a *tad* more interesting than that, but not by much.) This produces a game which is not quite as interesting as checkers. Why bother?! So why would Tom prefer the Tom Lord Bridge to Real Bridge, given that the former is less interesting than checkers? Because, I suspect, he doesn't want to play a game where everyone knows and agrees to the rules. I suspect he wants to play a game where there are common and agreed rules (the rules of Real Bridge will do), but in which Tom then proceeds to play as if the rules were different (say, Tom Lord Bridge). He survives in this game because of the goodwill or simple mistake of others who think he is willing to play by common agreed rules. Now if this were just about cards, then it would be silly and stupid. But it's bigger than that! It's not just bridge--substitute any common social enterprise for the word "Bridge" above, and the same division between "Real X" and "Tom Lord X" will appear, with the same notion that the best game is the one where you try and cheat as much as possible out of people who don't realize that there are two very different games going on simultaneously. Tom, will you please tell us which rules you want to play by? I'll play just about any game you choose, but you seem to want to refuse to play by *any* agreed rules! Thomas _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 3:04 ` Thomas Bushnell, BSG @ 2002-08-04 3:43 ` Tom Lord 2002-08-04 3:53 ` Thomas Bushnell, BSG 2002-08-04 3:50 ` Tom Lord 2002-08-04 3:55 ` Tom Lord 2 siblings, 1 reply; 30+ messages in thread From: Tom Lord @ 2002-08-04 3:43 UTC (permalink / raw) Cc: guile-devel which Tom Lord claims to prefer So sorry --- entirely sarcasm. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 3:43 ` Tom Lord @ 2002-08-04 3:53 ` Thomas Bushnell, BSG 2002-08-04 4:03 ` Tom Lord 2002-08-04 4:10 ` Tom Lord 0 siblings, 2 replies; 30+ messages in thread From: Thomas Bushnell, BSG @ 2002-08-04 3:53 UTC (permalink / raw) Cc: guile-devel Tom Lord <lord@regexps.com> writes: > which Tom Lord claims to prefer > > So sorry --- entirely sarcasm. But this is the problem! I belabor, perhaps, unnecessarily: 1: You post a bizzare message, without context or relevance, 2: You decline to say what it means, in any way, 3: You then say "oh, I was just kidding". The "oh, I was just kidding" defense is itself cheating. It's what people say after they say the most offensive things. Sometimes it's true, and honest, but even then, it's not just "sarcasm". One wonders if the "I was just kidding" would have showed up if the perpetrator had not been called on it. Now, bridge is a relatively trivial thing (unless you're livelihood is connected with the sport). But this is not about whether Tom thinks cheating at bridge is okay. Indeed, Tom's later response, that "Tom Lord" should also be understood as a variable, pretends to be a joshing tone, a lively banter, when in fact, it's a deceptive and, well, I think malicious attempt to discourage us from looking at the facts. Having been, essentialy, told off--I basically said "Tom, you're lying to us when you pretend to be part of our community"--Tom replies "If you mean 'Tom' to be a variable, then Yes!" But that, of course, removes the content. It pretends that he's "going along with us", when in fact, he's just being destructive. Now we can see this pattern in many ways--those of us who have known Tom for, oh, sixteen years, have perhaps seen the pattern more commonly than we care to repeat. I let people fill in the details with their own experiences. I describe the pattern *not* because I want to describe a pattern in the abstract, without reference to anything, but rather, because I want to name a malicious entity in our midst--one who simply refuses to "play nice" and to get along pleasantly with the other kids in the sandbox. Now, Tom could simply decide to play nice. He doesn't need to give any retractions, any auto-da-fe's, any claims to behave nicer in the future. Such would, really, not be trusted, I think. But he can decide to start actually playing nice. I hold out the hope. Indeed, I held out the hope, and periodically, I send a friendly message to Tom in the hopes that he will play nice. But alas, he doesn't! Everything is cryptic, bizarre, half-stated and mostly unstated. Tom, are you going to play friendly? Please try. The coy routine is tired, sad, boring. It's not really very clever to pretend to be a Man-O-Mystery. It's not that clever to play tricks on other people--to cheat--only so that you can have that smug and self-assured confidence that you know what the "real truth" is--though, of course, the only "real truth" is that you're cheating. Thomas _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 3:53 ` Thomas Bushnell, BSG @ 2002-08-04 4:03 ` Tom Lord 2002-08-04 4:10 ` Tom Lord 1 sibling, 0 replies; 30+ messages in thread From: Tom Lord @ 2002-08-04 4:03 UTC (permalink / raw) Cc: guile-devel 3: You then say "oh, I was just kidding". No. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 3:53 ` Thomas Bushnell, BSG 2002-08-04 4:03 ` Tom Lord @ 2002-08-04 4:10 ` Tom Lord 1 sibling, 0 replies; 30+ messages in thread From: Tom Lord @ 2002-08-04 4:10 UTC (permalink / raw) Cc: guile-devel > The coy routine Just trying my best to skirt truth past the legal bondage in which i am intwined -- and, no, you: that particular past employer who has the greatest gag on me, this really isn't about you. You are just a sad and pathetic side effect of these problems, as far as i am concerned and, honest to god, my entire experience with you isn't reflected in these "cryptic" notes at all. Please guile-devel....do well with your _GNU_ project. -t and, as a personal aside -- tb: i think i agree with you about QM and god (to retract a stupid statement i made when we were undergrads) but there's a lot more thinking and research to do. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 3:04 ` Thomas Bushnell, BSG 2002-08-04 3:43 ` Tom Lord @ 2002-08-04 3:50 ` Tom Lord 2002-08-04 3:55 ` Tom Lord 2 siblings, 0 replies; 30+ messages in thread From: Tom Lord @ 2002-08-04 3:50 UTC (permalink / raw) Cc: guile-devel Taking the letters "Tom Lord" in your analysis as variables, and the entire note as an abstraction: Si! (Personally, I like some variations on _tournament bridge_ -- particularly those variations where we all remember that the goal is to gather and be happy and shapern our minds and do good works and make our environment incrementally better in a works-and-days kind of mode.... I think there are some other players who suffer a disabilitating lack of trust that would make that possible, though, and I am beyond exhaustion at trying to win them over.... at least that's my (repeated and extensive) experience.) -t --- Avoid trusting FSBs to support cool hacks. They aren't worthy of that trust. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 3:04 ` Thomas Bushnell, BSG 2002-08-04 3:43 ` Tom Lord 2002-08-04 3:50 ` Tom Lord @ 2002-08-04 3:55 ` Tom Lord 2002-08-04 3:58 ` Tom Lord 2 siblings, 1 reply; 30+ messages in thread From: Tom Lord @ 2002-08-04 3:55 UTC (permalink / raw) Cc: guile-devel > I think there are some other players who suffer a > disabilitating lack of trust that would make that possible, though, > and I am beyond exhaustion at trying to win them over.... at least > that's my (repeated and extensive) experience.) First: dammit tb -- shut up. I really want to say "bye" here on some pithy note about how to allocate tags. Don't drag me into politics on this list. Second: have you ever had a conversation with a bunch of people who aren't wage slaves where it's painfully apparent that they are trying to evaluate whether you can be trusted with a public spotlight that they control? While your family is starving and suffering and being agreeable to such assholes is your apparent best chance? Sorry developer's list --- tb just knows how to push my buttons. -t ! The Heap Type Tag Spec File -*-*- * Location Tags This file is part of the source code for the Hackerlab C library. It's translated to C by the awk program "./tags.awk". A value of of type `scm_location_tag' holds a tag value (`enum scm_location_tag') that describes the physical type of some location. A value of type `scm_location_storage' is a value of type `scm_location_tag' tagged with an `enum scm_location_arity'. The tag indicates whether the location contains a single value or a pointer to a dynamic array of (homogenously typed) values. The type `scm_location_desc' is a `scm_location_storage_type' tagged with `enum scm_location_protection'. The tag describes whether and under what conditions the location may be read and written. Note that this is a tripple-tagged value: when decoded, it yields another tagged value (using two disjoint sets of tags). When that second value is decoded, the final result is yet another tag value (in yet another disjoint set): the data type stored at the lcoation. `scm_location_storage' fits (exactly) in 8 bits. *> heap-tags tags scm_location_desc **: decodes-to scm_location_storage **> split-tag protection 2 ***> tag opaque ***> tag guarded ***> tag read_only ***> tag public *> tags scm_location_storage **: decodes-to scm_location_type **> split-tag arity 1 ***> tag cell ***> tag array *> tags scm_location_type **: decodes-to t_uint **> split-tag id 5 ***> tag t_uint8 ***> tag t_int8 ***> tag t_uint16 ***> tag t_int16 ***> tag t_uint32 ***> tag t_int32 ***> tag t_uint64 ***> tag t_int64 ***> tag scm_float32 ***> tag scm_float64 ***> tag scm_u ***> tag scm_i ***> tag scm ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 ***> tag unused_loc_0 \f * Structure Tags A simple physical strucutre type is described by an array of location tags (roughly one for each field) plus two parameters: alignment and allocation strategy. Alignment is a power of two that establishes the grid on which fields are aligned when in contiguous memory. The allocation strategy is: _inline_ for a flat object. _handle_ for a separately resizable object _pow2_array_ for a _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: i know -- let's play bridge! 2002-08-04 3:55 ` Tom Lord @ 2002-08-04 3:58 ` Tom Lord 0 siblings, 0 replies; 30+ messages in thread From: Tom Lord @ 2002-08-04 3:58 UTC (permalink / raw) Cc: tb, guile-devel > Second: have you ever had a conversation I mean -- a very _long_ conversation. -t _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-03 12:12 ` Han-Wen 2002-08-04 1:51 ` Dirk Herrmann @ 2002-08-05 18:15 ` Marius Vollmer 1 sibling, 0 replies; 30+ messages in thread From: Marius Vollmer @ 2002-08-05 18:15 UTC (permalink / raw) Cc: Dirk Herrmann, guile-devel Han-Wen <hanwen@cs.uu.nl> writes: > FWIW, I "installed" some of the GC benchmarks over here --pretty > trivial-- and the code is GPL, but probably not (c) assigned. We can't > accept it then, Marius (right?), so shall I try asking the guy for a > disclaimer & assignment? (I think it has a slim chance working). Well, I'm not really sure about this, but I would say that supporting material does not need to be copyrighted by the FSF. The risk is that when some code is not (C) FSF, the FSF can not be sure that the license really is GPL and might be forced to take the code out again. When that happens to the benchmark suite, Guile itself is not terminally harmed. If you can get a disclaimer (there are several options), so much the better. I'm a bad thinker when it comes to licenses. It's better to ask <licensing@gnu.org>. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-02 22:42 status: separation of expansion/optimization/memoization/execution Dirk Herrmann ` (2 preceding siblings ...) 2002-08-03 12:12 ` Han-Wen @ 2002-08-05 18:11 ` Marius Vollmer 2002-08-07 20:51 ` Dirk Herrmann 2002-08-05 18:36 ` Neil Jerram 4 siblings, 1 reply; 30+ messages in thread From: Marius Vollmer @ 2002-08-05 18:11 UTC (permalink / raw) Cc: guile-devel, guile-user Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> writes: > Basically, with the changes above everythings still works as before, that > is, expansion and friends are still executed dynamically during execution. > However, the functionality of each of the builtin-mmacros is more cleanly > separated into different tasks with different responsibilities. And, I > have added more exhaustive syntax checks into the expand_foo functions. Hmm, what is the purpose of this seperation? As far as I can see, the important thing is the separate memoization from execution, not the various stages of memoization itself. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-05 18:11 ` Marius Vollmer @ 2002-08-07 20:51 ` Dirk Herrmann 2002-08-10 13:01 ` Marius Vollmer 0 siblings, 1 reply; 30+ messages in thread From: Dirk Herrmann @ 2002-08-07 20:51 UTC (permalink / raw) Cc: guile-devel, guile-user On 5 Aug 2002, Marius Vollmer wrote: > Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> writes: > > > Basically, with the changes above everythings still works as before, that > > is, expansion and friends are still executed dynamically during execution. > > However, the functionality of each of the builtin-mmacros is more cleanly > > separated into different tasks with different responsibilities. And, I > > have added more exhaustive syntax checks into the expand_foo functions. > > Hmm, what is the purpose of this seperation? As far as I can see, the > important thing is the separate memoization from execution, not the > various stages of memoization itself. Well, I have to agree that I am not yet sure whether this separation is actually necessary. For me, this is a means to get a clearer idea of what is actually going on - especially in the context of weird stuff like the conversion of internal defines into letrecs and so on. And, it is actually quite simple to do this separation while doing the separation of memoization from execution. Maybe it makes sense to combine some of the steps later on. But, on the other hand, it may also be beneficial to have such a separation later, in order to be able to insert an optional optimization step between expansion and memoization. Best regards, Dirk _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-07 20:51 ` Dirk Herrmann @ 2002-08-10 13:01 ` Marius Vollmer 2002-08-14 19:30 ` Dirk Herrmann 0 siblings, 1 reply; 30+ messages in thread From: Marius Vollmer @ 2002-08-10 13:01 UTC (permalink / raw) Cc: guile-devel, guile-user Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> writes: > > Hmm, what is the purpose of this seperation? As far as I can see, the > > important thing is the separate memoization from execution, not the > > various stages of memoization itself. > > Well, I have to agree that I am not yet sure whether this separation is > actually necessary. For me, this is a means to get a clearer idea of what > is actually going on Ok, but you are seeing a significant loss inperformance because of them, right? Although I think it is acceptable to make on-the-fly compilation more expensive in order to allow ahead-of-time compilation, we should not do it gratuitously. It will be a long way until we might no longer want to care about the on-the-fly compiler since everybody compiles their important code ahead-of-time anyway. So, cleaning up the existing lazy memoizer is a very good thing indeed. But I'd say you should also make sure that you don't significantly lose performance by doing it. That part of Guile will be performance-critical for quite some time. -- GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3 331E FAF8 226A D5D4 E405 _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-10 13:01 ` Marius Vollmer @ 2002-08-14 19:30 ` Dirk Herrmann 2002-08-26 22:11 ` Marius Vollmer 0 siblings, 1 reply; 30+ messages in thread From: Dirk Herrmann @ 2002-08-14 19:30 UTC (permalink / raw) Cc: guile-devel, guile-user On 10 Aug 2002, Marius Vollmer wrote: > So, cleaning up the existing lazy memoizer is a very good thing > indeed. But I'd say you should also make sure that you don't > significantly lose performance by doing it. That part of Guile will > be performance-critical for quite some time. At the current state I can't decide yet, whether after the changes guile's speed will at all differ from before. Too many optimizations of the scheme code are not possible yet, until the separation is complete. If there is a performance problem then, it will be easier to optimize the evaluator then. There are, however, a lot of open questions: * in principle, memoization could memoize all variable references. That would mean, the execution could be freed of all checks for symbols and variable lookups - this would have been done by the memoizer. Benefits: - no symbol lookups in the executor - quoted symbols could be made into symbols, getting rid of one level of quoting Problems: - how to deal with undefined symbols? - should 'undefine' still be possible, and if so, how? * should the executor ever run over an undefined symbol? This could be checked during expansion and memoization. If it is known that during exection all symbols are defined, this eliminates one test during variable lookup. Best regards, Dirk _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-14 19:30 ` Dirk Herrmann @ 2002-08-26 22:11 ` Marius Vollmer 0 siblings, 0 replies; 30+ messages in thread From: Marius Vollmer @ 2002-08-26 22:11 UTC (permalink / raw) Cc: guile-devel, guile-user Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> writes: > On 10 Aug 2002, Marius Vollmer wrote: > > > So, cleaning up the existing lazy memoizer is a very good thing > > indeed. But I'd say you should also make sure that you don't > > significantly lose performance by doing it. That part of Guile will > > be performance-critical for quite some time. > > At the current state I can't decide yet, whether after the changes guile's > speed will at all differ from before. Too many optimizations of the > scheme code are not possible yet, until the separation is complete. Are there optimizations that will be possible after the separation that are not possible now? In any case, please proceed carefully. Making a branch is probably a good idea. -- GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3 331E FAF8 226A D5D4 E405 _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-02 22:42 status: separation of expansion/optimization/memoization/execution Dirk Herrmann ` (3 preceding siblings ...) 2002-08-05 18:11 ` Marius Vollmer @ 2002-08-05 18:36 ` Neil Jerram 2002-08-07 20:55 ` Dirk Herrmann 4 siblings, 1 reply; 30+ messages in thread From: Neil Jerram @ 2002-08-05 18:36 UTC (permalink / raw) Cc: guile-devel, guile-user >>>>> "Dirk" == Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> writes: Dirk> I have, however, not taken care of keeping track of Dirk> debugging information so far. That is, I would like to hear Dirk> suggestions about how this should be done, since I don't Dirk> have looked into that issue yet. If someone is interested Dirk> to give the stuff a review (with respect to the debugging Dirk> issues or just generally), I would be glad to send you the Dirk> patches for eval.c and eval.h. I'd be happy to look at these. Neil _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: status: separation of expansion/optimization/memoization/execution 2002-08-05 18:36 ` Neil Jerram @ 2002-08-07 20:55 ` Dirk Herrmann 0 siblings, 0 replies; 30+ messages in thread From: Dirk Herrmann @ 2002-08-07 20:55 UTC (permalink / raw) Cc: guile-devel, guile-user On 5 Aug 2002, Neil Jerram wrote: > >>>>> "Dirk" == Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> writes: > > Dirk> I have, however, not taken care of keeping track of > Dirk> debugging information so far. That is, I would like to hear > Dirk> suggestions about how this should be done, since I don't > Dirk> have looked into that issue yet. If someone is interested > Dirk> to give the stuff a review (with respect to the debugging > Dirk> issues or just generally), I would be glad to send you the > Dirk> patches for eval.c and eval.h. > > I'd be happy to look at these. Great, I will send a patch to you as soon as I have reached a state again in which guile compiles :-) Best regards, Dirk _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://mail.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2002-08-26 22:11 UTC | newest] Thread overview: 30+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2002-08-02 22:42 status: separation of expansion/optimization/memoization/execution Dirk Herrmann 2002-08-02 23:15 ` Rob Browning 2002-08-02 23:47 ` Han-Wen 2002-08-02 23:20 ` Dale P. Smith 2002-08-03 12:12 ` Han-Wen 2002-08-04 1:51 ` Dirk Herrmann 2002-08-04 2:03 ` Han-Wen 2002-08-04 2:05 ` Tom Lord 2002-08-04 2:11 ` Tom Lord 2002-08-04 2:20 ` for example Tom Lord 2002-08-04 2:27 ` i know -- let's play bridge! Tom Lord 2002-08-04 2:46 ` Tom Lord 2002-08-04 2:50 ` Thomas Bushnell, BSG 2002-08-04 2:57 ` Tom Lord 2002-08-04 3:04 ` Thomas Bushnell, BSG 2002-08-04 3:43 ` Tom Lord 2002-08-04 3:53 ` Thomas Bushnell, BSG 2002-08-04 4:03 ` Tom Lord 2002-08-04 4:10 ` Tom Lord 2002-08-04 3:50 ` Tom Lord 2002-08-04 3:55 ` Tom Lord 2002-08-04 3:58 ` Tom Lord 2002-08-05 18:15 ` status: separation of expansion/optimization/memoization/execution Marius Vollmer 2002-08-05 18:11 ` Marius Vollmer 2002-08-07 20:51 ` Dirk Herrmann 2002-08-10 13:01 ` Marius Vollmer 2002-08-14 19:30 ` Dirk Herrmann 2002-08-26 22:11 ` Marius Vollmer 2002-08-05 18:36 ` Neil Jerram 2002-08-07 20:55 ` Dirk Herrmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).