Optimization

Started by
7 comments, last by WitchLord 19 years, 7 months ago
Hey I hope I'm not asking for something that already is in the manual or so. I'm just wondering how much optimization AS does when compiling? Let's say I've got a const bool telling if the script is currently running on the server or not. If I then do a "if (isServer)", will that be evaluated at compiletime or evaluated each time the script executes? /Anders Stenberg
Advertisement
Im pretty sure it would have to be evaluated at runtime otherwise it would always return the same value when you ran the script, whether the server was running or not.
Quote:Original post by BosskIn Soviet Russia, you STFU WITH THOSE LAME JOKES!
You can search the source code for it... All I found was asCByteCode::Optimize, which strips away redunant code (i,e, SUSPEND, SUSPEND -> SUSPEND). It could be that the parser checks if the conditions for an "if" are constant and acts accordingly but I think not.

	sToken t;	GetToken(&t);	if( t.type != ttIf )	{		Error(ExpectedToken("if"), &t);		return node;	}	node->UpdateSourcePos(t.pos, t.length);	GetToken(&t);	if( t.type != ttOpenParanthesis )	{		Error(ExpectedToken("("), &t);		return node;	}	node->AddChildLast(ParseAssignment());	if( isSyntaxError ) return node;	GetToken(&t);	if( t.type != ttCloseParanthesis )	{		Error(ExpectedToken(")"), &t);		return node;	}

It appears that the parser does not check the expression for "constantness" at this point.
Kurioes:

It wouldn't be the parser that checked for constant expressions, but the compiler. But you're right that AngelScript doesn't optimize conditional statements with constant expressions. I might add this optimization in a future version.

It optimizes expressions with constant values, e.g 1+1 is substituted with 2.

It also does a post compile optimization to improve performance of some often occuring bytecode sequences.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

This would be a really good optimization. You could add a "define" keyword to the script engine that would behave like the #define c++ keyword or you could treat the const keyword like that. E.g.

const float CREATURE_SPEED = 5.5;
const float CREATURE_MOVE_STEP = 2.0;
float position = 0;

void Move(float delta)
{
position += delta * CREATURE_MOVE_STEP * CREATURE_SPEED;
}

A optimizing compiler would treat the above code like this:

position += delta * 11.0;


I've just recently stumbled upon AngelScript and I really like it. In fact, I like it so much that I'll try to help you, as much as I can, to make it the best scripting language ever :). I'm already working on a plugin for Visual Studio that will do syntax highlighting for AngelScript. When I have time, I'll take a peak at the source code. Compiler-time optimizations perform a very important role in execution speed.
Krun:

Thanks for your interest in AngelScript. It's great to know how much people like my library.

AngelScript already optimizes subexpressions with pure constants, so what you suggested is already implemented [smile].

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

Quote:Original post by grekster
Im pretty sure it would have to be evaluated at runtime otherwise it would always return the same value when you ran the script, whether the server was running or not.


Well the idea would be that "isServer" is a const, and only change inbetween runs, not runtime.


WitchLord:
It'd be nice with that kind of optimizations, but I guess other stuff is on higher prio. :)
Ah well then ignore what I said lol :)
Quote:Original post by BosskIn Soviet Russia, you STFU WITH THOSE LAME JOKES!
I'll add it to the to-do list, it shouldn't be that difficult to do.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

This topic is closed to new replies.

Advertisement