[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Re[2]: why no "continue" statement for loops?
- From: "Dylan Cuthbert" <dylan@...>
- Date: Tue, 24 Jun 2003 10:54:50 +0900
The question is, are you making a "pure" functional language or an
easy-to-use scripting language with functional ability?
>From what I've read about lua it is the latter. There are dozens of other
pure functional languages out there for people to experiment with, however
lua hits a niche with its small lightweight structure and easy-to-plugin
functionality and easy-to-read syntax.
Also, on a completely different note; whilst I would *never ever* use gotos
in C++ or even C for that matter, there is an argument for having them in a
*multi-threaded* scripting language. (note the emphasis on multi-threaded)
With multi-threaded scripting languages, especially those for games, it is
necessary to implement state machines, or more simply put, areas of code you
can *jump* to, to get a character to go into a particular state.
I understand why lua doesn't have this right now, the "co-routines" are a
far call from multi-threading and require the user to write a whole
multi-threading kernel in order to use them. However, once this is written
you begin wanting to write code like this: (believe me, you really *do*)
(pseudo code)
Thread AlienMonster
init:
initialise_state() // initialise function for this monster
check:
nearest_player = check_for_nearest_player();
if ( nearest_player )
{
jump_to_state( attack );
}
idle:
play( "scratch_arse" ); // animation (takes time to complete)
wait( 5 )
play( "look_around_aimlessly" );
jump_to_state( check );
attack:
play( "monster_roar" );
while ( nearest_player == check_for_nearest_player() )
{
if ( turn_to_player() ) // facing player?
{
play( "chase_1_step" ); // step towards the player (takes
time for animation to complete)
}
wait( 1 ) // wait 1 frame (or nth of a second)
}
jump_to_state( check );
EndThread
Of course I can make "attack", "idle" and "check" functions and then have
some kind of table which is run through in order, but then there are no
*conditions*, and quite frankly, setting up the table is just as much a pain
in the arse as writing the above using while/dos and lots of local "state"
variables, which is definitely *not* the way to write that kind of code.
Importantly, the above is *simple to understand*.
Just some thoughts for the stewpot, (based on 15 years experience writing
and using script languages for games)
Regards
---------------------------------
Q-Games, Dylan Cuthbert.
http://www.q-games.com
----- Original Message -----
From: "Tuomo Valkonen" <tuomov@modeemi.cs.tut.fi>
Newsgroups: gmane.comp.lang.lua.general
Sent: Monday, June 23, 2003 10:27 PM
Subject: Re: Re[2]: why no "continue" statement for loops?
> On Mon, Jun 23, 2003 at 07:35:24PM +0900, Dylan Cuthbert wrote:
> > I second this break <n> continue <n> syntax.
>
> > So please, someone put it in the main lua source so I don't have to keep
> > patching it.
>
> While I don't miss continue, I'm not opposed to adding it. I am, however,
> _strongly_ opposed to complicating the language with break and continue
> levels. If you add those, you might just as well add 'goto' and we all
> know how people feel about it. (I actually use goto in C, but only to
> jump to an error handler at the end of a function. In languages like
> Lua 1) most of the time there is no need for such handlers and 2) when
> there is, there are many alternative implementations thanks to lexical
> scoping and first-class functions.)
>
> --
> Tuomo
>