Java or C++?
Paul Anton Letnes
paul.anton.letnes at gmail.com
Tue Apr 15 04:07:15 EDT 2008
Brian: Impressive!
This is the most balanced, well-informed and interesting reply to this
debate. I would like to make some comments even so.
I have tried all languages, and consider myself agnostic. However, I
would like to roughly repeat what James Gosling (Java inventor) said
at a lecture I attended: Java is nice because you can work in Java
everywhere now - from embedded to desktops to supercomputers and
servers. And, I would like to make my own comment: Java is the
language I have tried which gives you the most help as a developer.
For every crash, there is a complete and useful stack trace. Using
Eclipse, you can auto-generate much of the 'boilerplate' code which is
claimed to make Java boring to write (get, set, constructors...). It
also more or less tells you how to fix small bugs - ';' and } missing
for example. Even python is less helpful; concider "Unexpected indent"
or the very informative "incorrect syntax" when you forget a ) or a : .
C (or C++) for learning to talk to the metal,
Java or Python for object orientation,
Java will give you the most help,
Python gets you started quickly,
C++ is the hardest to understand in every detail,
but C bogs you down with administrative stuff (try converting an int
to a string; I found myself googling for an hour!).
I tried this infamous "extending in C" and I would forget that until
you know both C and python a bit more... Also, extending python in C++
or Java is possible - I didn't manage C++ yet, and Java I didn't try.
Cheers!
Paul.
Den 15. april. 2008 kl. 05.46 skrev Brian Vanderburg II:
>> My idea, if you really love Python and never think about erasing it
>> from your mind, go for C (not C++). A script language plus C can
>> solve
>> every problem you need to solve. Also Python works pretty fine with
>> C.
> I agree mostly with this one. Scripting is very nice when writing an
> application especially one that needs to change very often. Plus
> there
> are several toolkits and existing libraries available for Python.
> I've
> used wxPython some with it, and it came in handy for a few
> applications
> that I would have normally written in C++/wxWidgets and have to
> recompile every few weeks to suit my needs (data extraction tools/etc)
>
> However there are cases when a compiled language is better, especially
> anything that needs to be 'fast' and have a lower overhead. I
> wouldn't
> use Python to create a very graphics intensive game or anything,
> though
> it can be used with pygame/PyOpenGL for some nice simple stuff. Also
> everything in Python is an object so it can start to consume memory
> when
> handling very large data sets. And since there is no guarantee of
> when
> garbage collection occurs, simply 'deleting' an item does not ensure
> it
> is completely gone, especially if there are cyclic references, though
> that can be handled by using 'gc.collect()'.
>
>
>
> I consider C++ just a simplification of C, in the sense that it
> makes it
> easier to do things that would take more work to be done in C. One
> can
> still use C++ without all of the more complicated aspects but still
> take
> advantages of other aspects.
>
> C has the advantage that it does not to anything behind your back.
> This
> is very useful especially for any form of system development or where
> you must know exactly what is going on. It is still possible to do
> 'object oriented' development in C, it just requires some more
> typing to
> set up whatever is needed. Even things like COM for windows can be
> done
> in C, it just requires manually building the 'vtable' so to speak.
> Also, C seems to avoid the use of temporaries where as C++ can use
> them
> in conversions and assignments automatically if needed.
>
> C++ makes some of it easier by doing certain things for you. Take a
> string object for example. In C, assignment would only do a memory
> copy
> operation:
>
> String a, b;
> b = a;
>
> The statement 'b = a' would only copy the memory and pointers from 'b'
> to 'a' which means they would both point to the same buffer. To avoid
> this, a copy constructor or assignment operator can be implemented
> when
> using C++. The same in C would be something like:
>
> String_Assign(&b, &a); /* instead of b = a */
>
> Then if a structure contains objects, more work is needed. For
> example,
> in C:
>
> typedef struct Name
> {
> String honorary;
> String first;
> String middle;
> String last;
> String lineage;
> } Name;
>
> void Name_Create(Name* name)
> {
> String_Create(&name->honorary);
> String_Create(&name->first);
> String_Create(&name->middle);
> String_Create(&name->last);
> String_Create(&name->lineage);
> }
>
> void Name_Assign(Name* self, Name* other)
> {
> String_Assign(&self->honorary, &other->honorary);
> String_Assign(&self->first, &other->first);
> String_Assign(&self->middle, &other->middle);
> String_Assign(&self->last, &other->last);
> String_Assign(&self->lineage, &other->lineage);
> }
>
> Name p1, p2;
> Name_Create(&p1);
> Name_Create(&p2);
> Name_Assign(&p2, &p1);
>
> But in C++, this is no problem:
>
> Name p1, p2;
> p2 = p1;
>
> This will automatically call the constructors of any contained objects
> to initialize the string. The implicit assignment operator
> automatically performs the assignment of any contained objects.
> Destruction is also automatic. When 'p1' goes out of scope, during
> the
> destructor the destructor for all contained objects is called.
>
> And if you want more control you can implement the default and copy
> constructors, destructor, and assignment operator, and tell them to do
> what you want. Just beware because the explicit constructors only
> calls
> default constructors of any parent classes (even the copy constructor)
> unless an initializer list is used, and an explicit assignment will
> not
> automatically do assignment of parent classes.
>
> Neither C nor C++ is really better, it depends on the what needs to be
> done. C does only what it is told, and also has easier external
> linkage
> since there is no name mangling. C++ does a lot of the needed stuff
> automatically, but explicit constructors and assignment operators can
> still be declared to control them, and frequently doing the same thing
> in C++ takes fewer lines of code than in C.
>
> As for Java, I think it is 'overly-used' in some areas, especially in
> embedded development. I attended NC State and during orientation this
> representative was talking about a small little robotic device and how
> it had a full Java VM inside it and it only took '6 minutes to boot'.
> Some claim it is for portability that Java is so good in embedded
> devices. But still, if the program is moved to another device, it may
> still need to be changed and recompiled if the new devices has
> different
> IO pins, timers, interrupts, etc. Most chips have a C
> compiler/translator available, and the same program could have been
> written in C, compiled directly to the machine code needed for the
> device, 'booted' immediately, and not needed a Java VM as well. If
> portability to other devices is desired then an abstract layer could
> be
> created in the program and the device/hardware specific code could be
> seperated to that layer seperatly from the rest of the program.
>
> Well, all of that is just my opinion though, not meant to offend
> anyone.
>
>
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
More information about the Python-list
mailing list