[racket-dev] info.rkt `deps` and new #:version keyword: Backward compatibility?

From: Greg Hendershott (greghendershott at gmail.com)
Date: Thu Oct 3 09:57:56 EDT 2013

Hmm, then maybe I'm misdiagnosing the error.

If you were to try doing

  raco pkg install frog

using from HEAD as of a few days ago, you would see something
like this:

greg at halo:~$ ~/src/plt/racket/racket/bin/raco pkg install frog
Resolving "frog" via https://pkg.racket-lang.org
Downloading https://github.com/greghendershott/frog/tarball/fecbe1d75632231eb7af70ef00ad31e95dda2cad
The following uninstalled packages are listed as dependencies of frog:
Would you like to install these dependencies? [Y/n/a/?] y
Resolving "markdown" via https://pkg.racket-lang.org
Downloading https://github.com/greghendershott/markdown/tarball/6f1d1e6578c6d6f832357a81484ee427b6a2fc21
The following uninstalled packages were listed as dependencies
and they were installed:
 dependencies of frog:
raco setup: version: [3m]
raco setup: installation name: development
raco setup: variants: 3m
raco setup: main collects: /home/greg/src/plt/racket/racket/collects
raco setup: collects paths:
raco setup:   /home/greg/src/plt/racket/racket/collects
raco setup: main pkgs: /home/greg/src/plt/racket/racket/share/pkgs
raco setup: pkgs paths:
raco setup:   /home/greg/src/plt/racket/racket/share/pkgs
raco setup:   /home/greg/src/plt/racket/racket/share/devel-pkgs
raco setup:   /home/greg/.racket/development/pkgs
raco setup: links files:
raco setup:   /home/greg/src/plt/racket/racket/share/links.rktd
raco setup:   /home/greg/src/plt/racket/racket/share/devel-pkgs/links.rktd
raco setup:   /home/greg/.racket/development/links.rktd
raco setup: main docs: /home/greg/src/plt/racket/racket/doc
raco setup: --- updating info-domain tables ---
raco setup: updating: /home/greg/src/plt/racket/racket/share/info-cache.rktd
raco setup: --- pre-installing collections ---
raco setup: --- installing foreign libraries ---
raco setup: --- installing shared files ---
raco setup: --- compiling collections ---
raco setup: making: <pkgs>/frog/example
raco setup: making: <pkgs>/frog/example/_src
raco setup: making: <pkgs>/frog/example/_src/posts
raco setup: making: <pkgs>/frog/example/_src/subdir
raco setup: making: <pkgs>/frog/example/css
raco setup: making: <pkgs>/frog/example/fonts
raco setup: making: <pkgs>/frog/example/img
raco setup: making: <pkgs>/frog/example/js
raco setup: making: <pkgs>/frog/frog
raco setup:  in <pkgs>/frog/frog
raco setup:  in <pkgs>/markdown/markdown
raco setup:  in <pkgs>/frog
application: no case matching 1 non-keyword argument
  procedure: collection-file-path
   #:fail #<procedure:...tup/collects.rkt:31:32>

Although I didn't know how to dig into that error message, I
remembered seeing "#:version" in Jay's presentation 30 minutes
previously, and I jumped to the conclusion it was due to this.

The same `raco pkg install frog` works fine with 5.3.6, and IIRC
worked fine with 5.3.90.?? until recently.

On Thu, Oct 3, 2013 at 9:48 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> Yes, the `#:version` keyword is optional. The old format, as in
>  (define deps '(("markdown" "0.5")
>                 "rackjure"))
> is still supported.
> The old format is described as "deprecated" in the documentation, but
> it's fine to use it to support both v5.3.x and v.5.90.x.
> At Thu, 3 Oct 2013 09:40:56 -0400, Greg Hendershott wrote:
>> After I gave my Frog talk at RacketCon, in which I said a goal of Frog
>> was to make it easy to install, J. Ian Johnson tried to install it...
>> but couldn't.
>> As best I understand, it's because he was using Racket from HEAD, and
>> at some point recently the `deps` expression for info.rkt changed for
>> the case where you specify a version. A case which I've been using
>> (recent versions of Frog need a >= version of Markdown).
>> For 5.3.6 and (until fairly recently in HEAD) it was:
>> # frog/info.rkt
>> #lang setup/infotab
>> (define version "0.7")
>> (define collection 'multi)
>> (define deps '(("markdown" "0.5")
>>                "rackjure"))
>> But it recently changed to require a #:version keyword, therefore it
>> would have to be IIUC this for 5.3.900.???+:
>> # frog/info.rkt
>> #lang setup/infotab
>> (define version "0.7")
>> (define collection 'multi)
>> (define deps '(("markdown" #:version "0.5")
>>                "rackjure"))
>> But that wouldn't be compatible with 5.3.6 IIUC.
>> As a result I would have to maintain two different packages, one for
>> 5.3.5 and 5.3.6, and another for 5.3.900.???+ and greater (yuck).
>> Until now, even the major change to single-collection defaults was
>> done in a way that preserved backward compatibility (well, after
>> taking action to add `(define collection 'multi)`, but after taking
>> such action the same info.rkt works for old and new).
>> 1. Am I understanding it correctly?  (Not a rhetorical question; I
>> have a lot of "IIUC"s above.)
>> 2. If so, is it really the intent to break backward compatibility?
>> 3. Instead couldn't the #version keyword simply be optional?
>> _________________________
>>   Racket Developers list:
>>   http://lists.racket-lang.org/dev

Posted on the dev mailing list.