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

From: Sam Tobin-Hochstadt (samth at cs.indiana.edu)
Date: Thu Oct 3 10:37:22 EDT 2013

I'm pretty sure this is a bug in `setup/collects` (or maybe
elsewhere), and I reported it as PR 14063.

Sam

On Thu, Oct 3, 2013 at 9:57 AM, Greg Hendershott
<greghendershott at gmail.com> wrote:
> Hmm, then maybe I'm misdiagnosing the error.
>
> If you were to try doing
>
>   raco pkg install frog
>
> using 5.3.90.9 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:
>    markdown
> 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:
>    markdown
> raco setup: version: 5.90.0.9 [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
>   arguments...:
>    "info.rkt"
>    #: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
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev

Posted on the dev mailing list.