Jump to content
  • Advertisement
Sign in to follow this  
Dentoid

Optimization

This topic is 5160 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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].

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
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. :)

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!