libscheme-0.1 
Author Message
 libscheme-0.1

I just uploaded libscheme-0.1.tar.gz to the Scheme repository's
incoming directory:

        ftp://ftp.cs.indiana.edu/pub/scheme-repository/incoming/

It will soon be moved to the imp/ directory.

libscheme is a C library implementing Scheme as described in the
Revised^4 Report on the Algorithmic Language Scheme.  It is easily
integrated into a C program as a command interpreter or extension
langauge, and is easily extended in C with new primitive types,
primitve functions and syntax.

It should run on the following machines and should be portable to most
machines with an ANSI C compiler.

            Sun 3
            Sun 4 under SunOS 4.X or Solaris2.X
            Vax under 4.3BSD, Ultrix
            Intel 386 or 486 under many operating systems, but not MSDOS.
            Sequent Symmetry  (single threaded)
            Encore Multimax   (single threaded)
            MIPS M/120 (and presumably M/2000) (RISC/os 4.0 with BSD libraries)
            IBM PC/RT  (Berkeley UNIX)
            IBM RS/6000
            HP9000/300
            HP9000/700
            DECstations under Ultrix
            DEC Alpha running OSF/1
            SGI workstations under IRIX
            Sony News
            Apple MacIntosh under A/UX
            Commodore Amiga (see README.amiga)
            NeXT machines
            Harris Nighthawk

It is available under the GNU Copyleft.

--
Brent Benson                    
Harris Computer Systems



Tue, 15 Oct 1996 02:20:42 GMT  
 libscheme-0.1

        I just uploaded libscheme-0.1.tar.gz to the Scheme repository's
        incoming directory:

I think it would be really helpful if announcements like this,
especially for new implementations, had a few words about the
implementation strategy.

Is it byte-code interpreted?  graph-interpreted?  What kind of garbage
collector does it have?  How are closures allocated? How is `call/cc'
handled?  What numerics does it have?  What do the object
representations look like?

A lot of announcments talk about the special features of a particular
implementation but say nothing about the fundamentals.

There are no good scheme benchmarks that i know of but an
implementation sketch such as i've suggested would make a good
stand-in for them.

-t



Thu, 17 Oct 1996 12:30:15 GMT  
 libscheme-0.1
#
#       I just uploaded libscheme-0.1.tar.gz to the Scheme repository's
#       incoming directory:
#
# I think it would be really helpful if announcements like this,
# especially for new implementations, had a few words about the
# implementation strategy.
#
# Is it byte-code interpreted?  graph-interpreted?  What kind of garbage
# collector does it have?  How are closures allocated? How is `call/cc'
# handled?  What numerics does it have?  What do the object
# representations look like?
#

libscheme is very simple.  Each primitive is implemented as a C
procedure.  Each object is a 3 word structure with a type tag (the
type tag is also a first class Scheme object) and 2 data words.   It
parses Scheme expressions into a tree of these objects and then
interprets the tree.  It uses Hans Boehm's conservative garbage
collector.  Closures are allocated on the heap.  Full continuations
are not supported.  Escape continuations are implemented using
setjmp/longjmp.  It provides 1 word integers and 2 word floating point
numbers.

I didn't spend a lot of time working on libscheme's efficiency
(although I tried not to do anything really stupid, and I spent some
time with a profiler).  I wanted a library based Scheme similar to Tcl
that I could easily link with C code.  I decided that writing a little
scheme interpreter (one of my favorite pastimes) was preferable to
hacking apart the pieces of SCM or SIOD.  Code reuse police, take me
away :-).

--
Brent Benson                    
Harris Computer Systems



Fri, 18 Oct 1996 21:07:08 GMT  
 libscheme-0.1

Quote:

>  Each object is a 3 word structure with a type tag (the
>type tag is also a first class Scheme object) and 2 data words.

Hmm.  Every object has a tag, and the tag is an object.  It follows
that every object requires infinite memory!

You can't fool me -- it's turtles all the way down!  :-)



Fri, 18 Oct 1996 22:00:49 GMT  
 libscheme-0.1
#
# >  Each object is a 3 word structure with a type tag (the
# >type tag is also a first class Scheme object) and 2 data words.
#
# Hmm.  Every object has a tag, and the tag is an object.  It follows
# that every object requires infinite memory!
#
# You can't fool me -- it's turtles all the way down!  :-)
#

You got me.  There is one object (the object <type> which represents
the type of all types) that has a type tag with value 0.

--
Brent Benson                    
Harris Computer Systems



Fri, 18 Oct 1996 22:31:59 GMT  
 libscheme-0.1

Quote:

> You got me.  There is one object (the object <type> which represents
> the type of all types) that has a type tag with value 0.

So, the type of the object "type of all types" is not part of "type of
all types" ?
Why not have a cycle (<type>'s type tag pointing to <type>) ?

        Stefan



Sat, 19 Oct 1996 04:20:57 GMT  
 libscheme-0.1
#

# > You got me.  There is one object (the object <type> which represents
# > the type of all types) that has a type tag with value 0.
#
# So, the type of the object "type of all types" is not part of "type of
# all types" ?
# Why not have a cycle (<type>'s type tag pointing to <type>) ?
#

I just checked the code and that was my original intention.  The 0
type tag was a bootstrapping bug.  It'll be fixed in the next release.

--
Brent Benson                    
Harris Computer Systems



Sat, 19 Oct 1996 20:15:02 GMT  
 libscheme-0.1

Quote:

>I just checked the code and that was my original intention.  The 0
>type tag was a bootstrapping bug.  It'll be fixed in the next release.

Pretty neat.  This discussion started as a joke (about infinite regress
of types) and turned out to be isomorphic to an actual programming error!


Sat, 19 Oct 1996 21:54:55 GMT  
 libscheme-0.1

Quote:

>    I just uploaded libscheme-0.1.tar.gz to the Scheme repository's
>    incoming directory:

> I think it would be really helpful if announcements like this,
> especially for new implementations, had a few words about the
> implementation strategy.

I'll second that. But what we really need is a uniform review format.
For example, say 5 different people (like myself) download libscheme-0.1.tar.gz
and unpack it and build it. All 5 people find out the same thing, and
work could have been saved if there could be some sharing of info.
Or worse, different people are looking at different aspects and fail
to see the whole picture do to lack of time.

One thing I found: Libscheme-0.1 is a straightforward implementation
                   using Boems GC.

Quote:
> There are no good scheme benchmarks that i know of but an
> implementation sketch such as i've suggested would make a good
> stand-in for them.

Or better, when you have review areas such as "how much of the runtime
library" is hand-coded in C or compiled by a native-code compiler.

Ouch: Do you think we could use a standard "C-programmers bindings" for Lisp
      programming? (A standard content of <include> files, type names,
      macros, and procedure names?).

Might be a good way to kill off lisp and an independant language branch.



Sat, 19 Oct 1996 19:04:38 GMT  
 
 [ 9 post ] 

 Relevant Pages 

1. Libscheme C++ hack

2. libscheme on Linux?

3. libscheme question

4. Looking for Brent Benson, writer of LibScheme

5. Where is the author of libscheme?

6. libscheme-0.5 bug

7. ANNOUNCE: libscheme-0.5

8. Integration of libscheme and Tcl (announce)

9. ANNOUNCE: libscheme-0.4

10. Libscheme on Strings

11. libscheme-0.3

12. libscheme-0.2

 

 
Powered by phpBB® Forum Software