digitalmars.D - expression templates vs D arrays
- Jay Norwood (2/2) Dec 07 2011 I've been reading about the use of expression templates in this blitz pa...
- Robert Jacques (2/4) Dec 07 2011 Built-in? No, not everything. But std.range, std.array and std.algorithm...
- Walter Bright (2/19) Dec 07 2011 I'll add that you can do expression templates in D, but there's no point...
- Timon Gehr (4/36) Dec 08 2011 Expression templates in D are syntactically more limited because it is
- so (4/7) Dec 08 2011 I also want to know why.
- Andrei Alexandrescu (7/9) Dec 08 2011 I think all operators must be overloadable. The key is to overload them
- Andrei Alexandrescu (3/5) Dec 08 2011 There is, just for other things such as dimensional analysis.
I've been reading about the use of expression templates in this blitz page, which provides arrays implemented by c++ templates. They have some convenient features, such as array initialization with auto-incrementing array index values in the expressions and applying a cast operator to an entire array within an expression. Do D built-in array operations and initialization include these type of features, or would you need to create some similar D template implementation to guarantee the efficient expression evaluation and similar initialization features? http://www.oonumerics.org/blitz/docs/blitz_3.html#SEC80
Dec 07 2011
On Wed, 07 Dec 2011 23:27:41 -0500, Jay Norwood <jayn prismnet.com> wrote:I've been reading about the use of expression templates in this blitz page, which provides arrays implemented by c++ templates. They have some convenient features, such as array initialization with auto-incrementing array index values in the expressions and applying a cast operator to an entire array within an expression. Do D built-in array operations and initialization include these type of features, or would you need to create some similar D template implementation to guarantee the efficient expression evaluation and similar initialization features? http://www.oonumerics.org/blitz/docs/blitz_3.html#SEC80Built-in? No, not everything. But std.range, std.array and std.algorithm have a lot of the convenience features you're looking for. Actual D array operations, i.e. x[] = y[] + z[] * b;, are more efficient than expression templates. Currently, what you can do in an array op is somewhat limited, but generalization, i.e. x[] = sin(iota(0,x.length)[]) + y[] is on Don's todo list.
Dec 07 2011
On 12/7/2011 11:11 PM, Robert Jacques wrote:On Wed, 07 Dec 2011 23:27:41 -0500, Jay Norwood <jayn prismnet.com> wrote:I'll add that you can do expression templates in D, but there's no point to them.I've been reading about the use of expression templates in this blitz page, which provides arrays implemented by c++ templates. They have some convenient features, such as array initialization with auto-incrementing array index values in the expressions and applying a cast operator to an entire array within an expression. Do D built-in array operations and initialization include these type of features, or would you need to create some similar D template implementation to guarantee the efficient expression evaluation and similar initialization features? http://www.oonumerics.org/blitz/docs/blitz_3.html#SEC80Built-in? No, not everything. But std.range, std.array and std.algorithm have a lot of the convenience features you're looking for. Actual D array operations, i.e. x[] = y[] + z[] * b;, are more efficient than expression templates. Currently, what you can do in an array op is somewhat limited, but generalization, i.e. x[] = sin(iota(0,x.length)[]) + y[] is on Don's todo list.
Dec 07 2011
On 12/08/2011 08:55 AM, Walter Bright wrote:On 12/7/2011 11:11 PM, Robert Jacques wrote:Expression templates in D are syntactically more limited because it is impossible to overload the 'not' and comparison operators. Why is there no point to them?On Wed, 07 Dec 2011 23:27:41 -0500, Jay Norwood <jayn prismnet.com> wrote:I'll add that you can do expression templates in D, but there's no point to them.I've been reading about the use of expression templates in this blitz page, which provides arrays implemented by c++ templates. They have some convenient features, such as array initialization with auto-incrementing array index values in the expressions and applying a cast operator to an entire array within an expression. Do D built-in array operations and initialization include these type of features, or would you need to create some similar D template implementation to guarantee the efficient expression evaluation and similar initialization features? http://www.oonumerics.org/blitz/docs/blitz_3.html#SEC80Built-in? No, not everything. But std.range, std.array and std.algorithm have a lot of the convenience features you're looking for. Actual D array operations, i.e. x[] = y[] + z[] * b;, are more efficient than expression templates. Currently, what you can do in an array op is somewhat limited, but generalization, i.e. x[] = sin(iota(0,x.length)[]) + y[] is on Don's todo list.
Dec 08 2011
On Thu, 08 Dec 2011 14:16:46 +0200, Timon Gehr <timon.gehr gmx.ch> wrote:Expression templates in D are syntactically more limited because it is impossible to overload the 'not' and comparison operators. Why is there no point to them?I also want to know why. Another thing is that ET problem has no solution in C++. Aliasing, which i think with in D it might be possible.
Dec 08 2011
On 12/8/11 6:16 AM, Timon Gehr wrote:Expression templates in D are syntactically more limited because it is impossible to overload the 'not' and comparison operators.I think all operators must be overloadable. The key is to overload them _properly_. C++ botched a few (&&, ||, comma, ++, --) and that gave a bad reputation to the whole notion. We've shown in D that e.g. ++ and -- are great to overload because it's done right. We can and we should do the same with all operators. Andrei
Dec 08 2011
On 12/8/11 1:55 AM, Walter Bright wrote:I'll add that you can do expression templates in D, but there's no point to them.There is, just for other things such as dimensional analysis. Andrei
Dec 08 2011