Wrecked Games

Please login or register.

Login with username, password and session length
Advanced search  

News:

We're just that awesome.

Pages: [1] 2

Author Topic: Component Proposal  (Read 7375 times)

mysterycoder

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 447
    • View Profile
Component Proposal
« on: September 08, 2008, 05:04:46 PM »

Rendering:
    Ogre3D

GUI:
    Both QuickGUI and RBGui seem very good. The original choice for gui, OpenGUI, seems not to be in active development anymore. Also, perhaps I should take a look at MyGui and Canvas.

Sound:
    OpenAl via existing mechanism. OpenAl-Soft seems to be the prevailing implementation.
    FMOD support? 3 or Ex series? Or should the sound system abstraction be dropped?

Input:
    OIS (Of course  ;))

Logging:
    Pantheios or Ogre3D logging?
    Pantheios looks very flexible, but is the extra dependency justified?

Threading:
    boost::thread or ptypes?
    boost::thread is used as the threading back end in Ogre3D.
    I'm not sure if ptypes is being actively developed, also, includes more than just threading.

Networking:
    Raknet, OpenTNL, giallo.
    I'm really not familiar with networking.
    Should this be part of the engine or is it too application-specific?

Physics:
    Bullet and PhysX seem to be the two best libraries. I'm leaning towards Bullet though because it is open-source.

Now for the difficult one,
Scripting:
    Python, Lua, GameMonkey, or AngelScript.

    Python:
        pros:  Featureful, large community, easy to bind(boost::python)
        cons: Heavy Weight, hard to sandbox

    Lua (need more info):
        pros:  Used in several commerical games
        cons: Not object-oriented

    GameMonkey (need more info):
        pros:  Fast?
        cons: Hard to bind (binding library?)

    AngelScript:
        pros:  Easy to bind, fast, object-oriented (support inheritance? )
        cons: Smaller community, not proven?

These are just some libraries I've been looking at. If anyone has experiences with any of these or has suggestions for addition libraries, feel free to post. Comments are very appreciated.
I'll update this post as I get new or more detailed information.

Thanks,
mysterycoder
Logged

pjcast

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 2653
    • View Profile
    • http://www.wreckedgames.com
Re: Component Proposal
« Reply #1 on: September 08, 2008, 06:31:59 PM »

Rendering: Ogre is of course fine ;)

GUI: There is also Navi which is flash based (might be Window's only) which might be cool. But, something like Quick GUI would be nice in that it is relatively small/light/simple.

Sound: I don't know anything about OpenAL soft. If it is widely used over regular OpenAL than sounds good - website seems a bit lacking. As opposed to only using one or the other, it is possible - in which case I'd stick with the free openAL. But, by supporting fmod, there is a chance of an easy port to console systems. However, if OpenAL soft is opensource, would probably also be easy to port that to other platforms. Though, in the last year I've had some good use of Portable Audio library (I'm not sure if it does 3d sounds or multichannels ie 5.1+)... hough, it offers the ability to record/capture audio. Some apps might find that useful.

I think basic OpenAL / Fmod 3 Support is fine (though using Ex could be fine too). I think Fmod, though, is a little too expensive for commercial usage. It is also worth arguing that we should only support OpenAL (soft?) or portaudio.

Input: hmm, yeah I aggre :)

Logging: I don't see any reason to go above Ogre log offerings.

Threading: We can go with Boost::Threads, but I hate the fact that Boost::Threads offers no way to abort a thead once running. Also, using boost can complicate things, but I like boost::threads besides that.

Networking: I don't think we should add networking at this point. Just keep things in mind that when networking is in use, objects would need to be interpolated between online sync's, dead reckoning, etc. But, it can get pretty app specific.

Physics: I think Bullet.

Scripting: Tough choices, I'd say python as I like it recently. And liked boost::python ok for binding. Though, the fact that python is not inherently thread safe (without locking the interpreter), makes me think something else might be worth looking into. I'd say maybe a good/fast/lightweight javascript engine or maybe AngleScript.


Logged

mysterycoder

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 447
    • View Profile
Re: Component Proposal
« Reply #2 on: September 08, 2008, 09:47:24 PM »

GUI: Actually Navi is Html-based using the Gecko rendering engine. It seems like the creator of Navi is also experimenting with doing the same thing with Chrome: http://ajeanius.wordpress.com/2008/09/08/awesomium-google-chrome-hacked/.

Sound: I read that they were considering making OpenAl-Soft the new reference implementation for OpenAl.

Scripting: I'm not against using javascript. There is SpiderMonkey which is Mozilla's C library for javascript. There is also the possibility of using the WebKit port (chromium) google did.

I did forget one category,
Unit Testing:
    UnitTest++ or boost::test
    UnitTest++ is definately more lightweight and its author has created/worked with many other testing libraries.
    We might already be pulling in boost for threading, might not be bad to use its testing library too.
Logged

OvermindDL1

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 288
    • View Profile
    • http://www.overminddl1.com/forum/
Re: Component Proposal
« Reply #3 on: September 09, 2008, 12:38:38 AM »

Chrome uses webkit as the renderer, nothing special there so I do not see why he would use "chrome" as an html renderer when it is just webkit, should just use that directly, would be quite a bit easier.

V8 is also *very* easy to bind (Google's javascript engine) and performs pretty well with nice separate execution contexts, however it uses a GIL like Python.  I know SpiderMonkey is quite fast, possibly even faster then V8 (at least in math stuff, no other javascript engine is faster then V8 with indirection, OO constructs in other words, but it is like most others with math speeds and such).

Yes, I was looking into V8 pretty heavily, got the code compiled and all, but it still is not enough to do what I need for a scripting language (stackless python is still the closest thing, but I need something closer to C in speed, hence why I am still making my own scripting engine).
Logged

mysterycoder

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 447
    • View Profile
Re: Component Proposal
« Reply #4 on: September 09, 2008, 08:14:58 PM »

@OvermindDL1: What do you mean by "separate execution contexts" ?, also I'm curious to know exactly what you are looking for in a scripting engine / What is your scripting engine?

SpiderMonkey supports thread safety through JS_THREADSAFE.

@Everyone: What do you feel scripting should be used for? (If it gets too big I'll separate it into a new thread  :P)

I feel that it should be able to control game logic, construct new game objects, control AI, control the game level by "attaching" scripts to certain objects in a level.
In effect, there are "global" scripts and then object-level scripts.
Logged

mysterycoder

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 447
    • View Profile
Re: Component Proposal
« Reply #5 on: September 10, 2008, 12:10:16 AM »

Mozilla will improve javascript in firefox 3.1 (already in the nightlies) by using TraceMonkey. This addition to SpiderMonkey compiles down javascript to native code.

The more and more information I find about this, the more well-suited it seems.  :D
Logged

OvermindDL1

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 288
    • View Profile
    • http://www.overminddl1.com/forum/
Re: Component Proposal
« Reply #6 on: September 10, 2008, 03:26:15 PM »

Yes, Google's V8 javascript implementation compiles down to native code as well, they just optimized for different tasks.  And execution context is a V8 construct, it is what can keep scripts from affecting each other, deals with security (what a script is allowed to do), etc...

What I need in a scripting language:
 - First of all is speed, there will be lots of math work to do in it that I would prefer to do in the language itself rather then write a lot of little C functions for (save time), python has a wonderful math optimizer that can compile to near native speed, as do a few other little scripting languages.
 - Second, I need to be able to add code, and change code, on the fly.  Meaning I need to be able to add in more code scripts, even if the scripts have been running for quite some time already.  They also need to be able to put in updates for existing code, so I can start calling the newer versions of things and so forth.  Most scripting languages can do this already for adding code, and most can be finagled into updating code to, so again, not much of an issue over-all.
 - Third, as for thread safety, the way my engine works is I need different execution points to not rely on globals or other such crap, like Python and V8 both have a GIL, so if I try to launch multiple javascript things at the same time in different threads, only one will run while the other threads wait for it to finish.  In some other python implementations other then the original, and in some other javascript implementation like tracemonkey, they are made so multiple scripts can run at the same time in other threads, but they have a tendency to wrap many things up in synchronization primitives, which slows down the overall speed and is worthless for my point since multiple threads will not communicate directly anyway, hence the back-end needs to be kept separate from other back-end contexts.  Basically, I need thread independence, I do not need thread safety (and would actually prefer to not have thread safety since it would interfere with my own threading system).
 - Fourth, I want the underlying programming model to be Actor, not Object based, there can be objects inside the actors, but at the lowest level must be actor.  Most scripting languages use either neither, or use objects, but some, such as stackless python have enough actor constructs that you can make it completely actor based, javascript would require some work to do so, some scaffolding, but could be rigged to work like the actor model as well.  Now, if you know anything about the actor model, you see why I do not care about thread safety, only thread independence, the actor model near perfectly scales to any number of cores, even across to any number of computers if made correctly.  The only languages that I really know of that is based on the actor model is Erlang, or some Scheme variant.  First of all, I hate functional style programming, I like C style, like most modern languages use, as well as the fact C style is usually faster in execution.  Second, both of those languages are utter hell to try to integrate into something else, like C++.  Third, they are both extremely heavy in memory and computation speed.  And fourth, they go too far with the actor model, I mostly just want the communication and execution pattern, I do not want, for example, an integer to be its own freaking actor...

Basically, I am making my little language to handle everything.  In C++ I will deal with graphics, input, etc... and pass control of those to the scripting language.  As for the language, I want a secure part, a part that I can program in the main game control where others cannot access it (compile it down and run as a native code library would be perfect), and the rest of it will be exposed to mod makers, that would basically include all game logic, controls, ai, etc...  So I will have a part that deals with graphics, sound management, and other ugly things that other people should never look at, and the rest will be kept as normal scripts that others can mod.  I fully intend to use my little language to implement all of the game engine that I can implement in it, which will pretty much be everything but graphics and such.  The underlying aspect of the engine will be coroutine based, so although you may make a function in the language, it might become a multitude of functions in the back-end when it is cut-up to fit the coroutine style.  Upon which it will then compile down to native code (I could even have it spit out C if I wanted, so others could compile it elsewhere, but a C compiler would probably require tail-call optimization, which very few support, the built-in compiler would not doubt produce more efficient code), and run.  I intend to make a cache as well so once compiled it will be saved out to the cache, and if there were no changes to the script since last time then it will just reload if from the cache, vastly less processing time that way.  The main hidden objects, like the graphics handling, will probably just be a cache file that is marked in some way to never check the script file for updates, since I probably will not include a script file for it anyway (I may still, for learning purposes anyway, but it will be ugly since it handles all the ugly stuff).  It will be a very different programming style (Actor's after all), but it is something I am more comfortable with, and scales very well, I will not have to worry about my language every becoming worthless to me due to being restricted in the number of threads and so forth.
Logged

mysterycoder

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 447
    • View Profile
Re: Component Proposal
« Reply #7 on: September 10, 2008, 04:56:29 PM »

Wow that's an informative post  ;)

I wasn't very familiar with the actor pattern. It seems interesting.

You say that you don't need thread safety, but how do you communicate between actors? Do you route the messages through the C++ side?
 
I'm sure you've evaluated this already, but wouldn't it be an interesting way to go about the actor pattern with a javascript sub-process created for each processor you have? The actors could either communicate with each other within the same sub-process or use IPC to communicate between subprocesses. If it could be done in a way in which it is seamless to the developer whether the actor is in the same sub-process, or a different subprocess, that would be really cool. Then you wouldn't have to worry about thread safety or a GIL right?

Maybe I'm getting ahead of myself.  :P
I think that you expect a lot from scripting and are having it handle a lot of your engine's functionality, whereas I think scripting in WGE is more logic control than engine implementation. I don't know if the actor pattern would be overkill for it.

Do you think having scripts containing gui, game logic, ai, etc. run concurrently would give a noticeable performance boost? I haven't really dealt with multithreading in the past.
Logged

OvermindDL1

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 288
    • View Profile
    • http://www.overminddl1.com/forum/
Re: Component Proposal
« Reply #8 on: September 10, 2008, 11:15:19 PM »

The Actor pattern, well, the 'proper' actor pattern, *everything* is an actor, from an 'object' to a single integer variable.  They all communicate by passing messages (like telling an integer to add, and some number like 3, to do the equiv of "someInt+=3"), and the messages can cross pretty big boundaries, such as other processors, or even a network like the internet.  I am not going to that extent, only will 'actor'ize higher level style things, going in a style of Stackless Python tasklets or Erlang processes (Erlang models it like an operating system, each little actor is like a process with the Erlang interpreter being the operating system, and they can communicate to other Erlang interpreters running on different cores or across the net, Erlang scales to an arbitrary amount of computers, and regardless of its functional language style, I would still use it if it was not utter hell to bind with and include with other apps).  Internally messages can be routed four different ways:
 - First, if the thing you are passing a message to is on the same operating system process, regardless of if it is on another thread or not, and it is currently not in a running state, just send the message along and let it handle it instantly, no wait time, no locking or anything needed, just call the function directly.
 - Second, if the thing you are passing a message to is on the same operating system process, regardless of if it is on another thread or not, and it *is* in a running (this is the "if" check I mentioned earlier), then you can do one of two things, first, tasklet's are *not* supposed to run for an extended period, in the actor model it is generally decided that if you have an actor that is of any size or will take any amount of execution time, it is better to either split it into multiple actors, or use the scheduler to pause it and resume it at another timeslice, so you can either wait for it to be not in a running state (spin-wait, kind of like a lock, and this case should generally be rather exceptionally rare in a well made system), or you can stick it in some form of "Message Box" specific for the actor, usually some form of non-locking construct like an atomic CAS circular queue or list, problem is that for it to be 'best-speed' you need to have a predefined size, which causes a tasklet to take up extra memory, but you can make that on a per tasklet basis so one that may have contention issues (very *very* busy tasklets, like a router of some sort) you can give more memory, however if the message box queue is full, then you can either spin-wait or do a couple other things (there are a few options, up to the implementation).
 - Third, if they are in another process, but still on the same computer, and it is a shared memory system (like any personal computer, x86/x64, powerpc, etc... based, not like CELL, the CELL is *not* a shared memory processor, each 'core' has its own memory, so you would need to use the fourth listed method here), then allocate some global memory (normally you would have a 'healthy' amount pre-allocated, depending on usage, it can be resizable during run as well, or you can have message spin-wait if too small, etc., but the global memory would store the messages, and you would tell some listener on the other processes that a message is available and which tasklet it goes to (tasklet are usually named, a string name can be useful, but normally you use a GUID, 128-bit is usually more then enough for tasklets to remain unique during a program run, but 256-bit or more is sometimes required for server type apps, usually you will 'expose' certain tasklets with a globally unique name across a process or even the entire 'universe' of systems so something can find a tasklet without its GUID needing to be explicitly passed to it) using the globally accessible memory.
 - Fourth, if it is on another computer, on a non-shared memory system, or if you just do not want to use kernal memory, then you are down to UDP/TCP.  Normally messages are always considered that they 'have' to arrive, the may arrive to a dead tasklet and thus get deleted without any warning, but they must arrive, so TCP is usually used, but TCP has too much overhead so UDP is usually better, just make some form reliability layer on it (will still be faster then TCP), and many good network libraries can be used for that automagically (RakNet is a good one for example).  However, in my language, if a message is sent to another system you will be able to specify other details about it, like you do not need reliability then it will use normal UDP, so it may or may not arrive (if you specify that it does not always have to arrive, but it is a local message, but the tasklet is running and its queue is full, may just want to dump it instead of spin-waiting or whatever).  The reason I am allowing messages to not need be reliable is that reliability is not always needed, think movement packets for a game person, it is fine if a drop a few in the middle because the movement will be interpolated anyway, you will want it reliable for when then 'stop' moving for sure, but it is fine to drop the occasional one while they are moving (by default reliability is needed, it is only when specified that you do not need it will it not be used, since the general case will be that reliability is required).

My app in the common case will know what message go where, so there will be no need for any checks beyond if the receiving tasklet is already running or not, but even then the check is not complicated as the GUID should hold all such location identifiable information, so a simple integer check is fine in the more complex case, then just calling the appropriate thing to handle the routing.

Problem with Javascript is that it does not have good primitives for suspending execution of something currently running and returning control to something else, while picking back up where it left off later, LUA and Stackless Python have good support for that (but LUA has poor messaging capabilities, and the coroutine switching cannot have a C function in the call stack, Stackless Python's message passing is quite nice, and it can have a C function in the call stack, but the switching becomes rather slow in that case due to a large memory copy, but they are both slower then heck in all cases), where-as my language is made specifically for it.  I will still not allow C functions on the call stack, but that is not an issue if near everything is implemented in the language anyway (which is the reason I go all out, so to answer your question about just using it for specific things, I do use other scripting languages for very specific and limited things, but in this language it is better to put as much in it as possible, do note that in the general case this language will probably be faster then a C++ compiled language to do the same thing, you cannot say that about other scripting languages).

The thing about the actor model is that you do not need to think of threading like you normally do, like most engines that do threading at all will usually separate it, so the graphics will be in one thread, texture loading in another, AI in another or two, networking in another, and most everything else in another, and that is generally as fine-grained as it gets, but they all need to stay synced so there will be a lot of time that a cpu/core will be idle as a thread finishes and is waiting for data on everything else, wasted time, as well as the fact that once we get something like 64-core or more cpu's (*drool...*) that program is horribly inefficient since most of the cores are idle.  I want my language to last me my life if it all possible, not just a few years or the life of the program I am making it for, and the best way to do that is for it to be as efficient as possible for any single core, and be able to scale to any number of cores or multiple machines.  As you can see, this design is as finely threaded as you can get, because of that you have to think differently about how you program (do very little at a time, if anything takes too long, be sure to sleep or split it into other tasklets).  I like the programming style, but I have gotten used to it due to Erlang and Stackless Python and it would take users to get used to it, but once they do it is better.

For note, the Actor model is designed to be like how 'real-life' handles things.  Think about it though, the Object-Oriented model really does not map to anything, if you want information on something you cannot just directly get it, if you send some information in real-life you cannot be certain it is received without some sort of response.  In essence, the Object-Oriented model is like the Actor model if all information transferred is perfectly reliable, which real-life is not, and neither is the Object oriented model (what happens if you try to call a member or access a variable on a class pointer when the pointer points to invalid memory, like zero, you get a nice segfault or something like that, and even testing the variable before hand, you cannot be certain that another thread has not already deleted it between the test and access lines, which is what evolved into things like requiring those costly locks and so forth).  The Actor model is more like real-life in that if you send a message to something, like how I am sending a message to you here, or if we were speaking face-to-face, I can be reasonably sure you will get the message, but I cannot be certain; for example, this message, you may have died or something since the last time you messaged, hence you will never get this, you may still be alive even at the time I am typing this, but die a minute after I send, I could not have known about that, the time it takes the message to transfer also exists (just like in the tasklet world, you can send a message, but the tasklet may have died by the time it gets the message, or die before it gets the message, even after you send it, sounds like that segfault in an OO program, but in the Actor program, it just silently disappears).  To be certain you got this message I will await either a response message (which could be just a message saying you got this, or could be more questions or what-not) and I would know for sure you got it, if there is no response I can still be reasonably sure you got it, but if I want to be certain then I can ask you to please respond saying you got it (thus inferring that you are also still alive) and since messages will eventually arrive (even after some unknown time), as long as I am alive (I do not care about the message if I am dead after all) I will receive it.  Even when communicating face-to-face with someone, you cannot be sure they heard you (or even all of what you said), their mind may be wondering, they may not speak your language, you just cannot be absolutely certain unless they do something like recite what you said.  Even going down to something more specific, take even light, the light you are seeing in the stars was a message sent about that star's status however many tens of thousands or millions of years ago, you do not know if it is even still alive or if it is a cloud of dust by now.  If the OO model could apply to real-life, you would just be able to query it and instantly know an answer, that just cannot happen.

As for a direct answer to your last question, they can give a boost, if you use your time well, most games do not, their graphics or logic threads run too long and while the other threads wait for them to finish to get an updated state, they are doing nothing, wasting time.
Logged

mysterycoder

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 447
    • View Profile
Re: Component Proposal
« Reply #9 on: September 23, 2008, 05:32:03 AM »

Thanks again for these monster posts.  ;)
This certainly is a lot to think about.

It seems that scripting engines like Python, AngelScript and JavaScript lend themselves to coarsely-grained threading, while Stackless Python, Erlang, and OverMindDL1's mystery language are suited towards finely-grained threading.

All of the major JavaScript engines are getting massive speed boosts, TraceMonkey, V8, and now SquirrelFish Extreme.

I'm thinking that WGE is more about ease of use rather than performance.
But having concurrency is not only about performance, it also can be just plain helpful in a program.

So I'm thinking something more along the lines of Stackless Python. If these things are the goals, do you think this is a good choice?
Logged

OvermindDL1

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 288
    • View Profile
    • http://www.overminddl1.com/forum/
Re: Component Proposal
« Reply #10 on: September 23, 2008, 10:50:01 AM »

Even with those speed boosts they are all still single threaded if you look, they all have a global lock to keep the code synced, mine does not (which is the main reason I am making mine).

The thin threading, the tasklet style, is, as you said, not just for speed, for example stackless Python uses tasklets, but is still single-threaded, it is purely for the design, such as a single tasklet you can serialize out to disk and bring it back in later in the same state, no need to worry about putting out your data structures and reconnecting everything as there are no connections thanks to the message passing.

I love Stackless Python, wonderful design and I have used it for many apps and I even made it into a game scripting language for an old game (Battlezone 2) since it was perfectly suited for the tasklet design due to the event programming style, and many gamers hate writing their game stuff in C++. :P

Stackless Python actually does not use the Actor style, it uses a competing style (can't recall the name off hand, could look it up if you are interesting) which is pretty identical except for how the handle messages.  The Actor way handles messages directly, passing them directly to other Actors.  The Stackless Python way uses channels, pipes, that you send a message across the pipe and whatever is on the other side deals with it.  The pipe way is actually a little bit easier to program with (kind of like static actor links), and works perfectly for its design, but it is not as well suited for real multi-threading, whereas the Actor model is perfectly suited for multi-threading.  The Actor model can be a little more verbose, but it can emulate any other known communication and programming style, and you can always wrap up the verboseness in language constructs to make them easier (as I will do with a few things).
Logged

mysterycoder

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 447
    • View Profile
Re: Component Proposal
« Reply #11 on: October 05, 2008, 09:57:53 PM »

@pjcast: I know you are a fan of python now, but how do you feel about stackless python?  ;)

I've been looking into some more languages. Although they have very good concurrency support, Common Lisp, Haskell, Erlang, and Scheme all seem oriented toward more scientific uses and do not seem friendly to embed.

Also, I've been researching methods for allowing python to use concurrency. There are IPC(inter-process communication) methods. The new python 2.6 officially incorporates the multiprocessing module which passes messages between processes. Pyro(Python Remote Objects) is also an alternative which uses TCP/IP to communicate between processes. What I was really searching for was a method to combine the microthreads in stackless python with IPC. Unfortunately, I didn't find anything.  :(

As for AngelScript, it seems to be a good language, but missing a few things in terms of concurrency and binding.

On the javascript front, as OverMindDl1 said, there is poor support for serializing function objects. SpiderMonkey supports multithreading javascript when combined with something like this maybe? V8 has a GIL as I think OvermindDL1 stated before. It's difficult to find information on SquirrelFish Extreme(webkit's javascript engine) but I'll keep looking.

I think using an approach like tasklets would mesh well with the idea that the scripts aren't driving the engine. Any number of python tasklets could be attached to different objects, communicating with messages. For example, a switch could wait for an "open" or "close" message from any number of objects.

In terms of binding, both Python and Stackless Python are pretty awesome, as they use boost::python. V8 seems to have a pretty awesome api. The spidermonkey JSAPI seems pretty good, but kind of low-level. And as always, SquirrelFish Extreme is hard to find information on.  :P

Btw, sorry for the lack of updates/posting, been doing college-admissions work. :'(
Logged

pjcast

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 2653
    • View Profile
    • http://www.wreckedgames.com
Re: Component Proposal
« Reply #12 on: October 06, 2008, 05:36:32 PM »

Python is fine. Javascript just feels more lightweight to me. But python is cool too. As long as it can be seemlessly integrated with threads (even with locks) into a game engine it is fine. boost::python is pretty good binding solution.

No need to apologize for lack of updates. School is far more important ;)

Logged

mysterycoder

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 447
    • View Profile
Re: Component Proposal
« Reply #13 on: October 06, 2008, 06:10:41 PM »

By "seamlessly integrated with threads" do you mean on the scripting level or engine level?

For example do you mean sound, graphics, and scripts each on their own thread? or do you mean scripts are multi threaded and can communicate between each other?
Or both?  ;)


Also, if you mean the scripts are multi threaded, do you mean OS-threads or micro-threads?

edit: Haha, people do say that a lot about school, but I suppose it's not one of those things you appreciate while going through the process.  :P
Logged

pjcast

  • Administrator
  • Veteran
  • *****
  • Karma: +0/-0
  • Posts: 2653
    • View Profile
    • http://www.wreckedgames.com
Re: Component Proposal
« Reply #14 on: October 06, 2008, 06:30:25 PM »

The script does not need to do anything with threads imho, but the scripting engine should allow multiple scripts to be run concurrently by the game engine.
Logged
Pages: [1] 2