Jump to content

  • Log In with Google      Sign In   
  • Create Account

- - - - -

Optimization


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
8 replies to this topic

#1 Dentoid   Members   -  Reputation: 122

Like
0Likes
Like

Posted 02 September 2004 - 02:22 AM

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

Sponsor:

#2 grekster   Members   -  Reputation: 640

Like
0Likes
Like

Posted 02 September 2004 - 02:25 AM

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.

#3 Kurioes   Members   -  Reputation: 250

Like
0Likes
Like

Posted 02 September 2004 - 02:50 AM

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.

#4 Andreas Jonsson   Moderators   -  Reputation: 3446

Like
0Likes
Like

Posted 02 September 2004 - 04:10 AM

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

#5 Krun   Members   -  Reputation: 138

Like
0Likes
Like

Posted 05 September 2004 - 04:39 AM

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.

#6 Andreas Jonsson   Moderators   -  Reputation: 3446

Like
0Likes
Like

Posted 05 September 2004 - 05:20 AM

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

#7 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

0Likes

Posted 06 September 2004 - 02:15 AM

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. :)

#8 grekster   Members   -  Reputation: 640

Like
0Likes
Like

Posted 06 September 2004 - 02:18 AM

Ah well then ignore what I said lol :)

#9 Andreas Jonsson   Moderators   -  Reputation: 3446

Like
0Likes
Like

Posted 06 September 2004 - 05:03 AM

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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS