| Mailing List | | Home | | MUD Dev - Discussion of MUD system design, development, and implementation | | Mac Game - Mac game development | | Rivers of MUD - a Diku and Merc based multiuser dungeon | | SMAUG | | DirGames - Director, Shockwave, and Flash Game Production |
|
|
  | |  | Re: Language and platform for Text MUD server | Re: Language and platform for Text MUD server 2003-11-25 - By Alex Chacha
Back Andrew Batyuck wrote:
> I am doing non-commercial text MUD and rewritten platform from > scratch several times. Main question is - "What language and > platform can give good speed and decent extensibility" I discovered > following in my efforts:
> - Java - VERY extensible, cross-platform and VERY slow and > memory > consuming
> - C# - MOST extensible, cross-platform? =) and rather slow
> - C++ - extensible, cross-platform with usage of third-party > libs > and decent speed
> - C - best speed, but not extensible
> The only variant i see is to implement own language compiler or > interpreter that would be extensible and quick - the only choices > here are C and C++.
I'll try to answer this without unlocking the crypt of the programming language flame beasts. I am a big fan of C/C++/Java and have used C# in limited capacity (mostly limited by C#'s lack of what I needed).
The difference between C and C++ is negligible in my experience, so I will treat it as C++ to imply both, if you feel that C is faster, then you can then adjust things below as you see fit. Honestly I have not written a line of C since 1988 and I don't miss it. The best part is that you can write C or C++ code and most of today's compilers will handle it just fine. If you need easy access to collection types in STL, then C++ is your choice, if you like writing linked lists and maps then by all means do it in C. This is your call.
I was at this point few months ago when I was debating about which language to use to write a text based MUD that will eventually get some UI.
Performance -- ---- ---
C++: This is an obvious choice since it is compiled native code. For server end this may be the only choice if you plan on supporting more than 1000 simultaneous users.
Java: JIT compilers are generating very quick code that makes Java a worthy programming language for bigger projects. It's not as fast as C++ but for many tasks it may be fast enough for the task.
C#: is in the same boat as Java, just newer with less refinement (as of now).
Development Tools -- ---- ---- ----
Java: Eclipse is an incredible IDE and it's free.
C++: Microsoft Visual C++ 7.0 (aka .NET) is a great IDE for C++ and C#. You can also use any C++ compiler IDE that you like, some people love Code Warrior, some people only use EMACS with g++.
C#: MSDev .NET is the only choice.
Libraries -- ------
Java: This is the clear leader in my mind, everything you need is available from either Sun or Apache. Once you get an idea of the classes that are included you'll see that everything including the kitchen sink has been written for Java.
C++: With Standard C++ and C libraries you can write anything else you may need, however system code can be tricky to deal with and something like ACE library may be a good abstraction layer when dealing with sockets, files, synch objects etc, especially if you plan on using it on different OSes.
C#: .NET is trying the same thing as Java and I am sure in due time they will get up to speed and get similar support, but .NET is not quite there yet. C# does not have the huge support base that Java managed to build over the years, but it may get there very soon.
Portability -- ---- ---
Java: Probably easiest to make portable, but mind you it's not automatic, Runtime environments vary so it may not be a perfect cross-platform language but it's close.
C++: You can write very portable C++ code if you use the right system libraries. ACE library is great for OS abstraction. Problem I ran into was database abstraction library and couldn't find one I liked enough.
C#: None
Memory footprint -- ---- ---- ---
Depends purely on the code you write. I have heard rumors that Java uses huge amount of memory, but it all depends on the code you write, if you create and destroy objects without any rhyme or reason, sure it may use up more memory. This is a design issue more than anything else. Overall, Java and C# are a little more memory hungry than C++.
Databases (unrelated but plays into it) -- ------
MySQL: This is my favorite database, probably the most painless JDBC, ODBC and C++ libraries I have ever used. It is also free, which is hard to beat.
Oracle: Great database, but a complicated install, you need a full time person to just manage it. Then again it can handle huge amount of data quite efficiently. It's a great database if you plan on a very large MUD and have a budget for it.
MS-SQL: Good choice if you are going Windows only path.
Sybase: Same area as Oracle.
MS-Access: If you like pain in your life, this is the database for you.
Database connectivity -- ---- ---- ---- ---
Java: Trivial, get the right JDBC driver JAR and you are ready to go.
C#: Trivial, ODBC based connectivity.
C++: With native libraries this can be done, but on all the projects I have worked on this has been a sore spot. Everyone want's to write their own DB access library and they are never portable, so you may need to support separate code bases with common interface. If you have chosen your platform, then this is a non-issue. Just remember if you change your mind this may bite you.
What I did -- ---- --
C# was out of the picture, I didn't want to write server end code with it since it bound me to Windows and ODBC. So the tossup was between Java and C++, after mucking around with tools available and the fact I want the code to run on either Win2k or Linux, I picked Java as I could not find any DB library that I liked and I didn't feel like writing DB libraries. Another concern for me was the socket code, the libraries in C++ that were portable were also a bit cumbersome to use (I wanted to avoid spending too much time in OS abstraction and concentrate on the game engines).
As far as the server end of it, I prefer to use Linix for server and network code for one main reason, I can't afford a Windows network on my budget. If I needed more machines I can just build them and install Linux. If your budget allows you can use Windows or Solaris. My server side decision was driven by cost. Now that I chose Linux as my platform, I picked MySQL as the database since it is free, API is very well written, extremely easy to install and maintain and very stable.
On the client side you can use anything, since it will be a TCP/IP connection. At first you can just use a telnet client and then move it up as needed.
Further points -- ---- ------
There are few more reasons why I chose Java:
- My quest engine is very dynamic and uses XML to store quest data, Java has very easy to use XML parser code. (Xalan and Xerces)
- Eclipse just plain kicks ass as an IDE, it is so convenient that it makes MSDEV 7.0 look like chisel and stone tablet. And I was a die hard MSDEV fan until I started playing around with Eclipse, this IDE can convert you, be careful.
- JDBC is extremely easy to setup and use
- Lots of collection classes available
- XML and XSL processing is very easy with Xalan/Xerces
- ANT is a great build tool for building from command prompt
What I miss about C++:
- Multiple inheritance
- True Enum classes
- templates<>
- fear that Java may not be fast enough in the long run
As you can see it is not an easy decision, you need to write down what you want to code and what you don't. If you like writing socket, thread or database code then you should do it in C++, it you like writing game logic and don't like system code then you should do it in Java or C#.
Feel free to email me if you have question, my decision may not have been optimal, but given the constraints I was faced with, I picked what I think is the best language for my text based MUD. Your decision will depend on your constraints. __ ____ ____ ____ ____ ____ ____ ____ ____ ____ MUD-Dev mailing list MUD-Dev@(protected) https://www.kanga.nu/lists/listinfo/mud-dev
|
|
 |