Which language to use...

"This program requires another 20Mb download, a whole shedload of diskspace to install and will eat up 128Mb of RAM" is NOT acceptable for this project.

Say no to any kind of runtime engines - unless you like living in a nightmare of failed installations, big downloads, bloat, ugly programs, hacks to get at low level system functions, etc. Java and C# shouldn't even be on the list of candidate languages.

Small, lean, efficient. That should be goal #1. People who say otherwise are just daydreaming hippies who never wrote a real program or one which had to be installed on millions of machines.

Similarly, Python et. al. - nice theory but it's not going to work out in practice. Python works well when you're hacking around on your own machine and, yes, you can knock up a mickey-mouse program in no time at all. In the long term though it's a false economy and you'll run into the exact same hacks and distribution problems as Java, C#, etc.

By "hack" I mean that when you step outside what the nice runtime library can do then you end up in a nether world of a half baked kludge to map your fancy language onto the low level operating system functions/useful library you found on the web. As soon as this starts happening then you might as well be using C++. I suspect that this project will have an awful lot of this sort of code.

No, what you need for idiot-proof distribution/installation is a single ".exe" file, and a couple of dlls for essential things like cryptography.

You could choose C but why go back to the stone age? C++ has a zillion advantages over C in terms of reliability, scalability and resource management. In a team project C++ has even more advantages because of namespaces, etc.

I submit that for a tray-app which needs to run 24 hours a day, use as few resources as possible, be portable, use lots of low level networking functions, etc. then C++ is the right choice.

Now, problems:

The biggest danger is that the C hacks get into the source code and mess it all up. You're going to need to rule the souce code with an iron fist to avoid this. Anybody who doesn't rely on stack unwinding, reference-counted pointers, etc. for resource management should be prevented from contributing. If you don't understand that last comment then you're the type of programmer I'm referring to, please refrain.

Anybody who types "new thing[]" instead of "std::vector" should be kicked off the team until they've read and *UNDERSTOOD* a few C++ books (and the C++ FAQ!). There whould be *NO* exceptions to this rule - it's a great big red flag that the person simply doesn't grok c++.

Once you've got a few competent C++ programmers working on the core then you can let the hackers work on the user interfaces, etc. Define some nice glue logic between the core and the outside world and let them fight it out to see who can make the nicest/most reliable user interface.

My $0.02...

Comments

end user speed or network speed?

Considering that this program will be ethical, speed doesn't matter. Also .NET apps seem faster than java programs, has anyone else noticed?
Is .NET C# code actually native when it's finally run?

Maybe if we make the network simple enough for anyone to implement there will be multiple implementations of clients in many different languages.

Speed...again!

"Considering that this program will be ethical, speed doesn't matter. Also .NET apps seem faster than java programs, has anyone else noticed? Is .NET C# code actually native when it's finally run?"

Exactly.

But speed isn't the only reason to choose C++. Java and .Net should be discarded for other reasons than "speed", like difficulty of distribution, lack of low-level functionality, high resource usage, etc.

C++ is *more* portable than Java/C# if you take portability into account from the very beginning - look at how many machines Linux runs on, it's a massive program and it's way more "run anywhere" than Java is.

So, can we stop discussiing "speed" and start discussing network security, secure code distribution and low resource usage instead?

Look at µTorrent

All I have to say is that Java doesn't even come close to C++. Just compare µTorrent (written in C++) to any java client. There is no comparison. µTorrent wins in every way.

It's your post that made me

It's your post that made me ask slashdot. I wanted to know what others think of your view vs my view -- which is pro .NET/JAVA. The result was 1,000 comments of mostly grammer nazis. Though there are some interesting stuff there. Have a look.

It's not about speed

I saw that slashdot thread. You have to realize that slashdot will mostly see that sort of post as a troll so you'll get silly replies. Language flamewars are soooo 1990s.

Still, your post kinda proves my point. Java and C# people are totally fixated on "speed". This makes the rest of us a bit suspicious: If Java/C# really was fast then we wouldn't need to be constantly reminded of it, it would a non-issue.

My personal experience with Java is that it's fine for writing toy benchmarks, but it doesn't scale. Try creating a million objects before you enter your main loop, see what happens. With C++ it won't make any difference whatsoever to the final result, that's scalability.

But I digress. For this project I don't dismiss Java and C# on performance grounds, I dismiss them because distribution and installation will suck, because they will use too much RAM, that they'll add another couple of seconds to my boot time, and that it will be much more difficult to secure the system against attack by spammers.

My answer to your /. thread would be:

* When you really really understand what's going on, C++ is easier to write than Java. Java source is waaaay too verbose (full of unnecessary typecasts, far too many "try {}" blocks, etc.)

* C++ is more productive (see above).

* That C++ memory management is better than garbage collection. Objects really *need* a well-defined lifetime. "It'll vanish at some random time in the future" simply isn't good enough.

* C++ has an answer to every important aspect of programming. You never seems to run into the show-stopping problems you get with Java.

* Java claims to have the One True Class Library. I respectfully disagree with this design mentality - one size doesn't fit all.

* Finally, that C++ is perfectly portable. Look at Linux - that's a *huge* piece of C/C++ and it runs in far more places than Java ever will.

So, C++ is better than Java ... AND it's faster!

I am Interested in learning C++, So I will watch intently...

I sometimes get lost in all the jargon of programmers lingo, so I decided to follow this project and see how it developes. I have found a great resource that claims to be able to teach C++ in 21 days , my guess is that it's much more involved but probablty not as much as C#. But after reading about C++, I would agree it to be a far better process, and much more productive as C#. I highly recommend going to the link below and following this project , for those interested in learning C++, I say this only because I have seen the Job Ads that pay an enormous amount of salary, even at the entry level. This project here is an important one and if successful, there is no telling how far it will go. I do hope to gain some good insight here. I have decide to help with beta testing as i do have experience with that. And I have always been told that there are no stupid questions, (yeah right) so I may throw one every now and then, by all means tell if it is stupid. things seem to be moving along well, and i am just anticipating the next step in the project.

By the way, the comment box that i am typing this message with is really buggy, the typing is 4 characters the the right as well as thecursor placement. thought you should know.

here is the link for those interested in C++ programming, it is more of a review/overview w/quizes
good luck :
http://lib.daemon.am/Books/C++/

Roadrunn3rr

"Some see the glass as half~full, and some see the glass as half~empty, But I say, 'The glass is too GOD D#@N BIG~~~~~~~~~~~~~!!!!!"

deleted

...