Re: Custom binary operators

2013-12-29 Thread Marco Leise
Am Sat, 28 Dec 2013 15:24:31 +
schrieb Dicebot pub...@dicebot.lv:

 AFAIK it is intentionally banned to constrain operator 
 overloading abuse.

That and it makes the compiler faster.

-- 
Marco



Re: Custom binary operators

2013-12-29 Thread H. S. Teoh
On Mon, Dec 30, 2013 at 05:34:10AM +0100, Marco Leise wrote:
 Am Sat, 28 Dec 2013 15:24:31 +
 schrieb Dicebot pub...@dicebot.lv:
 
  AFAIK it is intentionally banned to constrain operator 
  overloading abuse.
 
 That and it makes the compiler faster.
[...]

And discourages writing unreadable code like that C++ regex template
library that turns expressions into something that's neither (numerical)
expressions nor regular expressions. Operator overloading abuse at its
finest.


T

-- 
Real programmers can write assembly code in any language. :-) -- Larry Wall


Re: Custom binary operators

2013-12-28 Thread Dicebot
AFAIK it is intentionally banned to constrain operator 
overloading abuse.


Re: Custom binary operators

2013-12-28 Thread Joseph Rushton Wakeling

On 28/12/13 16:24, Dicebot wrote:

AFAIK it is intentionally banned to constrain operator overloading abuse.


Ahh, makes sense.  But isn't it possible to do something with templates that 
would allow for something like,


auto a = matrix(...);
auto b = matrix(...);

auto c = ElementWise!(a * b);

... where the ElementWise template would ensure that the binary operation is 
applied successively to corresponding pairs of elements from the matrices?


Re: Custom binary operators

2013-12-28 Thread John Colvin
On Saturday, 28 December 2013 at 16:33:24 UTC, Joseph Rushton 
Wakeling wrote:

On 28/12/13 16:24, Dicebot wrote:
AFAIK it is intentionally banned to constrain operator 
overloading abuse.


Ahh, makes sense.  But isn't it possible to do something with 
templates that would allow for something like,


auto a = matrix(...);
auto b = matrix(...);

auto c = ElementWise!(a * b);

... where the ElementWise template would ensure that the binary 
operation is applied successively to corresponding pairs of 
elements from the matrices?


how about:

a.elementWise * b

where a.elementWise returns a wrapper struct around a that 
implements elementwise arithmetic as opposed to the normal 
arithmetic.


The operators would return instances of Matrix, not elementWise, 
to avoid accidentally spilling a Matrix.ElementWise struct in to 
ensuing code unintentionally. With a shorter alias it's rather 
neat.


auto e = ((a .EW* b) .EW/ c ) * d;


Re: Custom binary operators

2013-12-28 Thread Joseph Rushton Wakeling

On 28/12/13 18:50, John Colvin wrote:

how about:

a.elementWise * b

where a.elementWise returns a wrapper struct around a that implements
elementwise arithmetic as opposed to the normal arithmetic.

The operators would return instances of Matrix, not elementWise, to avoid
accidentally spilling a Matrix.ElementWise struct in to ensuing code
unintentionally. With a shorter alias it's rather neat.

auto e = ((a .EW* b) .EW/ c ) * d;


That's a rather cool idea -- thanks for that! :-)

That said, I think it'd be difficult to really justify it as a pattern for 
general use.  If you're doing mathematical work à la MATLAB, you want a proper 
operator, not a trick which lets you sort of write something that looks a little 
like one.  I'm a little disappointed there's no ready way to do this :-(


Re: Custom binary operators

2013-12-28 Thread H. S. Teoh
On Sat, Dec 28, 2013 at 07:35:00PM +0100, Joseph Rushton Wakeling wrote:
 On 28/12/13 18:50, John Colvin wrote:
 how about:
 
 a.elementWise * b
 
 where a.elementWise returns a wrapper struct around a that implements
 elementwise arithmetic as opposed to the normal arithmetic.
 
 The operators would return instances of Matrix, not elementWise, to
 avoid accidentally spilling a Matrix.ElementWise struct in to ensuing
 code unintentionally. With a shorter alias it's rather neat.
 
 auto e = ((a .EW* b) .EW/ c ) * d;
 
 That's a rather cool idea -- thanks for that! :-)
 
 That said, I think it'd be difficult to really justify it as a
 pattern for general use.  If you're doing mathematical work à la
 MATLAB, you want a proper operator, not a trick which lets you sort
 of write something that looks a little like one.  I'm a little
 disappointed there's no ready way to do this :-(

The other way is to use a compile-time DSL, which lets you implement
whatever operators you want in whatever syntax you fancy.


T

-- 
Today's society is one of specialization: as you grow, you learn more and more 
about less and less. Eventually, you know everything about nothing.


Re: Custom binary operators

2013-12-28 Thread John Colvin

On Saturday, 28 December 2013 at 20:06:46 UTC, H. S. Teoh wrote:
On Sat, Dec 28, 2013 at 07:35:00PM +0100, Joseph Rushton 
Wakeling wrote:

On 28/12/13 18:50, John Colvin wrote:
how about:

a.elementWise * b

where a.elementWise returns a wrapper struct around a that 
implements

elementwise arithmetic as opposed to the normal arithmetic.

The operators would return instances of Matrix, not 
elementWise, to
avoid accidentally spilling a Matrix.ElementWise struct in to 
ensuing

code unintentionally. With a shorter alias it's rather neat.

auto e = ((a .EW* b) .EW/ c ) * d;

That's a rather cool idea -- thanks for that! :-)

That said, I think it'd be difficult to really justify it as a
pattern for general use.  If you're doing mathematical work à 
la
MATLAB, you want a proper operator, not a trick which lets you 
sort

of write something that looks a little like one.  I'm a little
disappointed there's no ready way to do this :-(


The other way is to use a compile-time DSL, which lets you 
implement

whatever operators you want in whatever syntax you fancy.


T


Yeah. To risk being glib, if you want a domain specific language, 
use a domain specific language.


Then again, including some convenient abstraction for some common 
tasks while remaining within the main language is nice.