GSoC 2012 Proposal: Continued Work on a D Linear Algebra library (SciD - std.linalg)

Timon Gehr timon.gehr at gmx.ch
Tue Apr 10 02:35:32 PDT 2012


On 04/10/2012 03:24 AM, Cristi Cobzarenco wrote:
> Thanks for the suggestions!
>
> I don't think UFCS would help us. Our problem is that we can't do this:
> triangular.d:
>    struct TriangularMatrix {
>
>    }
>
>    void sum( T )( T x ) if( is( T : TriangularMatrix ) ) {
>
>    }
>
> diagonal.d:
>    struct DiagonalMatrix {
>
>    }
>
>    void sum( T )( T x ) if( is( T : DiagonalMatrix ) ) {
>    }
>
> main.d:
> import diagonal;
> import triangular;
>
> void bar() {
>     TriangularMatrix a;
>     Diagonal b;
>     sum( a );  // this does not compile because sum() is ambiguous
>     sum( b );  // nor does this
> }

There are no ambiguities in that example, and if ambiguities occur, they 
can always be fixed manually.

>
> This, AFAIK, is deliberate to avoid name hijacking - ADL in C++ had its
> share of criticism. I doubt we will ever get this behaviour in D and
> that is perhaps a good thing. I may have misunderstood UFCS though - or
> what you meant by making non-member function calls look nicer - please
> correct me if that's the case.
>
> Don't worry about long names, t() is already the way transposition is
> defined SciD. Moreover, it's a property so you can actually do "a.t * a"
> - convenience galore. I'm also considering of creating a submodule like
> std.linalg.short which defines aliases with short names for types and
> free functions - this will allow particularly numerics-heavy functions
> to be written more compactly. I'm not entirely sure it would be a good
> idea though as it may sacrifice readability where it's most needed.
>
> ---
> Cristi Cobzarenco
> BSc in Artificial Intelligence and Computer Science
> University of Edinburgh
> Profile: http://www.google.com/profiles/cristi.cobzarenco
>

If you change 'Diagonal' to 'DiagonalMatrix', this compiles fine.



More information about the Digitalmars-d mailing list