Thanks, Ian.

On Mon, 2018-11-26 at 20:46 -0800, Ian Lance Taylor wrote:
> On Mon, Nov 26, 2018 at 5:14 PM Dan Kortschak
> <dan.kortsc...@adelaide.edu.au> wrote:
> >
> >
> > Background:
> >
> > As part of the Gonum dev team, I have an interest in using Go for
> > scientific computing. This stems from long experience with unsafe
> > computing environments often used in, particularly, bioinformatics
> > (perl, python and R being standouts in the field, with packages
> > that
> > often use dubious design and implementation practices that allow
> > silent
> > failures giving plausible but incorrect results rather than
> > following
> > than following the rule of repair. In Gonum packages we (perhaps
> > non-
> > idiomatically in the context of the broader Go ecosystem) insist on
> > failing noisily when we can rather than allowing silent progression
> > to
> > an incorrect result; we use panics instead of errors a fair bit
> > because
> > they cannot be implicitly ignored.
> >
> > Question:
> >
> > One of the areas where we do this is in the mat package for matrix
> > arithmetic and linear algebra. We use panics in lieue of a compile-
> > time
> > type check for appropriate input matrix shape (e.g. the check
> > needed to
> > ensure [mxw] <- [mxn] x [nxw] is a valid operation). I don't see
> > any
> > way to encode this kind of information into a contract as it stands
> > in
> > the current contracts draft. I'm not entirely sure that any kind of
> > reasonably simple contract system *would* allow this. If we assume
> > that
> > there is some type parameterised function that operates on say
> > [n][m]T
> > to perform a matrix mult, can anyone see a way of encoding the
> > required
> > constraint?
> There is no way to express that constraint.  In general contracts are
> only intended to express things that can be described in the type
> system.  What you are asking for--a relationship between the lengths
> of different slice types--can not be described in the type system.
>
> This of it this way: the purpose of a contract is to decide when it
> is
> OK to instantiate a generic function with a given type.  When making
> that decision at compile time, we don't know the length of a slice.
> So we can't use the length of a slice when deciding whether to
> instantiate a generic function.
>
> (That said, one could imagine extending contracts to permit them to
> describe non-type arguments, and then one could use an integer
> argument to set the size of an array, and then one could write a
> contract describing the relationship between arrays.  Of course the
> caller would have to pass arrays rather than slices, which would not
> work well with sub-matrixes.)
>
> Ian
--
CRICOS provider code 00123M

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to