On Fri, 22 Feb 2008 04:48:28 -0800, Nicola Musatti wrote:

> On Feb 22, 12:07 pm, Paul Rubin <http://[EMAIL PROTECTED]> wrote:
>> Nicola Musatti <[EMAIL PROTECTED]> writes:
>> > In C++ memory is just another resource which you can handle just like
>> > any other one, possibly using RAII.
>>
>> Ok, I'll bite.  Here's a straightforward Python expression:
>>
>>    a = [f(x) + g(y) for x,y in izip(m1, m2) if h(x,y).frob() == 7]
>>
>> Consider how many intermediate objects are being allocated in figuring
>> out that listcomp.  Do you REALLY want to manage all the deallocation
>> with something like RAII?
> 
> 
> What makes you think that a translation of a similar expression would
> involve explicit dynamic allocation at all? Barring bugs, here's an
> equivalent example:
> 
> #include <iostream>
> #include <map>
> #include <vector>
> 
> int f(int n) { return n * 2; }
> int g(int n) { return ( n * 2 ) + 1; }
> 
> std::map<int, int> izip(int i, int j) {
>       std::map<int, int> m;
>       m[i] = j;
>       m[j] = i;
>       return m;
> }
> 
> class A {
>       int i, j;
> public:
>       A(int ii, int jj) : i(ii), j(jj) {}
>       int frob() { return i + j; }
> };
> 
> A h(int i, int j) { return A(i, j); }
> 
> int main() {
>       int m1 = 3;
>       int m2 = 4;
>       std::vector<int> a;
>       std::map<int, int> m = izip(m1, m2);
>       for ( std::map<int,int>::iterator i = m.begin(); i != m.end(); ++i )
>       {
>               if ( h(i->first, i->second).frob() == 7 )
>                       a.push_back(f(i->first) + g(i->second));
>       }
>       for ( std::vector<int>::iterator i = a.begin(); i != a.end(); ++i )
>               std::cout << *i << '\n';
> }
> 
> As you can see the standard library takes care of all memory
> management.

Aaah, that's much nicer and easier to understand than the list
comprehension.  After this great example I'll switch to C++.  ;-)

But somehow you still manage memory by writing in a style that favors
value types.

SCNR,
        Marc 'BlackJack' Rintsch
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to