Re: versioning - how to request different 'ver' per 'auth'?

2015-06-11 Thread Darren Duncan
Please get the #perl6 consensus then.  I had suspected the answer would be that 
the solution would be the :ver code being able to see what :auth was selected 
and dispatch based on that.  Otherwise supporting the wider version declaration 
to have a tree structure, where :ver was embedded inside :auth etc.  Note that I 
raised this question on #perl6 myself shortly before writing perl6-language, but 
the email version is better organized. -- Darren Duncan


On 2015-06-10 11:38 PM, Tobias Leich wrote:

Hi, that is a very interesting use case, and IMO a very valid one.

Currently the semantics are, to also explain the correct syntax of the
pair that follows a 'use NAME':
:authBar and :ver1.2 etc are of type Pair. Wenn the compiler hits a
use statement, it smartmatches
the distribution's auth/name/ver against the value of the corresponding
Pair.

That means these Pairs are valid:

:authBar # match literally
:auth(/\w+/) # regex match
:auth($author) # okay if $author is known at compile time
:auth(*.chars == 6) # oaky, whatevercode
:auth({ $_.starts-with('Bla') }) # okay, closure
:auth(- $auth { $auth ~~ /Bla/ }) # okay, something callable with arity
== 1
:auth({ $^auth ~~ /Bla/ }) # okay, something callable with arity == 1
etc

That also means we cannot match different version patterns for different
:auth patterns, because we only
pass one value to the Pair's value to smartmatch against. What I can
imagine though is that if the matcher
is callable, and has an arity of 2, we pass the CompUnit as the first
and the $auth as the second argument.
That needs consensus in #perl6 though.

Cheers, Tobias

Am 11.06.2015 um 05:26 schrieb Darren Duncan:

So I have a question about versioning, either/especially about
compilation units, but also Perl 6 itself.

For context I refer to http://design.perl6.org/S11.html#Versioning .

With regard to use statements and specifying 'auth' or 'ver' to
restrict between versions, it seems to me that the spec defines them
interacting in a cross-product fashion.

For example, given this possibly incorrect syntax:

 use Dog:authcpan:TPF cpan:JRANDOM:ver(4-6, 10-15);

... that would be satisfied by any of TPF versions 4-6,10-15 or
JRANDOM versions 4-6,10-15.

However, what I want is to restrict the 'ver' differently depending on
the 'auth', treating them more as the hierarchy they are, assuming
that different authorities may go off and use different versioning
schemes.

The question I have is how to 'or' the following into a single 'use
Dog' that isn't any less restrictive:

 use Dog:authcpan:TPF:ver(v1.2.1..v1.2.3);
 use Dog:authcpan:JRANDOM:ver(v14.3..v16.2);

That is, the cross-product answer is not restrictive enough.

I don't know if this hypothetical use case has been discussed before,
but if not, I hope that the Perl 6 specification has or can gain a
clean way to say how its done.

Thank you.

-- Darren Duncan







Re: versioning - how to request different 'ver' per 'auth'?

2015-06-11 Thread Tobias Leich
Hi, that is a very interesting use case, and IMO a very valid one.

Currently the semantics are, to also explain the correct syntax of the
pair that follows a 'use NAME':
:authBar and :ver1.2 etc are of type Pair. Wenn the compiler hits a
use statement, it smartmatches
the distribution's auth/name/ver against the value of the corresponding
Pair.

That means these Pairs are valid:

:authBar # match literally
:auth(/\w+/) # regex match
:auth($author) # okay if $author is known at compile time
:auth(*.chars == 6) # oaky, whatevercode
:auth({ $_.starts-with('Bla') }) # okay, closure
:auth(- $auth { $auth ~~ /Bla/ }) # okay, something callable with arity
== 1
:auth({ $^auth ~~ /Bla/ }) # okay, something callable with arity == 1
etc

That also means we cannot match different version patterns for different
:auth patterns, because we only
pass one value to the Pair's value to smartmatch against. What I can
imagine though is that if the matcher
is callable, and has an arity of 2, we pass the CompUnit as the first
and the $auth as the second argument.
That needs consensus in #perl6 though.

Cheers, Tobias

Am 11.06.2015 um 05:26 schrieb Darren Duncan:
 So I have a question about versioning, either/especially about
 compilation units, but also Perl 6 itself.

 For context I refer to http://design.perl6.org/S11.html#Versioning .

 With regard to use statements and specifying 'auth' or 'ver' to
 restrict between versions, it seems to me that the spec defines them
 interacting in a cross-product fashion.

 For example, given this possibly incorrect syntax:

 use Dog:authcpan:TPF cpan:JRANDOM:ver(4-6, 10-15);

 ... that would be satisfied by any of TPF versions 4-6,10-15 or
 JRANDOM versions 4-6,10-15.

 However, what I want is to restrict the 'ver' differently depending on
 the 'auth', treating them more as the hierarchy they are, assuming
 that different authorities may go off and use different versioning
 schemes.

 The question I have is how to 'or' the following into a single 'use
 Dog' that isn't any less restrictive:

 use Dog:authcpan:TPF:ver(v1.2.1..v1.2.3);
 use Dog:authcpan:JRANDOM:ver(v14.3..v16.2);

 That is, the cross-product answer is not restrictive enough.

 I don't know if this hypothetical use case has been discussed before,
 but if not, I hope that the Perl 6 specification has or can gain a
 clean way to say how its done.

 Thank you.

 -- Darren Duncan



versioning - how to request different 'ver' per 'auth'?

2015-06-10 Thread Darren Duncan
So I have a question about versioning, either/especially about compilation 
units, but also Perl 6 itself.


For context I refer to http://design.perl6.org/S11.html#Versioning .

With regard to use statements and specifying 'auth' or 'ver' to restrict 
between versions, it seems to me that the spec defines them interacting in a 
cross-product fashion.


For example, given this possibly incorrect syntax:

use Dog:authcpan:TPF cpan:JRANDOM:ver(4-6, 10-15);

... that would be satisfied by any of TPF versions 4-6,10-15 or JRANDOM versions 
4-6,10-15.


However, what I want is to restrict the 'ver' differently depending on the 
'auth', treating them more as the hierarchy they are, assuming that different 
authorities may go off and use different versioning schemes.


The question I have is how to 'or' the following into a single 'use Dog' that 
isn't any less restrictive:


use Dog:authcpan:TPF:ver(v1.2.1..v1.2.3);
use Dog:authcpan:JRANDOM:ver(v14.3..v16.2);

That is, the cross-product answer is not restrictive enough.

I don't know if this hypothetical use case has been discussed before, but if 
not, I hope that the Perl 6 specification has or can gain a clean way to say how 
its done.


Thank you.

-- Darren Duncan