Can't seem to get comfortable
Miscellaneous Forums/General Discussion/Can't seem to get comfortable
Hi all,
I've noticed quite a lot of language discussions going on recently with things like .NET, C#, C++ vs Blitz etc.
I develop in Visual Studio 2005 .NET as my day job, and for the most part I get on quite well with it.
I used to do a lot of my own projects in Blitz3D (some will remember Decorator, Tattoo among others) but have kind of ground to a halt since BlitzMax came out.
I've been asking myself why.... It's not that I don't like BlitzMax or OpenGL, I do, but somehow I just can't seem to get comfortable with where things are.
Since then, I've messed around with all sorts of languages from pure Assembly (in FASM, really slow going, but interesting in it's own way) to C/C++ 2005/2008 (Still allergic to the syntax though) and the .NET languages.
Pros and Cons
Assembly in FASM
+ Produces really fast tiny code
- Error prone for anything but really small stuff
- I would only write small libraries due to need to keep sanity and finish a project before reaching old age :)
C/C++ (now 2008)
+ Nice output, fast, flexible, powerful, lots of code out there.
+ Can integrate Instrinsics / ASM code directly, do plain structs and memory align them.
- I am visually allergic to C/C++ code
- not that user friendly, libraries/headers are fiddly, too many files everywhere
- IDE is not as helpful as the .NET one
.NET Languages
+ Easy & powerful GUI, Database (well almost everything really)
+ A Ninja of an IDE, although a touch overwhelming at times.
- slow startup, eats memory in huge bucketloads, too 'Managed' an environment for my liking.
- Slow interop with unmanaged code
- Objects everywhere.
Blitz3D
+ Was just right in its' day, good mix of 2D / 3D language features, IDE was basic but did the job and debug worked (albeit slowly at times)
+ Audio / Graphics were easy to handle and for the most part everything just worked!
+ Easy integration to Libraries via the 'Userlibs' thing.
+ Documentation wasn't bad.
- I really wanted a decent (.NET-alike) GUI
- I really wanted more OOP language constructs and even more speed!
- I really wanted a new cool IDE with intellisense
- Toward the end I eventually needed a more up-to-date 3D Engine with access to more low level stuff & shaders etc.
BlitzMax
+ Updated my favourite language with OOP, more speed, more flexibility and cross platform development YAY! Just what I wanted!
+ 2D could now use Alpha and 3D acceleration 'Wooooooooo!' Cooking now!
+ GUI module. A little rough around the edges, but on the map.
- Arghghhg where has my 3D engine gone! I wanted more 3D, not less!
- Documentation was/is somewhat lacking.
- The IDE is even more iffy and no intellisense! Why can't an integrated pre-processor only include the modules I actually use?
- debug is flakey
- Audio can tricky
+ & - : Not so sure about this GC stuff, general coding is improved, but seem to make interfacing with external code more tricky (struct stuff).
The new OOP language constructs, more efficient code and GUI module of BlitzMax make me unwilling to develop new stuff in Blitz3D.
The lack of 3D, lack of GUI Designer, wooly documentation and rough round the edges modules make developing new stuff less appealing.
Somehow it just doesn't feel like the old days again yet. :|
I can't see the point any more.
I'm trying to crack on with learning web/database stuff. You know... something useful. Something different.
You're spot on with all the issues you mention. Let's face it, doing everything in assembly is just not productive, and C, C++ aren't very friendly.
You're also bang on with the BMAX issues. It really depends on what externals you want to interface with. If you are still considering the BM route, take a look at Leadwerks engine for use with Max. It's a good engine with a very similar feel to B3D and is geared up for interfacing to Blitz. Whether it fits the bill for you... well only you can decide. For a GUI, check out Brucey's WxMax.
@Terabit,
I know exactly what you mean. I have been a happy user of Blitz3D for years but never really liked Max for the reasons you state.
I've decided to jump ship and move to XNA as if I'm going to learn something new it might as well be that as opposed to Max. It's free and powerful and hell I could even write games for the Xbox 360. I have C# programming experience so that can only help.
- I am visually allergic to C/C++ code
Welcome to the club! :-)
Assembler: Unless you're in robotocs or want to design and program new hardware, I wonder why anyone would want to go that low level these days?
At the same time, you are talking about C#.NET -- which is exactly the opposite direction. Obviously, ultimate performance and being close to the iron cannot be that important to you. So I think except for academic purposes or pure interest, you can safely drop assembler. (Many people see C as the 'new' assembler anyway.)
.NET and XNA have the disadvantage that you are marrying the Microsoft world by using them. If that's ok with you, then go there. It's not an option for me, but if you are comfortable with that home that Microsoft sells you, then I think C# is by far the best option and the safest bet for you. And I think "objects everywhere" is a real plus. I like it.
The XNA trick actually is a nice one from Microsoft; you can only use it for your Xbox if you subscribe to the non-free creator's club on Xbox Live, and as far as I know you can still not commercially distribute any stuff you wrote for the Xbox. That reduces XNA for the Xbox 360 to an academic hobby you've got to pay a monthly for.
If you look at the world from a different angle than from MS platforms only, don't use C#. C# and Java are very similar to each other; but if you are not on the Microsoft ship, Java is the better choice.
But BlitzMax will give you more speed than either Java or C# and it even gives you native GUIs on each supported platform (although only with a rather limited set of widgets and components). I like the Cocoa-look of Blitzmax apps on my Mac. That's the way it's supposed to be. And on Vista, the same code will generate an app with a real Windows GUI - not just one that only has the feel as Java apps do.
Anyway. I guess it really comes down to what you actually want to do - and on what system.
Anyway. I guess it really comes down to what you actually want to do - and on what system.
Indeed. Of course developing XNA for Windows requires no Xbox or subscription. And not to put Java down in ANY way but what decent games are written with it. Seriously! I'd like to know...
I reckon with the might of MS, XNA seems a good way to go, at least for me.
I mean check this out!
http://www.xnaracinggame.com/Could you do that in Max or Java? Comes with full source...
There's plenty of pie out there for all these langauges of course. So I'll probably play with Java too.
Well, Boiled Sweets, what decent games have been written in C# and XNA? I don't know one. So far, XNA is just another hype with no actual results or products.
But at least I know (and own a licence of) a nice and good looking game that has been written in Java: Tribal Trouble. I must admit that I still have a hard time to believe that they used Java for it, because it runs so well. But they did. The team is even an official sponsor and contributor to lwjgl (which is pretty cool, by the way).
Besides, we were also talking about regular GUI stuff and that implies regular apps. And there are still a few people around here who do not use BlitzMax and other languages for gaming (only).
UPDATE:
Yes, you could write that in java. See above, people have done it. Besides, there are also wrappers for many 3D engines available for Java and even Python. Python is even slower than Java, but Civilization IV's entire game logic is written in it and I saw a 3D RPG that was also written in Python, based upon the OGRE engine, if I remember it right.
I would not write a 3D engine in either Python, Java or C#. That's still a domain for C or C++. But once you have that grunt work done, it just doesn't matter anymore what language you use to implement your other stuff in. That's why VHLLs like Python or Ruby are so popular nowadays.
Assembler: Unless you're in robotocs or want to design and program new hardware, I wonder why anyone would want to go that low level these days?
Assember is useful for some BlitzMax stuff, where you want to do things a certain way at top speed. I posted some vector * matrix multiplication and normalisation tests a while back and my asm optimised DLL one was 23 times faster than the same code in BlitzMax. (Not completely fair, since it was SSE based, but shows what you can do in a few bytes. In fact it would have been even faster, but I couldn't work out how to allocate memory aligned to 16 byte boundaries in blitz, so went for the slower SSE instructions). So for some SMALL things it has uses. If BlitzMax had instrinsics or inline ASM then it would be a moot point, but there are some things I've used it for.
The bigest library I wrote in ASM for Blitz is a whole Ray/Triangle intersection routine. But the continual overhead of calling the DLL shows more than I would like.
I feel like I've tried it all, and for all the .NET goodness out there (I tried managed DirectX and a bit of XNA), I still never felt 'at home' doing 3D in .NET
it feels very 'Bolted on' and 'Made to work' as opposed to 'Seemless'. Managed IL just doesn't feel like a 'Good Fit' for a 3D engine.
I'm not sure that this "grass is greener" mentality will actually get anything completed and made (gamewise). Certainly though if you want a mainstream job, leaning C++/C# or php/SQL is probably pretty sensible.
I've owned bmax for 2 years, and have yet to code anything in it. Just can't seem to wrap my head around it... the odd thing is, I've been learning java and c# and they are very similar to bmax, but I enjoy learning them. Not sure why, many others on here seem to love bmax.
Good point Grey, looking at the top casual games available now, you can still write most of them in standard Blitz3D. The stories a little different for games like call of duty and big MMO games, but it is true that people do seem to procrastinate about finsihing games by playing with other languages thinking that will help them write a "better" game.
Yep, just like the "Mark Sibberly is hoelding me back by not giving me the DirextX9z!" brigade...
TeraBit - couldn't you just alloc some memory and then add an offset to the base pointer to get to the next 16-byte aligned boundary, and use that as your base?
In general I agree no languages are perfect and they never will be. Asm was great for speed back in the days of slower CPU's but now that everyone has faster CPU's they just want to get lazy and allow sloppiness to be overcome by brute force. It seems to me computers these days don't appear to run as fast as they really should be given their spec, and I say it's down to the programming.
CPU performance is probably several times better than we realize, if everything were written in assembler we'd experience our computers as much more efficient than they are. But the faster the CPU gets the less urge there is to make sure things are fast. I still try to optimize where possible but I haven't gone the assembler route yet with BlitzMax - mainly because that has to be written for the hardware and isn't so easily cross-platform. But I still see there being some common assembler instructions across platforms and BlitzMax could allow the inlining of that small set of instructions and would then be cross-platform. All CPU's have instructions to move data, do math, logic operations, shifts etc. At least then we would have access to high-speed low-level code as well as high-level stuff at the same time - kinda like the original BlitzBasic.
I never could get into C or any such dirivatives because the code syntax just did not seem intuitive or friendly like BASIC. Okay so I'm not an advanced programmer but I just don't see those languages as really being user-friendly for the most part. Asm isn't viable for bigger applications and it took me several months to just write one graphics library in 68k, I can't image how many years it'd take to do a whole game, and as you rightly said while it can be very fast it can also be very longwinded and more opportunities for bugs.
It looks like we're all heading for higher-level design which is where Mark is taking BRL it seems. The only way we can keep on top of so many advanced technologies and subsystems now is to make the programmer's interface higher-level, hopefully not at the expense of flexibility, which is difficult to do well. We're all heading towards greater abstraction and easier tools and I think we're going to see the mainstream-izing of software creation - `casual software`.
I think BlitzMax has good things going for it but like you say in the graphics department it needs more, both for 2D and 3D. It has OpenGL which is great and the hardware acceleration is a very good thing, but it doesn't have a higher level 3D engine and Max2D is bare minimal in my opinion. So much is left up to the programmer, which may be a good *option* but there should also be higher level tools. I think Mark is going in the right direction but I hope he doesn't make his new platform too generic. BlitzMax is a good foundation for it but it is incomplete unless you can program all your own engine.
if blitzmax had a 3d module at release i dont think any of us would be tallking about other options.
This is just my view but:
I think mark has missed out on what could have been a much better product. He wants to take it somewhere else now, but while hes working on that more and more of us are looking else where. Ive just got max and havent even touched it. I am getting a mac soon so I will install it on that and see what i can do with it.
i really wanted to carry on making 3d games like my current car game. it looks like klepto2's new version of minib3d will do the job, Ive just got to get something to replace jv-ode as it only works in windows. oh and write a particle system like particle candy.
I think Max should have had 3D upon release, too. As it is, it's more of a language than a game development system, although you certainly can make games with it. Coding can be boring and very time consuming, though. It should have much more capabilities in 2D like more blend modes, layers, particle engine, more drawing functions, buffers (if supported by extensions), draw-to-texture, rotation in X and Y, vertex control, textured poly's, gradients, an animation system, etc, before we even talk about 3D stuff. It could have been so much better. As it is we don't even have in-built non-filled rects/ovals. I'm writing all this stuff myself, because I have to.
I hope BRL's new engine/tools will basically be BlitzMax-based (for existing customers) with the tools as an extra layer on top, rather than ditching blitzmax entirely.
Lisp is the ultimate language, and if it was combined with JIT compilation, it would be unstoppable. Well, except for one thing - some absurd and irrational fear of the language ( the parenthesis disappear after a few weeks or months of looking at the code), which in turn leads to a lack of libraries.
But seriously - a language that allows you to write completely new constructs at the syntactical level (i.e. if AND or && didn't exist, you could create them yourself. Try that in any other language), while the syntax of hte language itself is extremely regular.. it truly has the ability to be not only the most powerful and flexible, but also the most readable code out there.
It's a shame people are afraid of it. (Just as an example of another cool thing you can do in Lisp that is exponentially harder in any other language is to write your own scripting language on top of Lisp that is translated to actual Lisp code during compilation - which means you've got the readability and flexibility of a script language, with no interface or glue code to tie it to your own code, and yet you get the full speed of Lisp itself. No memory overhead.. no efficiency loss.)
Just one question: where is the 'phantomatic new IDE' Mark was/is writing? He mentioned it in his worklog time ago, but I've lost any information about it.
What Marks problem with updating Blitzmax anyway?
He's probably got to make a living somehow and my guess is that there are other things he and his company are also working on. Stuff we don't see on this site. My impression is that the Blitz-languages are just by-products of something else these folks are normally busy with.
I could be wrong, but it does not really matter anyway, does it?
@TeraBit - I use the Protean IDE for my Blitz3D apps, on the odd occasion I dip into it. I'vd done some .net stuff(college) and protean is quite close.
Had the joy of ASM at college recently also, creating a full blown game with ASM would be akin to building a car out of matchsticks, and less fun. Dun C (managed spaceinvaders in a terminal window), less cpp.
.NET/VBasic, mainly used these for front ends for other apps, both BMax and B3D.
AS far as fun to code goes, my list is, best first:
1.BMax (+ Grey's framework - which removes some headaches)
2.B3d
3..Net/VBasic
4. c / cpp
5. ASM
If you are going self employed, one man band esque the list is probably still in the right order.
On the other hand, working as an employee you could probably pop No.3 and 4 to the top.
Back to getting comfy, Blitz3D always provides maximum comfort.
I think Max should have had 3D upon release, too.
I also agree. The only thing that really made Blitz3D as successful as it was wasn't the language itself, but the 3D engine. Canceling Max3D seems to me like suicide for BRL because now BlitzMax is directly competing with C#/Java/etc., and there's no way BlitzMax is going to win.
I said along the lines of what John above said nearly two years ago, and was set on fire!
I've been on a few by-routes along the way, C# (MDX/XNA), C++ with DirectX 9 (Quick splattering of DX10) and to be honest, no language is perfect, if there was a perfect language we'd all be using it.
I always seem to float back to Blitz, dont know why, but I do... Project Studio made it 1000 times better, mssmiths IDE is a gem and to be honest, BlitzMax should of shipped with a IDE like that in the first place!
As a base language, BlitzMax is one of the most solid I know in the world of BASIC, but its wrapped up in a god-awful way, and doesnt really get any better in that department apart from updates from its user base.
But then, hasnt that always been the case?
TeraBit - couldn't you just alloc some memory and then add an offset to the base pointer to get to the next 16-byte aligned boundary, and use that as your base?
Did try that, but didn't seem to work. I think the memory pointer we have is simply an offset inside a memory window provided by th O/S, so simply rounding the number to multiples of 16 probably won't align to actual physical memory (might be wrong).
To be clear, I wasn't knocking BlitzMax as such, just doing some soul searching. I haven't done much in all these other popular languages either.
I think my problem is, I was spoilt by Blitz3D and got used to instant gratification in terms of getting stuff up and running. I've found BlitzMax takes more planning and can take longer to get things going, but the potential is much greater overall.
I don't think BlitzMax has reached its' full potential yet. The foundation is there, still waiting in the wings.
I think Max should have had 3D upon release, too.
That sounds like a lovely idea, but in reality it wouldn't mean having Max3D 2 or whatever years ago, it would mean still not having the Max compiler available.
Whilst I would have liked to see a simple 3D module rather than a game-maker solution, because it sets release back a few years, I think people are imagining some god-awful point and click game-creator. Read between the lines just a little bit and it's obvious that it's going to be something more along the lines of Leadwerks engine/World builder which leverages the power of the blitz language and automates some of the grind work (should you wish to use it that way) whilst letting you extend things to your hearts' content.