-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Gambit-C 4.0 beta 18 is now available. The source tarball is here:
http://www.iro.umontreal.ca/~gambit/gambc-4.0b18.tar.gz
A prebuilt installation for Microsoft Windows is available here:
http://www.iro.umontreal.ca/~gambit/gambc-4.0b18-win.zip
Just unzip it in C: to get C:\Gambit-C\4.0b18, and then add C:\Gambit- C\4.0b18\bin to your path.
Here are the highlights of this release:
- Speculative inlining has been improved. This greatly improves the performance of compiled code when no declarations are given. The "no declaration" mode closely conforms to the R5RS semantics, where all global variables including car, +, etc are mutable (which is useful for debugging). Check http://www.iro.umontreal.ca/~gambit/ bench.html for a comparison with Chicken, MzScheme and Scheme48. It shows that when these systems are put in an R5RS conformant mode, Gambit is often an order of magnitude faster. Gambit is also quite fast in other situations (when predefined procedures are bound to immutable variables, when fixnum/flonum specific operations are used, and in unsafe mode).
- The benchmark suite (misc/bench.tgz) has been updated to support Bigloo, Chicken, MzScheme and Scheme48. There is a script to easily generate HTML tables showing the benchmark results.
- More predefined procedures are now inlined, including some recursive functions on lists: map, for-each, assq, and memq.
- Renaming of fixnum and flonum specific functions to the R6RS name (e.g. fx+ replaces ##fixnum.+, and fl+ replaces ##flonum.+). The ##fixnum... and ##flonum... versions are still available in this release but they will be phased out. In safe mode, which is the default, the fixnum specific functions now raise an exception on overflow. There are now "wrapping" versions which do not raise an exception on overflow, that is (fxwrap+ (expt 2 28) (expt 2 28)) => - -536870912 .
- Added an option to open-tcp-server to listen for connection requests on a given network interface (the default is to listen on all network interfaces).
- The polling interval for process ports has been shortened to improve promptness.
- The speed of memory moving operations, such as substring, has been improved.
- Fixed a GC bug with tables and added table-copy . Fixed a bug with char-ready? and peek-char .
Sorry to disappoint, but this release does not include a module system. That's something I'm still working on and I did not want to delay this release any further.
Marc
Afficher les réponses par date
On Sep 19, 2006, at 7:29 PM, Marc Feeley wrote:
Gambit-C 4.0 beta 18 is now available. The source tarball is here:
http://www.iro.umontreal.ca/~gambit/gambc-4.0b18.tar.gz
A prebuilt installation for Microsoft Windows is available here:
http://www.iro.umontreal.ca/~gambit/gambc-4.0b18-win.zip
Just unzip it in C: to get C:\Gambit-C\4.0b18, and then add C:\Gambit- C\4.0b18\bin to your path.
Here are the highlights of this release:
Thanks, Marc!
One of the lower-lights of the release is that in gambit.h we find
#define ___FIXBITCOUNT(x)___FIX(1111)/****brad will fix this****/ #define ___FIXLENGTH(x)___FIX(2222)/****brad will fix this****/ #define ___FIXFIRSTBITSET(x)___FIX(3333)/****brad will fix this****/
so
procedure: fxbit-count n
procedure: fxfirst-bit-set n
procedure: fxlength n
don't work as advertised yet.
Brad (unfortunately, yes, *that* brad)
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 19-Sep-06, at 10:34 PM, Bradley Lucier wrote:
One of the lower-lights of the release is that in gambit.h we find
#define ___FIXBITCOUNT(x)___FIX(1111)/****brad will fix this****/ #define ___FIXLENGTH(x)___FIX(2222)/****brad will fix this****/ #define ___FIXFIRSTBITSET(x)___FIX(3333)/****brad will fix this****/
so
procedure: fxbit-count n
procedure: fxfirst-bit-set n
procedure: fxlength n
don't work as advertised yet.
Eeeks! But actually they worked as advertized since they are not documented!
Marc (from my hotel balcony where I can pick up a very faint wireless open network...)
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 19-Sep-06, at 10:34 PM, Bradley Lucier wrote:
One of the lower-lights of the release is that in gambit.h we find
#define ___FIXBITCOUNT(x)___FIX(1111)/****brad will fix this****/ #define ___FIXLENGTH(x)___FIX(2222)/****brad will fix this****/ #define ___FIXFIRSTBITSET(x)___FIX(3333)/****brad will fix this****/
so
procedure: fxbit-count n
procedure: fxfirst-bit-set n
procedure: fxlength n
don't work as advertised yet.
Brad (unfortunately, yes, *that* brad)
Here is the fix needed to get these operations working properly. I have not tested fully on 64 bit processors. In the file include/ gambit.h replace the lines
#define ___FIXBITCOUNT(x)___FIX(1111)/****brad will fix this****/ #define ___FIXLENGTH(x)___FIX(2222)/****brad will fix this****/ #define ___FIXFIRSTBITSET(x)___FIX(3333)/****brad will fix this****/ #define ___FIXBITSETP(x,y)((x)&(1<<(___INT(y)+___TB)))
by
#if ___SCMOBJ_WIDTH == 32 #define ___SCMOBJ_MASK(x,y)y #define ___BITCOUNT_TEMP() \ (___temp=(___temp&___SCMOBJ_MASK(0x55555555,0x55555555))+ \ ((___temp>>1)&___SCMOBJ_MASK(0x55555555,0x55555555)), \ ___temp=(___temp&___SCMOBJ_MASK(0x33333333,0x33333333))+ \ ((___temp>>2)&___SCMOBJ_MASK(0x33333333,0x33333333)), \ ___temp=(___temp&___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f))+ \ ((___temp>>4)&___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f)), \ ___temp=___temp+(___temp>>8), \ ___temp=___temp+(___temp>>16), \ ___FIX(___temp&0xff)) #define ___FIXLENGTH(x) \ (((___temp=___INT(x))<0)&&(___temp=~___temp), \ ___temp|=(___temp>>1), \ ___temp|=(___temp>>2), \ ___temp|=(___temp>>4), \ ___temp|=(___temp>>8), \ ___temp|=(___temp>>16), \ ___BITCOUNT_TEMP()) #define ___FIXFIRSTBITSET(x) \ (((___temp=(x))==0) \ ?___FAL \ :(___temp=(___temp&-___temp), \ ___FIX((((___temp&~___SCMOBJ_MASK(0x55555555,0x55555555))!=0)| \ (((___temp&~___SCMOBJ_MASK(0x33333333,0x33333333))!=0) <<1)| \ (((___temp&~___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f))!=0) <<2)| \ (((___temp&~___SCMOBJ_MASK(0x00ff00ff,0x00ff00ff))!=0) <<3)| \ (((___temp&~___SCMOBJ_MASK(0x0000ffff,0x0000ffff))!=0) <<4))-___TB))) #else #define ___SCMOBJ_MASK(x,y)((___CAST(___SCMOBJ,x)<<32)|y) #define ___BITCOUNT_TEMP() \ (___temp=((___temp)&___SCMOBJ_MASK(0x55555555,0x55555555))+ \ (((___temp)>>1)&___SCMOBJ_MASK(0x55555555,0x55555555)), \ ___temp=(___temp&___SCMOBJ_MASK(0x33333333,0x33333333))+ \ ((___temp>>2)&___SCMOBJ_MASK(0x33333333,0x33333333)), \ ___temp=(___temp&___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f))+ \ ((___temp>>4)&___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f)), \ ___temp=___temp+(___temp>>8), \ ___temp=___temp+(___temp>>16), \ ___temp=___temp+(___temp>>32), \ ___temp&0xff) #define ___FIXLENGTH(x) \ (((___temp=___INT(x))<0)&&(___temp=~___temp), \ ___temp|=(___temp>>1), \ ___temp|=(___temp>>2), \ ___temp|=(___temp>>4), \ ___temp|=(___temp>>8), \ ___temp|=(___temp>>16), \ ___temp|=(___temp>>32), \ ___BITCOUNT_TEMP()) #define ___FIXFIRSTBITSET(x) \ (((___temp=(x))==0) \ ?___FAL \ :(___temp=(___temp&-___temp), \ ___FIX((((___temp&~___SCMOBJ_MASK(0x55555555,0x55555555))!=0)| \ (((___temp&~___SCMOBJ_MASK(0x33333333,0x33333333))!=0) <<1)| \ (((___temp&~___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f))!=0) <<2)| \ (((___temp&~___SCMOBJ_MASK(0x00ff00ff,0x00ff00ff))!=0) <<3)| \ (((___temp&~___SCMOBJ_MASK(0x0000ffff,0x0000ffff))!=0) <<4)| \ (((___temp&~___SCMOBJ_MASK(0x00000000,0xffffffff))!=0) <<5))-___TB))) #endif #define ___FIXBITCOUNT(x) \ ((((___temp=___INT(x))<0)&&(___temp=~___temp)),___BITCOUNT_TEMP()) #define ___FIXBITSETP(x,y)((x)&(___CAST(___SCMOBJ,1)<<(___INT(y) +___TB)))
Marc
Marc, again I failed make check, on beta 18 on my RHEL clone. Should I debug this myself? Please advise me, because I have a nice Scheme Sudoku Solver that's merely too slow. I learn everything I want by running jobs overnight. I want to compile it on the latest beta.
So I tried two different configure options:
./configure --enable-single-host --prefix=/rhome/richter/gambit/bin --enable-shared ./configure --enable-single-host --prefix=/rhome/richter/gambit/bin
make works fine, but not make check:
------------ TEST 2 (error handling) ../gsi/gsi -:h4000 -f error.scm < error.scm > test2.out diff test2.ok test2.out && rm -f test2.out 1194c1194 < (directory-files "newdir2") => ("aaa" "bbb") ---
(directory-files "newdir2") => ("bbb" "aaa")
make[1]: *** [test2] Error 1 make[1]: Leaving directory `/tmp_mnt/rhome/richter/gambc-4.0b18/tests' make: *** [check] Error 2
I think what's bugging out is right here in error.scm:
(define (test-rename-file) (try 'rename-file rename-file "newdir1" "newdir2") (try 'rename-file rename-file "newdir1" "newdir2") (try 'rename-file rename-file "newfile1" (path-exp "aaa" "newdir2")) (try 'rename-file rename-file "newfile1" (path-exp "aaa" "newdir2")) )
The only `define' I found for `try' is in mix.scm:
(define (try thunk) (call-with-current-continuation (lambda (cont) (with-exception-handler (lambda (exc) (display "-----> ") (write exc) (show2 " on " thunk) (cont 0)) (lambda () (write (thunk)) (show2 " on " thunk))))))
and I suppose I could eventually figure out what that means. But I don't know how mix.scm is even being used here. It's used in test4
cp $(srcdirpfx)mix.scm .; \ touch mix.rm; \
but that's later in the makefile...
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
- -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 23-Sep-06, at 3:35 AM, Bill Richter wrote:
Marc, again I failed make check, on beta 18 on my RHEL clone. Should I debug this myself? Please advise me, because I have a nice Scheme Sudoku Solver that's merely too slow. I learn everything I want by running jobs overnight. I want to compile it on the latest beta.
So I tried two different configure options:
./configure --enable-single-host --prefix=/rhome/richter/gambit/bin --enable-shared ./configure --enable-single-host --prefix=/rhome/richter/gambit/bin
make works fine, but not make check:
------------ TEST 2 (error handling) ../gsi/gsi -:h4000 -f error.scm < error.scm > test2.out diff test2.ok test2.out && rm -f test2.out 1194c1194
< (directory-files "newdir2") => ("aaa" "bbb")
(directory-files "newdir2") => ("bbb" "aaa")
make[1]: *** [test2] Error 1 make[1]: Leaving directory `/tmp_mnt/rhome/richter/gambc-4.0b18/tests' make: *** [check] Error 2
I think what's bugging out is right here in error.scm:
No, the problem is that after fixing the bug with the directory-files test (by adding a sort of the result), I forgot to remove the buggy code (which runs fine on my machine):
(define (test-directory-files) (try 'directory-files directory-files "newdir2") ) (test-directory-files)
Just remove those lines from tests/error.scm and also remove the line
(directory-files "newdir2") => ("aaa" "bbb")
from tests/test2.out .
Marc
Thanks Marc, but it didn't work. BTW I finally realized that Bugzilla responded to my beta 17 bug report; must've been you.
I forgot to remove the buggy code (which runs fine on my machine):
(define (test-directory-files) (try 'directory-files directory-files "newdir2") ) (test-directory-files)
Just remove those lines from tests/error.scm and also remove the line
(directory-files "newdir2") => ("aaa" "bbb")
from tests/test2.out .
Did you mean tests/test2.ok? test2.out doesn't exist until after I run `make check'. So here's what I did:
gambc-4.0b18> ./configure --enable-single-host --prefix=/rhome/richter/gambit/bin --enable-shared gambc-4.0b18> make gambc-4.0b18> make check
Got this errors as before:
------------ TEST 2 (error handling) LD_LIBRARY_PATH=../lib:/rhome/richter/my-gambit/lib ../gsi/gsi -:h4000 -f error.scm < error.scm > test2.out diff test2.ok test2.out && rm -f test2.out 1194c1194 < (directory-files "newdir2") => ("aaa" "bbb") ---
(directory-files "newdir2") => ("bbb" "aaa")
make[1]: *** [test2] Error 1
Now I removed these lines from tests/error.scm:
(define (test-directory-files) (try 'directory-files directory-files "newdir2") ) (test-directory-files)
But I cannot remove (directory-files "newdir2") => ("aaa" "bbb") from tests/test2.out, because the line is reversed! test2.out reads: (directory-files "newdir2") => ("bbb" "aaa") So I removed that line. Then
gambc-4.0b18> make check ------------ TEST 2 (error handling) LD_LIBRARY_PATH=../lib:/rhome/richter/my-gambit/lib ../gsi/gsi -:h4000 -f error.scm < error.scm > test2.out diff test2.ok test2.out && rm -f test2.out 1194d1193 < (directory-files "newdir2") => ("aaa" "bbb") 1206,1207c1205,1206 < (file-size "error.scm") => 65542 < (file-size "newdir2/bbb") => 65542 ---
(file-size "error.scm") => 65437 (file-size "newdir2/bbb") => 65437
make[1]: *** [test2] Error 1
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 24-Sep-06, at 2:31 AM, Bill Richter wrote:
Thanks Marc, but it didn't work. BTW I finally realized that Bugzilla responded to my beta 17 bug report; must've been you.
I forgot to remove the buggy code (which runs fine on my machine):
My point is that on your machine test2 is working fine so you should just ignore it (run the other tests with "make testN" for N>=3). The problem will be fixed in the next release.
Marc
Thanks, Marc, you are definitely faster than I am. I'm working on testing this.
The R6RS definition of fxfirst-bit-set says that (fxfirst-bit-set 0) => -1, so do you want
[brad:~/programs/gambc-4.0b18/include] lucier% rcsdiff -u gambit.h =================================================================== RCS file: RCS/gambit.h,v retrieving revision 1.2 diff -u -r1.2 gambit.h --- gambit.h 2006/09/23 16:28:13 1.2 +++ gambit.h 2006/09/23 16:28:44 @@ -2567,7 +2567,7 @@ ___BITCOUNT_TEMP()) #define ___FIXFIRSTBITSET(x) \ (((___temp=(x))==0) \ -?___FAL \ + ?___FIX(-1) \ :(___temp=(___temp&-___temp), \ ___FIX((((___temp&~___SCMOBJ_MASK(0x55555555,0x55555555))!=0)| \ (((___temp&~___SCMOBJ_MASK(0x33333333,0x33333333))!=0) <<1)| \ @@ -2598,7 +2598,7 @@ ___BITCOUNT_TEMP()) #define ___FIXFIRSTBITSET(x) \ (((___temp=(x))==0) \ -?___FAL \ + ?___FIX(-1) \ :(___temp=(___temp&-___temp), \ ___FIX((((___temp&~___SCMOBJ_MASK(0x55555555,0x55555555))!=0)| \ (((___temp&~___SCMOBJ_MASK(0x33333333,0x33333333))!=0) <<1)| \
Marc:
I found a few more problems---in FIXLENGTH you want to set ___temp to -___temp (not ~temp) when ___temp is negative (try (fxlength -1)), and you needed to ___FIX(___temp&0xff) in 64-bit ___BITCOUNT_TEMP..
I imagine that using some configurey to use gcc's __builtin_popcountl, __builtin_ffsl, and __builtin_clzl when available would speed up these functions in some special cases.
This has been rather extensively tested on 32-bit (ppc) and 64-bit (x86-64) platforms by comparing it with the R6RS definitions of the same functions. The diff is from the original gambit.h.
Brad
[brad:~/programs/gambc-4.0b18/include] lucier% rcsdiff -r1.1 gambit.h =================================================================== RCS file: RCS/gambit.h,v retrieving revision 1.1 diff -r1.1 gambit.h 2548,2551c2548,2613 < #define ___FIXBITCOUNT(x)___FIX(1111)/****brad will fix this****/ < #define ___FIXLENGTH(x)___FIX(2222)/****brad will fix this****/ < #define ___FIXFIRSTBITSET(x)___FIX(3333)/****brad will fix this****/ < #define ___FIXBITSETP(x,y)((x)&(1<<(___INT(y)+___TB))) ---
#if ___SCMOBJ_WIDTH == 32 #define ___SCMOBJ_MASK(x,y)y #define ___BITCOUNT_TEMP() \ (___temp=(___temp&___SCMOBJ_MASK(0x55555555,0x55555555))+ \ ((___temp>>1)&___SCMOBJ_MASK(0x55555555,0x55555555)), \ ___temp=(___temp&___SCMOBJ_MASK(0x33333333,0x33333333))+ \ ((___temp>>2)&___SCMOBJ_MASK(0x33333333,0x33333333)), \ ___temp=(___temp&___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f))+ \ ((___temp>>4)&___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f)), \ ___temp=___temp+(___temp>>8), \ ___temp=___temp+(___temp>>16), \ ___FIX(___temp&0xff)) #define ___FIXLENGTH(x) \ (((___temp=___INT(x))<0)&&(___temp=-___temp), \ ___temp|=(___temp>>1), \ ___temp|=(___temp>>2), \ ___temp|=(___temp>>4), \ ___temp|=(___temp>>8), \ ___temp|=(___temp>>16), \ ___BITCOUNT_TEMP()) #define ___FIXFIRSTBITSET(x) \ (((___temp=(x))==0) \ ?___FIX(-1) \ :(___temp=(___temp&-___temp), \ ___FIX((((___temp&~___SCMOBJ_MASK(0x55555555,0x55555555))!=0)| \ (((___temp&~___SCMOBJ_MASK(0x33333333,0x33333333))!=0)
<<1)| \
(((___temp&~___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f))!=0)
<<2)| \
(((___temp&~___SCMOBJ_MASK(0x00ff00ff,0x00ff00ff))!=0)
<<3)| \
(((___temp&~___SCMOBJ_MASK(0x0000ffff,0x0000ffff))!=0)
<<4))-___TB)))
#else #define ___SCMOBJ_MASK(x,y)((___CAST(___SCMOBJ,x)<<32)|y) #define ___BITCOUNT_TEMP() \ (___temp=((___temp)&___SCMOBJ_MASK(0x55555555,0x55555555))+ \ (((___temp)>>1)&___SCMOBJ_MASK(0x55555555,0x55555555)), \ ___temp=(___temp&___SCMOBJ_MASK(0x33333333,0x33333333))+ \ ((___temp>>2)&___SCMOBJ_MASK(0x33333333,0x33333333)), \ ___temp=(___temp&___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f))+ \ ((___temp>>4)&___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f)), \ ___temp=___temp+(___temp>>8), \ ___temp=___temp+(___temp>>16), \ ___temp=___temp+(___temp>>32), \ ___FIX(___temp&0xff)) #define ___FIXLENGTH(x) \ (((___temp=___INT(x))<0)&&(___temp=-___temp), \ ___temp|=(___temp>>1), \ ___temp|=(___temp>>2), \ ___temp|=(___temp>>4), \ ___temp|=(___temp>>8), \ ___temp|=(___temp>>16), \ ___temp|=(___temp>>32), \ ___BITCOUNT_TEMP()) #define ___FIXFIRSTBITSET(x) \ (((___temp=(x))==0) \ ?___FIX(-1) \ :(___temp=(___temp&-___temp), \ ___FIX((((___temp&~___SCMOBJ_MASK(0x55555555,0x55555555))!=0)| \ (((___temp&~___SCMOBJ_MASK(0x33333333,0x33333333))!=0)
<<1)| \
(((___temp&~___SCMOBJ_MASK(0x0f0f0f0f,0x0f0f0f0f))!=0)
<<2)| \
(((___temp&~___SCMOBJ_MASK(0x00ff00ff,0x00ff00ff))!=0)
<<3)| \
(((___temp&~___SCMOBJ_MASK(0x0000ffff,0x0000ffff))!=0)
<<4)| \
(((___temp&~___SCMOBJ_MASK(0x00000000,0xffffffff))!=0)
<<5))-___TB)))
#endif #define ___FIXBITCOUNT(x) \ ((((___temp=___INT(x))<0)&&(___temp=~___temp)),___BITCOUNT_TEMP()) #define ___FIXBITSETP(x,y)((x)&(___CAST(___SCMOBJ,1)<<(___INT(y)
+___TB)))
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 23-Sep-06, at 4:29 PM, Bradley Lucier wrote:
Marc:
I found a few more problems---in FIXLENGTH you want to set ___temp to -___temp (not ~temp) when ___temp is negative (try (fxlength -1)),
This is incorrect. Note that the definition of fxlength in R6RS uses ~temp (SRFI 77 erroneously used -temp). With ~temp it matches the Common Lisp semantics, i.e. (fxlength -1) = 0.
and you needed to ___FIX(___temp&0xff) in 64-bit ___BITCOUNT_TEMP..
Thanks.
I imagine that using some configurey to use gcc's __builtin_popcountl, __builtin_ffsl, and __builtin_clzl when available would speed up these functions in some special cases.
Probably, but I couldn't figure out how to test if these builtins are available and I don't want to spend too much time on this.
This has been rather extensively tested on 32-bit (ppc) and 64-bit (x86-64) platforms by comparing it with the R6RS definitions of the same functions. The diff is from the original gambit.h.
For (fxfirst-bit-set 0) the R6RS specifies that -1 should be returned. I see no reason why -1 should be viewed as the correct answer. It seems too arbitrary. The "Scheme way" is to return #f, in fact that's what Gambit's (first-set-bit 0) returns. What do you think?
Marc
On Sep 25, 2006, at 10:07 AM, Marc Feeley wrote:
On 23-Sep-06, at 4:29 PM, Bradley Lucier wrote:
Marc:
I found a few more problems---in FIXLENGTH you want to set ___temp to -___temp (not ~temp) when ___temp is negative (try (fxlength -1)),
This is incorrect.
Well, it may be incorrect that you want it, but otherwise it's a matter of convention.
Note that the definition of fxlength in R6RS uses ~temp (SRFI 77 erroneously used -temp). With ~temp it matches the Common Lisp semantics, i.e. (fxlength -1) = 0.
Gotcha. I was looking at the SRFI-77 code.
This has been rather extensively tested on 32-bit (ppc) and 64-bit (x86-64) platforms by comparing it with the R6RS definitions of the same functions. The diff is from the original gambit.h.
For (fxfirst-bit-set 0) the R6RS specifies that -1 should be returned. I see no reason why -1 should be viewed as the correct answer. It seems too arbitrary. The "Scheme way" is to return #f, in fact that's what Gambit's (first-set-bit 0) returns. What do you think?
Well, I don't know ... Clinger made a lot of noise during the SRFI-77 process about making numerical code more conducive to type checking. Having functions return {#f}\union{numbers} is useful and Schemely, but using a numeric code is also useful.
Perhaps you should send a comment to R6RS to get (fx-first-bit-set 0) => #f if you believe strongly that it should be changed. In the end, though, I think Gambit should have the R6RS semantics for this function.
Brad
On 9/20/06, Marc Feeley feeley@iro.umontreal.ca wrote:
- Speculative inlining has been improved. This greatly improves the performance of compiled code when no declarations are given. [...]
Faster is always better, thanks ;)
Just a side note, the website hasn't been updated yet.
TJ
Hi.
Some installation problems when going from beta 17 to beta 18:
1. INSTALL.txt talks about --char-size=1. But only --enable-char-size=1 works.
2. INSTALL.txt gives an example like this: % ./configure --prefix=~/my-gambit % make install % ~/my-gambit/bin/gsi But in beta 18, all files are installed one level deeper (below ~/my-gambit/4.0b18/ ) Is this a permanent change? And if so - should one change any environment variables (in addition to PATH, of course)?
Greetings Sven
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 25-Sep-06, at 6:00 AM, Sven.Hartrumpf@FernUni-Hagen.de wrote:
Hi.
Some installation problems when going from beta 17 to beta 18:
- INSTALL.txt talks about --char-size=1. But only --enable-char-size=1 works.
Thanks for spotting that error. The correct way is --enable-char- size=N .
- INSTALL.txt gives an example like this:
% ./configure --prefix=~/my-gambit % make install % ~/my-gambit/bin/gsi But in beta 18, all files are installed one level deeper (below ~/my-gambit/4.0b18/ ) Is this a permanent change? And if so - should one change any environment variables (in addition to PATH, of course)?
This is a permanent change to the structure of the installation directory and is explained in section 1.1 of the Gambit-C manual. The goal is to allow several versions of Gambit to be installed. The same approach will be used by the module directories to allow several module versions to coexist (and the module directories will be subdirectories of the installation directory for the version of Gambit they apply to). Note that in addition to creating the directory
~/my-gambit/4.0b18
the installation script will also create
~/my-gambit/current
as a symbolic link to ~/my-gambit/4.0b18 .
You should add ~/my-gambit/current to your PATH. This will point to the last version of Gambit that was installed, or to whatever version ~/my-gambit/current points to (you can change it manually if you want to revert to an old version).
If you don't like this change, just edit configure.ac and replace
PACKAGE_SUBDIR="/4.0b18"
by
PACKAGE_SUBDIR=""
I haven't tested this lately but it has worked in the past... YMMV.
Marc