Re: [Chicken-users] MSVC makefile and patches

2008-02-22 Thread felix winkelmann
On Thu, Feb 21, 2008 at 11:44 PM, Ashley [EMAIL PROTECTED] wrote:
  
  The build runs on msys with no problems.  Tomorrow I plan to add
  a setup for cmd.exe, so a user only needs to have gnu make installed
  to build chicken for visual c.  That seems like a pretty low barrier
  for windows users.

Very good, Ashley. I'll integrate your stuff into the trunk ASAP.


cheers,
felix


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


[Chicken-users] Re: [Chicken-hackers] Re: repository branching

2008-02-22 Thread felix winkelmann
On Thu, Feb 21, 2008 at 9:13 PM, Alejandro Forero Cuervo
[EMAIL PROTECTED] wrote:

  Umm, what's the motivation for this?

To keep egg sources for released but old versions, with the option
of maintaining them. It's quite frustrating (as all of us know), that if
I reinstall some eggs (say on a new machine), and those eggs
use features that are only supported in newer chickens.


  I think it's a bad idea not only because it makes the size of a
  checkout of the repository grow greatly with each major release but,
  more importantly, because it adds complexity which, AFAICS, is not
  justified.

The repository is already too big to checkout completely (unless you
really want or have to). The complexity is IMHO acceptable. There
will be some simplification once I have moved the toplevel eggs
into a release/2 branch.


  If I now say stream-ext v1.8, no one knows if I'm refering to the
  code in 3/stream-ext/tags/1.8 or to the code in stream-ext/tags/1.8.
  Now I have to say stream-ext v1.8 for release 3.  If the goal is to
  allow us to use different code in our eggs for each Chicken release,
  it should force us to use different version numbers (so that at least
  stream-ext v1.8 always refers to the same particular code, even if it
  has to live in multiple locations, which maintainers will need to
  manually keep in sync).  If I have egg-version 1.7 for Chicken 2 and
  egg-version 1.8 for release 3 and then I need to make a release of my
  egg that will only work for Chicken 2, what version number should I
  use?  Should I use 1.8, making egg-foo v1.8 refer to two different
  chunks of codes or should I use 1.9, making people running v1.8 feel
  that they need to update?

The old tags for older releases are indeed unneccessary (but can be
kept for reference). To release an egg for an older version, merge
your changes into the appropriate release branch. Old eggs should
only be modified for critical bugs (probably on request). The current
official chicken version designates the branch you should be working
on.

  - Trying to standarize on version numbers beginning with the number of
   the release (eg. stream-ext/tags/3.1.8 vs stream-ext/tags/2.1.8).
   For eggs that need them, branches for older releases would be kept
   in branches, as in stream-ext/branches/2/.

We already have differing versioning schemes and we should not
start changing everything.


  - Embedding the number of major release in the name of the egg, to end
   up with stream-ext-2 and stream-ext-3.  This is probably the
   simplest solution.

No.


  - Extending the .meta files to specify which releases are supported by
   each version of an egg would probably have been even better (so in
   the meta files you specify the releases supported and the
   post-commit code figures out which is the latest supported egg
   release for each Chicken release).

  What percentage of the eggs do we really expect to require different
  code for each Chicken release?  I would imagine that the percentage is
  very small, but I don't really know...

  As a maintainer of eggs, I find the idea of having to keep separate
  directories for each egg for each release that I want to support
  unbearable.  If I maintain 15 eggs, I will have to maintain 45
  different directories the next time a major release comes along.  To
  make a release of a new version of my code, I now have to sync the two
  dirs and make two releases, separatelly.  And worse, since I have 2
  (and eventually more) trunks, chances are that they will diverge and
  I'll end up having to waste time merging them and figuring out what
  changed in one but failed to make it to the other.

You should not release for multiple chicken major versions. Release
for the current. Only to fix critical bugs should eggs for older releases
be modified.


  This change is not only inconsistent with the way most svn
  repositories tend to be used and redundant with the standard practices
  of /tags and /branches, but it puts a burden on the maintainers, when
  I think we ought to be striving for the opposite goal.  Maintainers
  are short on time; we shouldn't waste it by forcing them to spend some
  of this sync'ing multiple directories and increasing the complexity
  associated with their eggs.


Sorry, I may sound somewhat stubborn on this, but the whole machinery
to automatically upload eggs on changes is already quite complicated and
in place and working and I'm not going to change it (only extend).
While I admit that
the current layout is a bit confusing, I don't think the complexity is
overwhelming: just don't
worry about older releases. But we still have the possibility to maintain
eggs for old releases in a relatively simple manner, and this is crucial.

Repo checkout size shouldn't be a showstopper. Just checkout what you
need or use svn externals.


cheers,
felix


___
Chicken-users mailing list
Chicken-users@nongnu.org

Re: [Chicken-users] MSVC makefile and patches

2008-02-22 Thread Vincent Manis

On 2008 Feb 22, at 01:08, felix winkelmann wrote:

On Thu, Feb 21, 2008 at 11:44 PM, Ashley [EMAIL PROTECTED] 
games.com wrote:



The build runs on msys with no problems.  Tomorrow I plan to add
a setup for cmd.exe, so a user only needs to have gnu make installed
to build chicken for visual c.  That seems like a pretty low barrier
for windows users.


Very good, Ashley. I'll integrate your stuff into the trunk ASAP


Would it be possible to put together a package of GnuWin32 programs so
as to make Chicken building and egg installation reliable on Windows?
I guess that would include make, gzip, tar, maybe cp, rm, mv, and I
don't know what else. That would make it easy for a naive Windows user
to set up and use Chicken.

-- v


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] egg documentation

2008-02-22 Thread Vincent Manis

On 2008 Feb 21, at 23:57, Alejandro Forero Cuervo wrote:


As such, I will need more convincing before implementing support for
indexentry.  I don't see what it adds that we can't already do.  Ok,
I see that it would allow arbitrary pages to declare sub-topics of a
given topic, but I don't think that should be supported.


I fully agree that much of the indexing can be done automatically, but
a good index also includes entries that can't be generated  
automatically.
Again, taking my append example, we might be documenting SRFI-1, in  
which

case we might want concatenate to have an index entry for append.

Truthfully, the indexing facility is going to be more useful for the
Chicken manual itself, but I do think that a complicated egg might also
benefit from it.

As for bold-facing entries, sometimes that can be done from section
headings, but sometimes that isn't practical. Consider documenting the
tinyclos egg, where you might find that the main index entry for
`method resolution order' may or may not be in a section with that name.


These entries would just be written to a file, and external code
would then process them to produce index pages or whatever.


I think an index of the entire wiki would be way too big to be useful.
If there's interest in this, I could generate it.  Keep in mind that
the wiki currently has 300+ files.

Ulp. That requires more thought on my part. Again, I was mostly thinking
in terms of an index database for the manual, or for a small locally-
developed set of eggs.


Perhaps Alejandro's database of `where symbols in the wiki are
documented' could also be added to this external file?


I like this idea.  I'll probably do it. :-)

Thanks for the suggestions, Vincent.

My pleasure! -- v


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] Re: [Chicken-hackers] Re: repository branching

2008-02-22 Thread Alaric Snell-Pym


On 21 Feb 2008, at 8:13 pm, Alejandro Forero Cuervo wrote:


What percentage of the eggs do we really expect to require different
code for each Chicken release?  I would imagine that the percentage is
very small, but I don't really know...


I'd hope it to be few, and would want to handle it with a suitable
macro around the afflicted bits of code, rather than duplicating the
whole source file...

ABS

--
Alaric Snell-Pym
Work: http://www.snell-systems.co.uk/
Play: http://www.snell-pym.org.uk/alaric/
Blog: http://www.snell-pym.org.uk/?author=4




___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] Re: Stupid backquote/unquote question

2008-02-22 Thread Alaric Snell-Pym


On 21 Feb 2008, at 3:39 pm, Hans Nowak wrote:


(Which leads me to wonder, *are* there Lisps/Schemes that have
first-class macros?  Where you can, for example, pass a macro as an
argument to map, the way you can do with a function?)



There can be, in principle, but they wouldn't be very compilation-
friendly.

Take the metacircular evaluator out of SICP, and modify the semantics
of function such that, if the function is a function, evaluate all
its arguments and apply it to the result. If it's a macro, then do
not evaluate the arguments; just pass them directly to the underlying
function of the macro, then recursively evaluate the result in the
same environment...

However, doing this in a compiler would be a pain, since you cannot
in general tell if (a b c) is a function call or a macro reference.
So for every application you'd need to output code that, if it was a
macro, applied it to (b c), then called (eval ...) on the result, in
a specially constructed environment. Eg, you'd end up evaluation
anything that was made with macros anyway, unless you got really
clever with metacompiling macros, eg making them produce compiled
code rather than Scheme expressions. Which might be possible in some
situations.

However, you can make macros into second class values, a term I use
to describe things which do behave much like first class objects,
*except* that they must be fully decidable at compile time.

Eg, we could allow:

(defmacro (foo ...) ...)
(defmacro (bar ...) ...)

(define baz (if #t foo bar))

(baz ...)

Or:

(define (wibble macro)
   (macro 1 2 3))

(wibble foo)

Since in both cases, we can tell that it's foo we're using, at
compile time, with a little bit of partial evaluation.

ABS

--
Alaric Snell-Pym
Work: http://www.snell-systems.co.uk/
Play: http://www.snell-pym.org.uk/alaric/
Blog: http://www.snell-pym.org.uk/?author=4




___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] Re: [Chicken-hackers] Re: repository branching

2008-02-22 Thread Mario Domenech Goulart
On Fri, 22 Feb 2008 12:34:36 +0100 Peter Bex [EMAIL PROTECTED] wrote:

 On Fri, Feb 22, 2008 at 02:38:25AM -0800, Alejandro Forero Cuervo wrote:
  So what about the idea of adding a (supported-releases 2.3 3.0.0) tag
  to the meta file, where particular versions of an egg that needs to do
  so specify which is the range of Chicken releases it supports?
 
 Actually, this is a much better idea as it also provides better granularity
 than the current system.  I have a practical problem *right now* with my
 soon-to-be-released wmiirc egg.  It _requires_ chicken 3.0.1 (because of
 a change in the way printf works on ports), but I can't currently express
 this in the meta file/repos tree, afaik.  So it's located in the
 release/3 but it won't actually work with the 3.0.0 release.

In this case I think you should create a custom procedure to replace
printf (maybe using printf's code from 3.0.1?).  When the next repo
branch takes place, you can switch back to the stock printf.

It'd be a temporary kludgy hack, but it should work (and it'd work
much better than requiring a chicken version which does not exist :-)).

Best wishes,
Mario


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] Re: [Chicken-hackers] Re: repository branching

2008-02-22 Thread Alaric Snell-Pym


On 22 Feb 2008, at 10:56 am, Alejandro Forero Cuervo wrote:


I'd hope it to be few, and would want to handle it with a suitable
macro around the afflicted bits of code, rather than duplicating the
whole source file...


Yes, that'd seem a more reasonable approach, I'd have to say...

Alejo, ducking to avoid the rotten oranges that Felix will throw at
him!


:-)

I'd expect that currently written eggs would be written for whatever
version of Chicken the egg author had installed when they started,
and that they'd tag it with this information somehow in the .meta
file or whatever (or, if they're feeling like the effort, actually
looking up what features they use and when they came in, and working
out the minimum version they actually require).

THEN when they upgrade to a new release, and use a snazzy new
feature, they can do either:

(require chicken-2-9)

...where all subsequent versions of chicken that remain backwards
compatible to 2.9 will still accept that, or:

or... what's it called... that thing that works like C's #ifdef.
Something-case. Can't find it in the manual. Use that to select
between different implementations for different versions, so they can
use snazzy features that provide more speed or features, while
falling back to old code if it's not available.

I think I see Felix's point - *if* you consider the version-specific
copies of the eggs as tags of the egg repository at that point in
time, when they all worked with that version of chicken, and only
ever modify them if a critical bug is found therein. However, this
means that, as a blanket definition, old releases of chicken can't
use newer eggs at all, unless the egg maintainer goes to special
efforts to make them available by backporting them.

In which case, I'd take the eggs in / to be current, and just tag
them off for a release of chicken *before* releasing the new chicken.
Eg, when 3.0 is released, the current set of eggs become the 2.9
'basket', and are tagged for prosperity somewhere. Then 3.0 comes out
and people rewrite all their eggs to use the amazing new call-with-
free-biscuit macro...

*browse*

Hmmm, I always find fun things when I start looking in the Chicken
manual. case-lambda. Must remember that one. It'd be cool if it let
you put constants and stuff in the cases, destructuring bindings
always make functions that recurse over data structures particularly
lovely. Ah, match-lambda* exists! Drool...

ABS

--
Alaric Snell-Pym
Work: http://www.snell-systems.co.uk/
Play: http://www.snell-pym.org.uk/alaric/
Blog: http://www.snell-pym.org.uk/?author=4




___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


[Chicken-users] understanding eval

2008-02-22 Thread Daishi Kato
Hi,

This might be a stupid question,
but would someone help me understand the following eval example?
I was expecting to get 1.

Daishi

8--8--8--8--8--8--8--8--

CHICKEN
Version 2.732 - linux-unix-gnu-x86  [ manyargs dload ptables applyhook 
cross ]
(c)2000-2007 Felix L. Winkelmanncompiled 2007-12-04 on spirits (Linux)

#;1 (define a 'car)
#;2 (define b '(1 2 3))
#;3 (eval (list a b))
Error: call of non-procedure: 1

Call history:

syntax(eval (list a b))
syntax(list a b)
eval  (eval (list a b))
eval  (list a b)
syntax(car (1 2 3))
syntax(1 2 3)
eval  (car (1 2 3))
eval  (1 2 3) --


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] understanding eval

2008-02-22 Thread Peter Bex
On Fri, Feb 22, 2008 at 09:22:36PM +0900, Daishi Kato wrote:
 Hi,
 
 This might be a stupid question,
 but would someone help me understand the following eval example?
 I was expecting to get 1.

You're evaluating (car (1 2 3))
You want to be evaluating (car (list 1 2 3)) or (car (quote (1 2 3)))

 8--8--8--8--8--8--8--8--
 
 CHICKEN
 Version 2.732 - linux-unix-gnu-x86  [ manyargs dload ptables applyhook 
 cross ]
 (c)2000-2007 Felix L. Winkelmanncompiled 2007-12-04 on spirits (Linux)
 
 #;1 (define a 'car)
 #;2 (define b '(1 2 3))
 #;3 (eval (list a b))
 Error: call of non-procedure: 1
 
 Call history:
 
 syntax(eval (list a b))
 syntax(list a b)
 eval  (eval (list a b))
 eval  (list a b)
 syntax(car (1 2 3))
 syntax(1 2 3)
 eval  (car (1 2 3))
 eval  (1 2 3) --

Cheers,
Peter
-- 
http://sjamaan.ath.cx
--
The process of preparing programs for a digital computer
 is especially attractive, not only because it can be economically
 and scientifically rewarding, but also because it can be an aesthetic
 experience much like composing poetry or music.
-- Donald Knuth


pgpMInQgMbwFF.pgp
Description: PGP signature
___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] understanding eval

2008-02-22 Thread Daishi Kato
OK, so that was stupid.

How about this?

(define a 'values)
(define b '((1 2 3) #(4 5 6))

I'd like to evaluate (values '(1 2 3) '#(4 5 6))
using eval, a and b.

--daishi

At Fri, 22 Feb 2008 13:29:55 +0100,
Peter Bex wrote:
 On Fri, Feb 22, 2008 at 09:22:36PM +0900, Daishi Kato wrote:
  Hi,
  
  This might be a stupid question,
  but would someone help me understand the following eval example?
  I was expecting to get 1.
 
 You're evaluating (car (1 2 3))
 You want to be evaluating (car (list 1 2 3)) or (car (quote (1 2 3)))
 
  8--8--8--8--8--8--8--8--
  
  CHICKEN
  Version 2.732 - linux-unix-gnu-x86  [ manyargs dload ptables applyhook 
  cross ]
  (c)2000-2007 Felix L. Winkelmanncompiled 2007-12-04 on spirits 
  (Linux)
  
  #;1 (define a 'car)
  #;2 (define b '(1 2 3))
  #;3 (eval (list a b))
  Error: call of non-procedure: 1
  
  Call history:
  
  syntax(eval (list a b))
  syntax(list a b)
  eval  (eval (list a b))
  eval  (list a b)
  syntax(car (1 2 3))
  syntax(1 2 3)
  eval  (car (1 2 3))
  eval  (1 2 3) --
 
 Cheers,
 Peter
 -- 
 http://sjamaan.ath.cx
 --
 The process of preparing programs for a digital computer
  is especially attractive, not only because it can be economically
  and scientifically rewarding, but also because it can be an aesthetic
  experience much like composing poetry or music.
   -- Donald Knuth


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] understanding eval

2008-02-22 Thread Peter Bex
On Fri, Feb 22, 2008 at 09:57:42PM +0900, Daishi Kato wrote:
 OK, so that was stupid.
 
 How about this?
 
 (define a 'values)
 (define b '((1 2 3) #(4 5 6))
 
 I'd like to evaluate (values '(1 2 3) '#(4 5 6))
 using eval, a and b.

More of the same:
(eval (cons a (map (cut list 'quote ) b)))

HTH,
Peter
-- 
http://sjamaan.ath.cx
--
The process of preparing programs for a digital computer
 is especially attractive, not only because it can be economically
 and scientifically rewarding, but also because it can be an aesthetic
 experience much like composing poetry or music.
-- Donald Knuth


pgpJtM9M93QLR.pgp
Description: PGP signature
___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] aliases in the wiki

2008-02-22 Thread felix winkelmann
On Sun, Feb 17, 2008 at 7:11 PM, Alejandro Forero Cuervo
[EMAIL PROTECTED] wrote:
 I have tweaked a bit the code in Svnwiki a bit to support defining
  aliases for functions in the wiki.  My thinking is that (1) for all
  procedures f, http://chicken.wiki.br/f should return something useful,
  regardless of where f is defined and (2) we shouldn't have to
  duplicate information in the wiki.

  Here is how I do it:

  $ ln -s 'stream-ext#stream-xcons' stream-xcons
  $ svn add stream-xcons
  $ svn ci -m Creating link for procedure stream-xcons

  This causes accesses to http://chicken.wiki.br/stream-xcons to be
  redirected to http://chicken.wiki.br/stream-ext#stream-xcons.  Go
  ahead and try it.

  As such, we don't have to split the eggs' documentation wiki files (or
  documents in the manual) and we can still allow people to play with
  URL hacking.

  Feel free to create links such as those.  To make it even easier, you
  can send me mails with the subject 'chicken wiki links' containing
  lines of the form 'source-for-link destination#url' and I will define
  those links.  If Mario or some other hackers can programatically
  extract a list of such functions and their location in the wiki,
  that'd be neat. :-)


Could we please remove this? It makes a grep over the working
copy impossible.


cheers,
felix


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] aliases in the wiki

2008-02-22 Thread Nelson Castillo
  Could we please remove this? It makes a grep over the working
  copy impossible.

Hi Felix.

What about:

find -P . -print0 | xargs -0 grep TEXT

Regards,
N.-

-- 
http://arhuaco.org


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] aliases in the wiki

2008-02-22 Thread Nelson Castillo
On Fri, Feb 22, 2008 at 5:55 PM, Nelson Castillo
[EMAIL PROTECTED] wrote:
   Could we please remove this? It makes a grep over the working
copy impossible.

  Hi Felix.

  What about:

  find -P . -print0 | xargs -0 grep TEXT

Sorry.

It is:

find . -type f  -print0 | xargs -0 grep TEXT


N.-

-- 
http://arhuaco.org


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users


Re: [Chicken-users] aliases in the wiki

2008-02-22 Thread Felix Winkelmann
From: Nelson Castillo [EMAIL PROTECTED]
Subject: Re: [Chicken-users] aliases in the wiki
Date: Fri, 22 Feb 2008 18:04:34 -0500

 On Fri, Feb 22, 2008 at 5:55 PM, Nelson Castillo
 [EMAIL PROTECTED] wrote:
Could we please remove this? It makes a grep over the working
 copy impossible.
 
   Hi Felix.
 
   What about:
 
   find -P . -print0 | xargs -0 grep TEXT
 
 Sorry.
 
 It is:
 
 find . -type f  -print0 | xargs -0 grep TEXT
 

Ugh.

IIRC, azul suggested a different (database based) way of
handling this. Creating thousands of dangling links doesn't
look right to me.


cheers,
felix


___
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users