Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

announcing Larceny v0.98 "General Ripper"

604 views
Skip to first unread message

cesu...@gmail.com

unread,
Mar 9, 2015, 7:56:45 AM3/9/15
to
Larceny v0.98 ("General Ripper") is (at last) available
for download at http://www.larcenists.org/

Larceny v0.98 implements almost all of the R7RS (small)
standard for the Scheme programming language, and extends
the R7RS language to provide excellent interoperability
between R7RS and R6RS libraries and programs. The older
standards (R6RS, R5RS, and IEEE Std 1178) describe proper
subsets of R7RS Scheme as implemented by Larceny.

Larceny v0.98 also adds support for several new SRFIs,
including SRFI 101, 111, 112, 113, 114, 115, and 116, and
upgrades SRFI 14 (character sets) to Unicode 7.0.0.

* * *

I'd like to thank Kent Dybvig who, several years ago,
upgraded Larceny's Unicode test suite to Unicode 5.1.
I also thank Matthew Flatt for allowing me to use Racket's
R6RS tests as starting point for Larceny's R7RS tests.

Kevin McLarnon wrote Larceny's DEP patch for Windows.

As usual, I thank Andre van Tonder for his implementation
of R6RS libraries and macros. Larceny's R7RS/R6RS modes
are built upon an updated version of van Tonder's code.

Finally, I thank everyone who contributed to the R7RS
standard, especially Alex Shinn, John Cowan, and Arthur
Gleckler.

William D Clinger

ke...@tkcnf.or.jp

unread,
Mar 11, 2015, 8:13:00 AM3/11/15
to
Hi

I tried Larceny of the Windows version.
I think it is very nice.
About 20 years ago, I was a user of MacScheme.
I was studying with the [Programming in MacScheme (MIT Press)].
I have been respected Mr. Clinger from that time.

John Cowan

unread,
Mar 11, 2015, 6:07:16 PM3/11/15
to
On Monday, March 9, 2015 at 7:56:45 AM UTC-4, cesu...@gmail.com wrote:

> Finally, I thank everyone who contributed to the R7RS
> standard, especially Alex Shinn, John Cowan, and Arthur
> Gleckler.

Thank you, and thank you for adding to the growing list of R7RS
implementations. The current list is: Chibi, Chicken, Foment, Kawa,
Sagittarius, Guile, Picrin, Larceny, Owl Lisp (immutable operations only).

--
What asininity could I have uttered that they applaud me thus?
--Phocion, Greek orator


cesu...@gmail.com

unread,
Mar 12, 2015, 9:04:54 AM3/12/15
to
John Cowan wrote:
> Thank you, and thank you for adding to the growing list of R7RS
> implementations. The current list is: Chibi, Chicken, Foment, Kawa,
> Sagittarius, Guile, Picrin, Larceny, Owl Lisp (immutable operations only).

Not to mention Gauche and Husk.

Will

WJ

unread,
Mar 12, 2015, 12:34:51 PM3/12/15
to
cesu...@gmail.com wrote:

> Larceny v0.98 ("General Ripper") is (at last) available
> for download at http://www.larcenists.org/

When I tried to install this under Windows, the Avast
anti-virus program quarentined the file "larceny.bin.exe",
saying that it was infected with Win32:Evo-gen.

I'm hoping that this was a false positive.

WJ

unread,
Mar 12, 2015, 12:38:02 PM3/12/15
to
WJ wrote:


> anti-virus program quarentined the file "larceny.bin.exe",
^^^^^^^^^^^
quarantined

Daniel Leslie

unread,
Mar 12, 2015, 2:59:04 PM3/12/15
to
Wow, look at those benchmarks:
http://www.larcenists.org/benchmarksGenuineR7Linux.html

As a Chicken/Chibi user I'm now /very/ curious about Larceny.

-Dan

Daniel Leslie

unread,
Mar 12, 2015, 4:03:10 PM3/12/15
to
Self-reply for clarity:

Was Chicken run as an interpreter or a compiler?

csi executed scheme is known to be much slower than csc compiled scheme.

-Dan

WJ

unread,
Mar 12, 2015, 4:52:55 PM3/12/15
to
After by-passing Avast, attempting to run the exe produces

larceny.bin.exe is not a valid Win32 application.

This is under Windows XP.

cesu...@gmail.com

unread,
Mar 12, 2015, 5:24:29 PM3/12/15
to
Daniel Leslie wrote:
> Was Chicken run as an interpreter or a compiler?

Chicken was run as as a compiler. See the evaluate() function in
https://github.com/larcenists/larceny/blob/master/test/Benchmarking/R7RS/bench
along with the COMP, EXTENSION, and EXTENSIONCOMP parameters for
chicken.

Larceny has long been one of the fastest implementations of
R5 and R6 Scheme. See
http://www.larcenists.org/benchmarksGenuineR6Linux.html and
http://www.larcenists.org/Twobit/benchmarksFakeR6Linux.html

Note that the last of those URLs shows Petit Larceny with a
slight advantage over compiled Chicken, and Larceny with a
considerable advantage over Petit Larceny.

Given that history, you should not be surprised that Larceny
is one of the fastest extant implementations of R7 Scheme,
and the fastest overall of the R7RS systems I've been able
to benchmark.

Will

Daniel Leslie

unread,
Mar 12, 2015, 5:35:18 PM3/12/15
to
Now if only Larceny had access to Chicken's ecosystem of Eggs!

I notice that there's an MzScheme compatability layer in master; has this been abandoned, and has there been any consideration to continuing such efforts in the future, but for other schemes?

It would be incredible if bind/foreigners/easyffi were available. That would open the door to utilizing much of the coup as calls to ##sys internals are generally frowned upon.

Thanks,
-Dan

cesu...@gmail.com

unread,
Mar 12, 2015, 5:37:59 PM3/12/15
to
WJ quoting himself:
> > When I tried to install this under Windows, the Avast
> > anti-virus program quarentined the file "larceny.bin.exe",
> > saying that it was infected with Win32:Evo-gen.
> >
> > I'm hoping that this was a false positive.
>
> After by-passing Avast, attempting to run the exe produces
>
> larceny.bin.exe is not a valid Win32 application.
>
> This is under Windows XP.

It's entirely possible that Larceny v0.98 doesn't run under
Windows XP. It certainly won't run under Windows XP unless
the DEP-relevant service packs have been installed.

Larceny v0.97 is known to run under Windows XP, but v0.97
is pre-R7RS.

If the Windows version of Larceny v0.98 is infected with
Win32:Evo-gen, I'd certainly like to know about it. From
what I read following a quick Google search, Avast often
reports false positives for Win32:Evo-gen. The machine on
which the Windows version of Larceny v0.98 was built used
Norton anti-virus, not Avast.

Will

cesu...@gmail.com

unread,
Mar 12, 2015, 5:43:17 PM3/12/15
to
Daniel Leslie wrote:
> I notice that there's an MzScheme compatability layer in master;
> has this been abandoned,

MzScheme compatibility has been abandoned, but a vestige of it
lives on in Common Larceny, which is not part of Larceny v0.98
but might be resuscitated in some future version. The Larceny
Project is more than 20 years old, and some obsolete source
code still lurks within its source tree.

Will

George Neuner

unread,
Mar 12, 2015, 9:51:32 PM3/12/15
to
On Thu, 12 Mar 2015 14:37:57 -0700 (PDT), cesu...@gmail.com wrote:

>WJ quoting himself:
>>
>> After by-passing Avast, attempting to run the exe produces
>> larceny.bin.exe is not a valid Win32 application.
>> This is under Windows XP.
>
>It's entirely possible that Larceny v0.98 doesn't run under
>Windows XP. It certainly won't run under Windows XP unless
>the DEP-relevant service packs have been installed.

The executable may not run, but Windows shouldn't say it isn't a valid
application - you should get a message that it requires SP2 or later.

George

George Neuner

unread,
Mar 13, 2015, 1:43:14 AM3/13/15
to
On Thu, 12 Mar 2015 21:51:26 -0400, George Neuner
<gneu...@comcast.net> wrote:

>The executable may not run, but Windows shouldn't say it isn't a valid
>application - you should get a message that it requires SP2 or later.

Or possibly the message may be only that it needs DEP. It depends on
which compiler you use.

George

cesu...@gmail.com

unread,
Mar 13, 2015, 9:37:06 AM3/13/15
to
WJ wrote:
> After by-passing Avast, attempting to run the exe produces
>
> larceny.bin.exe is not a valid Win32 application.
>
> This is under Windows XP.

I dug up an old Windows XP machine and got the same error
message you did. Apparently Larceny v0.98 does not run
under Windows XP.

I suspect this is related to DEP, because the development
version of Larceny was running under Windows XP until we
had to move to a newer machine to add the DEP patch. That
holds out a slim possibility that Larceny v0.98 might run
under Windows XP if all available service packs have been
installed, but I haven't tested that.

If you really want to run Larceny v0.98 under Windows XP,
you could download the Larceny v0.98 source code, edit the
src/Rts/Sys/larceny.c file to remove the DEP patch, and
use Larceny v0.97 and a Windows XP version of Microsoft's
compiler tools to compile the edited source code. That
should work, but again I haven't tested it.

Microsoft support for Windows XP ended last year. I guess
we'll follow Microsoft's example on this. Sorry.

I will, however, revise Larceny's download page to mention
this system requirement.

Will

WJ

unread,
Mar 13, 2015, 1:17:41 PM3/13/15
to
I haven't needed any support from Microsoft for years.
I simply use the Comodo firewall and Avast (anti-virus).

>
> I will, however, revise Larceny's download page to mention
> this system requirement.

Thanks.

cesu...@gmail.com

unread,
Mar 13, 2015, 1:22:59 PM3/13/15
to
I wrote:
> If you really want to run Larceny v0.98 under Windows XP,
> you could download the Larceny v0.98 source code, edit the
> src/Rts/Sys/larceny.c file to remove the DEP patch, and
> use Larceny v0.97 and a Windows XP version of Microsoft's
> compiler tools to compile the edited source code. That
> should work, but again I haven't tested it.

That was easier for me to do than for most users, so now it's
done.

http://www.larcenists.org/download.html now links to a prebuilt
binary distribution of Larceny v0.98 for Windows XP. Enjoy.

Will

WJ

unread,
Mar 13, 2015, 2:45:32 PM3/13/15
to
Thanks a lot! It works.

ke...@tkcnf.or.jp

unread,
Mar 14, 2015, 4:53:16 AM3/14/15
to
Hi

Please answer my question.
How do I use trace untrace in R7RS mode?

It invoke an error as it's undefined.

Kenichi Sasagawa

C:\larceny>larceny -r7rs
larceny -r7rs
Larceny v0.98 "General Ripper" (Mar 7 2015 07:45:45, precise:Win32:unified)
larceny.heap, built on Sat 03/07/2015

> (define (fact n) (if (= n 0) 1 (* n (fact (- n 1)))))
fact

> (trace fact)


Error: unhandled condition:
Compound condition has these components:
#<record &assertion>
#<record &message>
message : "?: undefined global variable: trace \n"

cesu...@gmail.com

unread,
Mar 14, 2015, 9:16:17 AM3/14/15
to
ke...@tkcnf.or.jp asked:
> How do I use trace untrace in R7RS mode?

You have to import them first. They are procedures in Larceny's
R5RS mode, and aren't exported by any of the standard libraries,
so you have import them as primitives. (See section 3.3.6 of
Larceny's user manual.)

% larceny -r7rs
Larceny v0.98 "General Ripper"

> (import (primitives trace untrace))

> (define (fact n) (if (= n 0) 1 (* n (fact (- n 1)))))
fact

> (trace fact)
#<PROCEDURE fact>

> (fact 5)
Enter fact(5)
Enter fact(4)
Enter fact(3)
Enter fact(2)
Enter fact(1)
Enter fact(0)
Leave fact(0) => 1
Leave fact(1) => 1
Leave fact(2) => 2
Leave fact(3) => 6
Leave fact(4) => 24
Leave fact(5) => 120
120

> (untrace fact)

> (fact 10)
3628800


Will

WJ

unread,
Mar 14, 2015, 11:31:56 AM3/14/15
to
cesu...@gmail.com wrote:

> (define (fact n) (if (= n 0) 1 (* n (fact (- n 1)))))

I think that that SRFI-42 isn't as widely used as it
ought to be, so I'm going to post a version using it.

(define (fact n) (product-ec (: m 1 (+ 1 n)) m))

> (fact 10)
3628800

ke...@tkcnf.or.jp

unread,
Mar 14, 2015, 12:24:26 PM3/14/15
to
> You have to import them first. They are procedures in Larceny's
> R5RS mode, and aren't exported by any of the standard libraries,
> so you have import them as primitives. (See section 3.3.6 of
> Larceny's user manual.)

Thank you very much.

Kenichi Sasagawa

yon...@gmail.com

unread,
Mar 14, 2015, 9:02:17 PM3/14/15
to
On Windows 8.1 x64, I get:

C:\bin\larceny-0.98>larceny -r7rs
Larceny v0.98 "General Ripper" (Mar 7 2015 07:45:45, precise:Win32:unified)
larceny.heap, built on Sat 03/07/2015
Warning: loading source in favor of stale fasl file: C:\bin\larceny-0.98\/lib/R6
RS/r6rsmode.sch
Warning: loading source in favor of stale fasl file: C:\bin\larceny-0.98\/lib/R7
RS/r7rs-includer.sch
Warning: loading source in favor of stale fasl file: C:\bin\larceny-0.98\/lib/R7
RS/r7rs-cond-expander.sch
Warning: loading source in favor of stale fasl file: C:\bin\larceny-0.98\/lib/R6
RS/r6rs-compat-larceny.sch
Warning: loading source in favor of stale fasl file: C:\bin\larceny-0.98\/lib/R6
RS/r6rs-runtime.sch
Warning: loading source in favor of stale fasl file: C:\bin\larceny-0.98\/lib/R6
RS/r6rs-expander.sch
Warning: loading source in favor of stale fasl file: C:\bin\larceny-0.98\/lib/R6
RS/r6rs-standard-libraries.sch
WARNING from macro expander:
Syntactic keyword used as a variable
begin
WARNING from macro expander:
Syntactic keyword used as a variable
if
WARNING from macro expander:
Syntactic keyword used as a variable
lambda
WARNING from macro expander:
Syntactic keyword used as a variable
quote
WARNING from macro expander:
Syntactic keyword used as a variable
set!
WARNING from macro expander:
Syntactic keyword used as a variable
and
WARNING from macro expander:
Syntactic keyword used as a variable
or
WARNING from macro expander:
Syntactic keyword used as a variable
define
WARNING from macro expander:
Syntactic keyword used as a variable
define-syntax
WARNING from macro expander:
Syntactic keyword used as a variable
let-syntax
WARNING from macro expander:
Syntactic keyword used as a variable
letrec-syntax
WARNING from macro expander:
Syntactic keyword used as a variable
begin
WARNING from macro expander:
Syntactic keyword used as a variable
if
WARNING from macro expander:
Syntactic keyword used as a variable
set!
WARNING from macro expander:
Syntactic keyword used as a variable
and
WARNING from macro expander:
Syntactic keyword used as a variable
or
WARNING from macro expander:
Syntactic keyword used as a variable
lambda
WARNING from macro expander:
Syntactic keyword used as a variable
quote
WARNING from macro expander:
Syntactic keyword used as a variable
define
WARNING from macro expander:
Syntactic keyword used as a variable
define-syntax
WARNING from macro expander:
Syntactic keyword used as a variable
let-syntax
WARNING from macro expander:
Syntactic keyword used as a variable
letrec-syntax


Error: ?: undefined global variable: primitives
Entering debugger; type "?" for help.
debug>

ke...@tkcnf.or.jp

unread,
Mar 14, 2015, 10:02:46 PM3/14/15
to
Probably,you have to compile runtime libraly.
see user's manual [2.5. Compiling the R7RS/R6RS standard libraries]

Kenichi Sasagawa

-------------------
C:\larceny>larceny
larceny
Larceny v0.98 "General Ripper" (Mar 7 2015 07:45:45, precise:Win32:unified)
larceny.heap, built on Sat 03/07/2015

> (require 'r7rsmode)
#t

> (larceny:compile-r7rs-runtime)
Words allocated: 229407889
.....
Elapsed mark time: 0 ms (CPU: 0 in 0 marks.)
Elapsed summarization time: 0 ms (CPU: 0 in 0 summarization.)

> (exit)

C:\larceny>larceny -r7rs

yon...@gmail.com

unread,
Mar 15, 2015, 4:23:02 AM3/15/15
to
Thanks. That was it.

ke...@tkcnf.or.jp

unread,
Mar 15, 2015, 7:44:45 PM3/15/15
to
Hi
I was surprised. Incredible speed. unbelievable!
I compared to my own making Scheme.

Kenichi Sasagawa

(define (tarai x y z)
(if (<= x y)
y
(tarai (tarai (- x 1) y z)
(tarai (- y 1) z x)
(tarai (- z 1) x y))))

Larceny
> (time (tarai 12 6 0))
Words allocated: 0
Elapsed time...: 70 ms (User: 70 ms; System: 0 ms)

Normal
norm> (time (tarai 12 6 0))
12
total 0.722 second
GC 0.0 second
#<undef>

Paul Rubin

unread,
Mar 16, 2015, 7:13:40 PM3/16/15
to
ke...@tkcnf.or.jp writes:
> Larceny
>> (time (tarai 12 6 0))
> Words allocated: 0
> Elapsed time...: 70 ms (User: 70 ms; System: 0 ms)

Wow. I got about the same speed on my laptop (2.6 Ghz Core i5) with GHC
and fixnums, or with C++. With GHC and bignums, it was around 225 msec.
So I suspect Larceny is using fixnums, maybe with an overflow trap?

Paul Rubin

unread,
Mar 16, 2015, 7:30:33 PM3/16/15
to
Paul Rubin <no.e...@nospam.invalid> writes:
> Wow. I got about the same speed on my laptop (2.6 Ghz Core i5) with GHC
> and fixnums, or with C++. With GHC and bignums, it was around 225 msec.
> So I suspect Larceny is using fixnums, maybe with an overflow trap?

Python 2.7.5: about 2 seconds
Emacs Lisp (interpreted): 2.96 seconds
Emacs Lisp (byte compiled) 1.5 seconds
Ruby 2.0.0: 0.7 seconds

Normal is doing ok :)

Paul Rubin

unread,
Mar 16, 2015, 7:37:13 PM3/16/15
to
Paul Rubin <no.e...@nospam.invalid> writes:
> With GHC and bignums, it was around 225 msec.

I should add, that was using strictness annotations to get it to compute
the same stuff as the Scheme code. The straightforward implementation
with lazy evaluation takes basically 0 time.

ke...@tkcnf.or.jp

unread,
Mar 16, 2015, 11:17:50 PM3/16/15
to
> Normal is doing ok :)

Thank you.
I am dreaming that I will make a compiler that generate native x86 code, someday.

Kenichi Sasagawa

godek....@gmail.com

unread,
Mar 17, 2015, 5:39:41 AM3/17/15
to
W dniu wtorek, 17 marca 2015 04:17:50 UTC+1 użytkownik ke...@tkcnf.or.jp napisał:
> > Normal is doing ok :)
>
> Thank you.
> I am dreaming that I will make a compiler that generate native x86 code, someday.

I just started to work on something similar. Actually, I am thinking of
a compiler that could make use of the CUDA/OpenCL API, so that e.g. the
patterns like map or reduce could be paralellized automatically, and that
evaluating function arguments could be done in parallel rather than in
any specified order

Currently, I've been reading through the SICP chapter 5 to get a grasp
how to implement compilers in general. I also wrote a guile extension
that allows to interpret a bytevector as machine code (the code
works on linux and uses mmap; I've seen stack overflow snippets to do
the same on Windows), and I think that it's a good start.

Some of the decisions that I am willing to make is to resign of vectors
and strings and to use only lists, that could either be implemented
as regular arrays, or as vlists, as described by Phil Bagwell

[Note that the reason why I decided to work on this is mostly because
I'm trying to go further with my robot simulation environment, and I
already observe that the performance is a problem, even though the
most difficult computational part is the calculation of jacobian
pseudoinverses using SVD. In the future I plan to employ some neural
controllers which -- as I expect -- will further consume computational
resources, so it would be lovely if there was a Scheme compiler that
would guarantee to perform certain optimizations. Also, there's this
very interesting paper by Darlington and Burstall that explores the
potential of a more high-level optimization of Scheme code, like
transforming non-tail recursive calls to proper tail recursion:
http://www.diku.dk/OLD/undervisning/2003e/235/Burstall-1977-TransSystem.pdf
and although there are certainly some theoretical shortages, the
method looks very promising]

So if you (or anyone else) would be interested in collaboration, let
me know

ke...@tkcnf.or.jp

unread,
Mar 17, 2015, 7:58:24 AM3/17/15
to
> http://www.diku.dk/OLD/undervisning/2003e/235/Burstall-1977-TransSystem.pdf

I think that it is an interesting paper.
I will read it carefully.

Kenichi Sasagawa

ronaldschrode...@gmail.com

unread,
Jan 26, 2016, 11:25:36 AM1/26/16
to
I like it! My R5RS prograns run fine, and fast!

My favorite interpreters until now were Petite and Rhizome/pi; I prefer interpreters over compilers and these two, together with MzScheme, are among the fastest I know. And Larceny competes very well!

If you don't need all the bells and whistles provided by Racket, Chicken or Gambit then Larceny could be just what you want.
0 new messages