ENIGMA Forums

General fluff => Announcements => Topic started by: Josh @ Dreamland on July 10, 2010, 08:58:21 am

Title: Worth Mentioning
Post by: Josh @ Dreamland on July 10, 2010, 08:58:21 am
As a by-the-way sort of deal, I've reduced ENIGMA's compile time to roughly two seconds on this old computer. Compile, link, and run took 2.75 seconds. This means I pressed "run," and in 2.75 seconds (minus my reflex time on the stopwatch), the game window was there.

On my laptop, a newish (less than two years) dual core with decent specs by today's standards, the process takes 1.4 seconds. Again not accounting for my reflexes.

So all-in-all, I'm pretty happy about that.

I've gotten a few bug reports via the tracker and have fixed most of them that were for me. More will follow, but I've been busy these last few days; today should be my last busy day. I'll be moving air conditioners around; don't ask. The most immediate thing I'll be working on is my type resolver. The only reason it's not finished is the amount of crap I've had to deal with lately.

So. Enjoy the new compile time. I believe it can later be reduced further; we'll see.

It's also worth mentioning that I could use someones to verify that all the math functions work properly (they are included directly from the C library, mostly; ambiguity is quite possible with var's many legal casts). The bessel_* functions may or may not work; I'll figure that out eventually. Logically, they shouldn't; I renamed the symbols in the header without renaming them in whatever library they are implemented in. But who knows? Also, if someone is feeling really bored, they could make sure that all the operators work on var. They are largely code-generated, so slight error can be catastrophic. For instance, division once returned zero consistently. And freezway found an ambiguity in variant += var. There's a lot of boring testing to do with those.
Title: Re: Worth Mentioning
Post by: luiscubal on July 10, 2010, 12:25:53 pm
You're talking about a clean build, right? No pre-compiled headers, no already made *.o files, etc. right?
If so, then it is indeed impressive.

However, that information is mostly worthless without mentioning the size of the game you compiled. Are we talking about a simple Hello World game? A decent sample? A full game?
Title: Re: Worth Mentioning
Post by: freezway on July 10, 2010, 12:53:48 pm
i can work on testing the Math stuff, but i need a list if things to test...
Title: Re: Worth Mentioning
Post by: Josh @ Dreamland on July 10, 2010, 03:29:34 pm
Luis: Yes, this is a simple particle drawing executable (Compile time increase is immeasurable compiling things like "Click the Clown"). Some object files were already compiled; they always will be. Most of ENIGMA's code is modular and independent of the main source file. More of it has been separated and is yet to be thanks to the new instance system and the tiered local system. This is the compile time users will be seeing. The important thing is that it's faster than GM can export and run its own executables. I intend to keep it that way.
Title: Re: Worth Mentioning
Post by: luiscubal on July 10, 2010, 05:16:51 pm
@Josh interesting. C++ compile times have always been horribly slow in my own experience. So you can modular code plus premade objects(which effectively end up being the same as a static library) is enough to reduce it to acceptable times? Or did you use other tricks?
Also, what happens if you heavily use stuff like templates? Is compile time still good?
Finally, how many cpp files do you generate per gm6 file(one per game, one per object/room/script, etc.)
Title: Re: Worth Mentioning
Post by: Josh @ Dreamland on July 10, 2010, 06:30:08 pm
Correct. I intend to eventually deploy tricks like your precompiled headers, and it may require source files for each object in large games, meaning more existing object files to use. But that's later.

Right now, there is one main source file that includes many code-generated headers. Each of these implements a different chunk of user code; one for object events, one for event code, one for scripts, one for globally defined variables, one for room codes, one for room data (In array format; will actually need some rethinking for improved compile speed and possibly loading time)... the list goes on.

When ENIGMA allows for larger games, it may become necessary to compile objects in their own sources, as I mentioned, which will call for precompiled headers as well. We'll see then what's required. When that time comes, the majority of the main source file will be made into a header (precompiled, I hope) and included from each of the object sources. I'll probably always leave room creation code in the same source.

If and when I do separate them, there'll be some organizing and double checking to prevent linker errors. Otherwise, to make it flawless, I'd have to recompile them all anyway, which would be very inefficient. There'd also be the itty bitty problem of having to recompile them all anyway each time you switch games. Fortunately, the main system code never needs recompiled (unless you check out new versions, of course, in which case the makefile will take care of it automatically because it's cool like that).