Why can't they just change their compiler to generate managed code? Why do they need to change the syntax of C++ at all?
Because running a program under the CLR is quite a bit different than running under a native CPU, and stock C++ doesn't really lend itself to the environment (for example, the CLR does not provide deterministic destructors). Rather than try to shoehorn C++ into a place it doesn't really fit, Microsoft did the right thing and extended the language in a way that makes it fit in with the other.NET languages.
Plus, without new keywords, how would you specify which classes are garbage collected and which are manually managed? How would you specify class attributes? What about boxing/unboxing? The CLR is a very powerful environment, and I'd rather C++ have the ability to use this power.
I'm in the middle of a project using a rather large amount of Managed C++ glue to bridge a native C++ library with.NET. Obviously I can't wait until VS2005 is out to use the new syntax, but I'm going to have to redo a lot of it in the future.
I'm not complaining about the new syntax, though - what I've read about it seems like it's much cleaner and better thought out than the current stuff. I just wish it was here now so I could use it instead of having to rewrite it down the road.
On Windows I use RSS Bandit. Haven't found a non-sucky one for *nix, although I haven't looked all that hard. On OS X I use NetNewsWire, which while not great, does the job.
Many of the problems stated in using a GPU for non-graphics tasks would be implicitly solved if the GPU and CPU shared memory. While this would slightly slow down the GPU's memory access, in 3 years, I don't think that would be an issue. Especially compared to the benefits of having only one memory pool.
Yeah, that's why Microsoft did that in the Xbox. Works real nice - for whatever operation you happen to be doing at the moment, you can choose between the CPU and GPU without copying memory around.
I'm John Nagle, owner of Animats, and you can reach me through the addresses on the Animats web site.
Very cool. I'm Matt Spong, lead developer/CTO of Elemental Productions. We're a game company, about 1.5 years into our first project (multiplayer RTS type, Win32/OS X/Linux, potentially Xbox). I'm in charge of coordinating development of the engine, as well as writing a majority of it.
Physics simulation is something that's really caught my interest over the course of writing this engine - I'm actually thinking of going back to school for a degree in Physics or Math (got about halfway through a CS degree then left to ride the bubble because I was tired of spending time and money to get a degree for something I had been teaching myself since I was 8) and going into computational physics research stuff afterwards. That way I can actually get a degree that will teach me something, instead of me teaching the professors the intricacies of C++ templates:\
I prefer spring/damper simulators, because you can handle frictional contacts right and you don't have the zero-time bounces (the "boink problem") of impulse/constraint systems. The CPU load is higher, but that's less of a problem than it used to be.
I've always had some stability issues with spring/damper systems - they seem to me to be a little sensitive to floating point errors when you create very stiff springs. The approach I took with our simulator was to treat contact points as a kind of joint that would be created when the objects touch and destroyed when enough force was applied to overcome the frictional forces holding the contact in place (with some specialized versions of the contact joint to handle things like sliding, etc). When they are in place they work like any other joint, constraining how the objects may move in relation to each other. And the zero-time bounce problem goes away, because the objects will be joined with a resting joint, which keeps them from moving at all unless enough force is applied to break the joint.
This has worked out pretty well in practice, because it allows the entire physics system to be build up into one hierarchy. That way we can cut down on the calculations quite a bit, also, since we can figure out solutions for bigger groups of objects at once. It seems to be a good way to structure the world that makes some things that would otherwise be a hassle a little easier.
I have to admit, I don't know the current state of the art in the physics simulation field, because I've only gone out and read up on things I couldn't figure out myself (and after re-learning calculus and matrices and some of that nastier math, I figured most of it out on my own). So it's very likely that a lot of what I've done in the simulator is not the best way of doing things, and also quite different than other engines may do them. But it seems to be working fairly well (it'll do basic rigid body physics, rotational/sliding/ball-and-socket joints, contact joints, springs/dampers (linear and rotational), pretty basic cloth stuff) and it doesn't really have stability or performance issues. I went to SIGGRAPH last summer and sat through a couple lectures about computational physics stuff (including a really good one by the Pixar guys), and I've got plans to work on fluid simulation in the near future (I want to get in-game explosions modelled as realistically as possible... actually simulating them would be cool).
So like I said, this is something that's caught my interest, and possibly something I may pursue in the future. I'd like to focus all my attention on this sort of thing, at least for awhile, instead of it being another side project, competing for time with the rendering engine and the AI and the rest of what makes a game.
A good test of a physics system is the spinning top. That's easy to set up. The base should roll around a little (it has a nonzero diameter), the top should precess, it should recover from small dist
Bouncing balls, yes. Bouncing humanoid figures with joints, friction, and multiple contacts, no.
I hate to argue with you, especially since (if you are who you claim to be) you know what you're talking about. But I'm a game developer, and I'm responsible for the physics simulator in our engine, among other things, so I know what I'm talking about too - physics simulation is just not that hard. The collision detection is what gave me the most problems. Once the collision routines are giving accurate collision data, things become easier.
The difference between "sort of works" and "works as well as that" is non-trivial. That's why I collect royalties on the technology.
I agree, it's not an easy problem, but it's not a terribly difficult one, either. I know, because I've done it before, and I'm doing it now.
What it's missing is a few crucial pieces which are slowly starting to fall together
No. What is missing is the final (and most important) piece of the cross-platform idea - Windows. I'm a Mac guy, and I love Cocoa, and I've been a Linux user since 1994 and a Solaris user befor that, but I understand the realities of the world today. For a development platform like GNUStep to succeed, it has to be able to run on Windows and, and here's the kicker, act like a native Windows application.
If Apple were to throw their weight behind GNUstep ( a tough decision, but an interesting one which could potentially bode well for both Apple and the free software community ) we could have the outcome the author asks for... Apple pushing a disruptive technology based on their own frameworks into free software, and taking hold of the market.
I actually agree in this situation - the open source version, given the ability and cooperation from Apple, could flourish technically and allow cooperation between Apple and the free software community which extends past simply command line tools and support libraries, while Apple still eats its lunch on the interface and user experience side of things (in addition, just because Apple would allow third party developers to develop true cross-platform apps between itself and *nix (and, like I said earlier, Windows), there would not necessarily be a version of Final Cut Pro for Linux - you want the real Mac experience, for what Macs are really good for, you buy a Mac.
Actually, collision detection is a pain to code, but well understood today. Collision response, the actual physics, is much harder.
Not really. Good, robust collision detection routines are a pain in the ass, but once you have them written (to the point where you can get accurate collision data, including exact time/location/vector of collision) the physics routines themselves are easy.
This code will produce an error. VC++ does not handle functions in named classes inside templates that are not declared inline.
Try the newest version (VS.NET 2003). Previous versions of VS.NET's C++ compiler were only marginally better than VS6's, which was crap. The 2003 version of the compiler is much better, and indeed for the first time can build the project I'm working on (large, commercial game engine, makes very heavy use of templates, including partial specialization and other things that would case VC++ problems in the past). Previously we were using gcc on Windows, hoping and waiting for VC++ to get to the point where it would work for us, and it finally has.
I haven't tried compiling your example, but I have done similar things in the engine, and they build fine. I'd suggest you try the latest version of the compiler before you knock its compliance.
It seems to me that this might be one piece of a development environment still not available. I know tools like that are available for wxWindows, but what about for using Microsoft's native widget set ?
You can develop GUIs without using the GUI layout tool. It can all be done in code if you'd like.
I love Gnome, but I will forever banish it from my system if they adopt Mono/C#. I do not want to worry about how firm the footing is under Mono.
That's quite a knee-jerk reaction. The C# language and core runtime stuff is standardized - Microsoft can't do anything about Mono using them. The parts that are questionable are the extended base libraries - things like Windows.Forms and so on. But Gnome doesn't need to use those anyway - the core language and bindings for the Gnome libraries is enough, and is safe from Microsoft's meddling.
C# is a very nice language, and the Gnome project would be wise to adopt it. I had my doubts, but I've been messing around with it, and it really is a well-designed language.
The official BT (and others too, as far as i know) client actually first writes out a file on disk the size of the intended download. The random chunks are then inserted into this empty-yet-allocated space.
The official BT client no longer does this. It now only uses as much disk space as has been downloaded rather than allocating the whole file at once.
... to attack Microsoft on the.NET front. We have all the components of a powerful, truly cross-platform development platform; they just need to be packaged in a way which can compete with the cohesive API that is.NET.
Now, I'm not trying to start a flamewar here, so I'm not going to insist on specifics here, but what needs to be done is to create essentially a "distribution" of a powerful language (I'd use Python), a good cross-platform widget set (I'd use Qt, were it not for the license issues - personally I don't blame Trolltech for the licensing scheme, as $2500 is chump change to any real development house anyway, but in this case it would hinder adoption. Maybe wxWidgets then, or GTK+ configured in a way to appear like native widgets, but gah, GTK+ is such a hideous API), a selection of useful Python (or whatever) modules, and so on.
Like I said, this is nothing that didn't exist before, but it should be packaged in such a way as to provide a standardized environment on every platform that applications can rely on. Come to think of it, rather than use a specific language like Python, maybe the whole thing should just be wrapped around Parrot.
Anyway, the specifics don't matter. It's the idea of having a good competitor to.NET with a standardized set of support stuff on each platform, with a single installer to support the entire shebang. Why can't this be done? If I had the time, I would, but I don't. But if there was one place the open source community can take on Microsoft, it's development tools. And the time to do it is before.NET gets too entrenched.
I've got 6 invites too, and nobody I know wants any. If you want one, find me on AIM (spong1027) and I'll hook you up.
Is online poker set up in such a way that card counting can actually work?
No, counting cards doesn't apply to poker, just blackjack.
Political blogs are everywhere. How about good technical blogs?
Why can't they just change their compiler to generate managed code? Why do they need to change the syntax of C++ at all?
.NET languages.
Because running a program under the CLR is quite a bit different than running under a native CPU, and stock C++ doesn't really lend itself to the environment (for example, the CLR does not provide deterministic destructors). Rather than try to shoehorn C++ into a place it doesn't really fit, Microsoft did the right thing and extended the language in a way that makes it fit in with the other
Plus, without new keywords, how would you specify which classes are garbage collected and which are manually managed? How would you specify class attributes? What about boxing/unboxing? The CLR is a very powerful environment, and I'd rather C++ have the ability to use this power.
I'm in the middle of a project using a rather large amount of Managed C++ glue to bridge a native C++ library with .NET. Obviously I can't wait until VS2005 is out to use the new syntax, but I'm going to have to redo a lot of it in the future.
I'm not complaining about the new syntax, though - what I've read about it seems like it's much cleaner and better thought out than the current stuff. I just wish it was here now so I could use it instead of having to rewrite it down the road.
On Windows I use RSS Bandit. Haven't found a non-sucky one for *nix, although I haven't looked all that hard. On OS X I use NetNewsWire, which while not great, does the job.
Many of the problems stated in using a GPU for non-graphics tasks would be implicitly solved if the GPU and CPU shared memory. While this would slightly slow down the GPU's memory access, in 3 years, I don't think that would be an issue. Especially compared to the benefits of having only one memory pool.
Yeah, that's why Microsoft did that in the Xbox. Works real nice - for whatever operation you happen to be doing at the moment, you can choose between the CPU and GPU without copying memory around.
I'm John Nagle, owner of Animats, and you can reach me through the addresses on the Animats web site.
:\
Very cool. I'm Matt Spong, lead developer/CTO of Elemental Productions. We're a game company, about 1.5 years into our first project (multiplayer RTS type, Win32/OS X/Linux, potentially Xbox). I'm in charge of coordinating development of the engine, as well as writing a majority of it.
Physics simulation is something that's really caught my interest over the course of writing this engine - I'm actually thinking of going back to school for a degree in Physics or Math (got about halfway through a CS degree then left to ride the bubble because I was tired of spending time and money to get a degree for something I had been teaching myself since I was 8) and going into computational physics research stuff afterwards. That way I can actually get a degree that will teach me something, instead of me teaching the professors the intricacies of C++ templates
I prefer spring/damper simulators, because you can handle frictional contacts right and you don't have the zero-time bounces (the "boink problem") of impulse/constraint systems. The CPU load is higher, but that's less of a problem than it used to be.
I've always had some stability issues with spring/damper systems - they seem to me to be a little sensitive to floating point errors when you create very stiff springs. The approach I took with our simulator was to treat contact points as a kind of joint that would be created when the objects touch and destroyed when enough force was applied to overcome the frictional forces holding the contact in place (with some specialized versions of the contact joint to handle things like sliding, etc). When they are in place they work like any other joint, constraining how the objects may move in relation to each other. And the zero-time bounce problem goes away, because the objects will be joined with a resting joint, which keeps them from moving at all unless enough force is applied to break the joint.
This has worked out pretty well in practice, because it allows the entire physics system to be build up into one hierarchy. That way we can cut down on the calculations quite a bit, also, since we can figure out solutions for bigger groups of objects at once. It seems to be a good way to structure the world that makes some things that would otherwise be a hassle a little easier.
I have to admit, I don't know the current state of the art in the physics simulation field, because I've only gone out and read up on things I couldn't figure out myself (and after re-learning calculus and matrices and some of that nastier math, I figured most of it out on my own). So it's very likely that a lot of what I've done in the simulator is not the best way of doing things, and also quite different than other engines may do them. But it seems to be working fairly well (it'll do basic rigid body physics, rotational/sliding/ball-and-socket joints, contact joints, springs/dampers (linear and rotational), pretty basic cloth stuff) and it doesn't really have stability or performance issues. I went to SIGGRAPH last summer and sat through a couple lectures about computational physics stuff (including a really good one by the Pixar guys), and I've got plans to work on fluid simulation in the near future (I want to get in-game explosions modelled as realistically as possible... actually simulating them would be cool).
So like I said, this is something that's caught my interest, and possibly something I may pursue in the future. I'd like to focus all my attention on this sort of thing, at least for awhile, instead of it being another side project, competing for time with the rendering engine and the AI and the rest of what makes a game.
A good test of a physics system is the spinning top. That's easy to set up. The base should roll around a little (it has a nonzero diameter), the top should precess, it should recover from small dist
Bouncing balls, yes. Bouncing humanoid figures with joints, friction, and multiple contacts, no.
I hate to argue with you, especially since (if you are who you claim to be) you know what you're talking about. But I'm a game developer, and I'm responsible for the physics simulator in our engine, among other things, so I know what I'm talking about too - physics simulation is just not that hard. The collision detection is what gave me the most problems. Once the collision routines are giving accurate collision data, things become easier.
The difference between "sort of works" and "works as well as that" is non-trivial. That's why I collect royalties on the technology.
I agree, it's not an easy problem, but it's not a terribly difficult one, either. I know, because I've done it before, and I'm doing it now.
What it's missing is a few crucial pieces which are slowly starting to fall together
No. What is missing is the final (and most important) piece of the cross-platform idea - Windows. I'm a Mac guy, and I love Cocoa, and I've been a Linux user since 1994 and a Solaris user befor that, but I understand the realities of the world today. For a development platform like GNUStep to succeed, it has to be able to run on Windows and, and here's the kicker, act like a native Windows application.
If Apple were to throw their weight behind GNUstep ( a tough decision, but an interesting one which could potentially bode well for both Apple and the free software community ) we could have the outcome the author asks for... Apple pushing a disruptive technology based on their own frameworks into free software, and taking hold of the market.
I actually agree in this situation - the open source version, given the ability and cooperation from Apple, could flourish technically and allow cooperation between Apple and the free software community which extends past simply command line tools and support libraries, while Apple still eats its lunch on the interface and user experience side of things (in addition, just because Apple would allow third party developers to develop true cross-platform apps between itself and *nix (and, like I said earlier, Windows), there would not necessarily be a version of Final Cut Pro for Linux - you want the real Mac experience, for what Macs are really good for, you buy a Mac.
Wow, that's a long sentence.
Actually, collision detection is a pain to code, but well understood today. Collision response, the actual physics, is much harder.
Not really. Good, robust collision detection routines are a pain in the ass, but once you have them written (to the point where you can get accurate collision data, including exact time/location/vector of collision) the physics routines themselves are easy.
You gotta see the forest, not just the trees.
:)
Heh. Don't lecture me on optimization, boy - I'm a game developer!
This code will produce an error. VC++ does not handle functions in named classes inside templates that are not declared inline.
Try the newest version (VS.NET 2003). Previous versions of VS.NET's C++ compiler were only marginally better than VS6's, which was crap. The 2003 version of the compiler is much better, and indeed for the first time can build the project I'm working on (large, commercial game engine, makes very heavy use of templates, including partial specialization and other things that would case VC++ problems in the past). Previously we were using gcc on Windows, hoping and waiting for VC++ to get to the point where it would work for us, and it finally has.
I haven't tried compiling your example, but I have done similar things in the engine, and they build fine. I'd suggest you try the latest version of the compiler before you knock its compliance.
Unless you are developing for an embedded system or something small like a PDA, code size is really near the bottom of the list of importance.
Not really. Keep in mind how important cache memory is to performance - the better the code fits in cache, the better the performance.
It seems to me that this might be one piece of a development environment still not available. I know tools like that are available for wxWindows, but what about for using Microsoft's native widget set ?
You can develop GUIs without using the GUI layout tool. It can all be done in code if you'd like.
The person with 10 years experience has had more failures to learn from. Life experience applies in the programming field as much as any other.
How do you make iTunes reshuffle each time through?
Turn shuffle off and then back on. It'll re-shuffle them.
I love Gnome, but I will forever banish it from my system if they adopt Mono/C#. I do not want to worry about how firm the footing is under Mono.
That's quite a knee-jerk reaction. The C# language and core runtime stuff is standardized - Microsoft can't do anything about Mono using them. The parts that are questionable are the extended base libraries - things like Windows.Forms and so on. But Gnome doesn't need to use those anyway - the core language and bindings for the Gnome libraries is enough, and is safe from Microsoft's meddling.
C# is a very nice language, and the Gnome project would be wise to adopt it. I had my doubts, but I've been messing around with it, and it really is a well-designed language.
I think the author was thinking about deploying on Windows, Mac, etc as well as linux.
He mentioned that Python was a small download on Windows, and OS X comes with it preinstalled anyway.
iTunes.
The official BT (and others too, as far as i know) client actually first writes out a file on disk the size of the intended download. The random chunks are then inserted into this empty-yet-allocated space.
The official BT client no longer does this. It now only uses as much disk space as has been downloaded rather than allocating the whole file at once.
... to attack Microsoft on the .NET front. We have all the components of a powerful, truly cross-platform development platform; they just need to be packaged in a way which can compete with the cohesive API that is .NET.
.NET with a standardized set of support stuff on each platform, with a single installer to support the entire shebang. Why can't this be done? If I had the time, I would, but I don't. But if there was one place the open source community can take on Microsoft, it's development tools. And the time to do it is before .NET gets too entrenched.
Now, I'm not trying to start a flamewar here, so I'm not going to insist on specifics here, but what needs to be done is to create essentially a "distribution" of a powerful language (I'd use Python), a good cross-platform widget set (I'd use Qt, were it not for the license issues - personally I don't blame Trolltech for the licensing scheme, as $2500 is chump change to any real development house anyway, but in this case it would hinder adoption. Maybe wxWidgets then, or GTK+ configured in a way to appear like native widgets, but gah, GTK+ is such a hideous API), a selection of useful Python (or whatever) modules, and so on.
Like I said, this is nothing that didn't exist before, but it should be packaged in such a way as to provide a standardized environment on every platform that applications can rely on. Come to think of it, rather than use a specific language like Python, maybe the whole thing should just be wrapped around Parrot.
Anyway, the specifics don't matter. It's the idea of having a good competitor to
have a look at the Firefox wallpaper then! its STUNNING looks damn hot on Windows and Linux!
:)
Well then it won't do me any good. I run OS X
The Mozilla logo may be so so, but the Mozilla Firefox logo is probably the nicest logo I have ever seen.
I agree, and I'm somebody who's usually very critical of the artistic sensibilities (or lack thereof) of the OSS types. The Firefox logo is beautiful.
If you want to use Maya in an advanced way, you do have to study. For example, there's MEL scripting.
Not to mention all the, uh, art stuff. I hear they have degrees in art these days.