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 -- http://mail.python.org/mailman/listinfo/python-list