From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,b375f07e05d12c7a X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2001-08-13 21:46:50 PST Path: archiver1.google.com!newsfeed.google.com!postnews1.google.com!not-for-mail From: 18k11tm001@sneakemail.com (Russ) Newsgroups: comp.lang.ada Subject: Re: efficient vector/matrix operations in Ada Date: 13 Aug 2001 21:46:50 -0700 Organization: http://groups.google.com/ Message-ID: References: <3B6F40C1.FD215D1D@sneakemail.com> <3B6F5ABC.3C40E189@sneakemail.com> <9f6e2b77.0108100854.66b084b4@posting.google.com> <3B783732.A3A1EB82@mindspring.com> NNTP-Posting-Host: 24.178.46.154 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Trace: posting.google.com 997764410 26441 127.0.0.1 (14 Aug 2001 04:46:50 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: 14 Aug 2001 04:46:50 GMT Xref: archiver1.google.com comp.lang.ada:11887 Date: 2001-08-14T04:46:50+00:00 List-Id: Larry Hazel wrote in message news:<3B783732.A3A1EB82@mindspring.com>... > Russ wrote: > > > > Here's how you write "A = B + C + D;" efficiently: > > > > A = B; > > A += C; > > A += D; > > > > This requires no temporary matrices or passing by value. The original > > form (A=B+C+D) is fine for rapid prototyping, but the efficient form > > is preferable for production code. As far as I am concerned, Ada > > really needs arithmetic assignment operators. Sure, you can use > > procedures, but they're intent and effect is not as obvious to the > > reader. > > > Seems to me if a compiler can't generate the most efficient code for > > A = B + C + D > > or > > A := B + C + D > > in any language, you need a different compiler. > > Larry I'm no compiler expert, but I seriously doubt that you are correct here. Come to think of it, I'll just say that you are flat out wrong--and I'll eat crow if you are right. The difference (in C++) between A = B + C + D; and A = B; A += C; A += D; is more fundamental than a compiler can account for. Don't forget that "+" and "+=" are user-defined operators to start with. The former says to add B, C, and D, place the result in a temporary matrix, and copy that matrix by value back into A. The latter says to copy B into A, Add C directly to the result, then add D directly to that result. The latter needs no temporary matrices, whereas the former requires a temporary for each "+" operator. A special preprocessor could possibly convert the former to the latter, but I don't see how a compiler could possibly do it. This is all old hat in the C++ community. Ada is a great language, but it missed the boat here. If you don't believe it, you probably don't understand efficient vector/matrix operations. By the way, if you think the arithmetic operators should be called "+:=", "-:=", etc., I give up. Russ