Any development I could do to help...


If you guys are logical for one second, you should be supporting a Linux x86 toolchain for the sake that it's an open system just like the Pandora is.

I can understand one would use Windows in certain situations (when you have to, at Work, or to play games not available on other systems) but outside of that, I don't see a good justification to use it for development.

And I would not justify its use because of a proprietary IDE from Microsoft. That, in itself, is just like attaching a boulder to your feet.
 
It annoys me when people hate on stuff just because it's not linux or visa versa, no one should do something for the sake of it, do it because u want to.

If u like some software that is on windows use it, if u like some software that's on Linux or Mac use it bit don't preach any of your one sided almost fan boy stuff.

The only justification anyone needs to use something is that they want to.
 
I just like rattling cages..

Also personally I just don't understand why anyone would pay for an IDE such as visual studio when there are plenty of robust free or cheaper solutions out there and if Microsoft is pigeonholing you into buying their software, the question is why would you want to play that game when you don't have to.
 
Lol I don't think this topic was about if you pay for your IDE or not.

I was just saying don't attack people's choice of software.

P. S. There are free versions of visual studio
 
Last edited by a moderator:
If you guys are logical for one second, you should be supporting a Linux x86 toolchain for the sake that it's an open system just like the Pandora is.

I can understand one would use Windows in certain situations (when you have to, at Work, or to play games not available on other systems) but outside of that, I don't see a good justification to use it for development.

And I would not justify its use because of a proprietary IDE from Microsoft. That, in itself, is just like attaching a boulder to your feet.
We should aim to attract as many devs as possible... there's nothing wrong with enabling people to cross compile from windows...
 
I am not an expert on any of the free/open/*nix compatible IDEs, but I can list a few things that Visual Studio does which I would be curious to know how other solutions compare. Please note all of the things below happen without compiling any code (despite the fact some of them require deep understanding of the code). A lot probably require Visual Assist which is something that just about everyone I know in the games industry uses if they use Visual Studio every day. I must admit, I would be surprised if any free solution offers anything like all the stuff below, but I would be surprised in a good way. The list below isn't at all exhaustive, I just put down the first dozen things that I noted from looking at a single source file and considering the sorts of operations I do on a day to day basis.

1. Decent auto-complete. By decent I mean if I start typing a variable, firstly it intelligently offers a list potential variables. This intelligent list doesn't just display words from the current document/project, it is actually aware of the scope at which I am typing, so if inside a member function of a class, it will know the class member variables are available, also globals and so on. Once I have typed the variable in, if it is an instance of a class struct, when I type the dot operator (as in '.') if the variable is actually a pointer, it'll auto-correct this to -> and it will then display an accurate list of functions/variables exposed by the instance in question. Upon selecting something from this list, say a function name, it'll then copy this suggestion into the text editor and bring up a tip box which shows me exactly what parameters the function takes, on top of this it'll suggest parameters I may want to pass into the function. I have an editor open right now, and for a test typed:

m_B <- this was enough for it to suggest m_BoundsCalculator

m_BoundsCalculator.S <- this was enough for it to suggest SetRoamBox

m_BoundsCalculator.SetRoamBox( <- after filling this in, it gave me the prototype:

- void SetRoamBox( const Vector2 & roamBoxMin, const Vector2 & roamBoxMax )

it also suggested that the first parameter I want to use is m_RoamAreaMin which is correct

m_BoundsCalculator.SetRoamBox( m_RoamAreaMin, <- it then suggested the second paramter may want to be m_RoamAreaMax which is correct

m_BoundsCalculator.SetRoamBox( m_RoamAreaMin, m_RoamAreaMax );

So I typed something like: m_B <enter> S <enter> <enter> <enter> and it correctly worked out I wanted:

m_BoundsCalculator.SetRoamBox( m_RoamAreaMin, m_RoamAreaMax );

This is nothing to do with being lazy, it is about getting things done fast and accurately. Knowing exactly what parameters a function takes, seeing which variables are available at the current scope, it means being able to just 'code' without flipping between various files/headers looking up parameters etc. This becomes even more valuable when working with code that isn't yours (multiple submitters, third party SDKs, etc.)

You can also note that as soon as I declare a new variable, 'int testing;' immediately Visual Studio is then 'aware' of this variable.

2. Enum values, I can just click on an enum (anywhere in code) and Visual Studio tells me its value (again without compiling), so if a project has a massive enum list, and you need to know the value of one in the middle of the list you don't have to manually count, or compile/run, it just tells you.

3. Refactor variables, I can right click a variable and rename it. This isn't a simple search/replace, not even a 'clever' regex search and replace, this is a refactor that knows the code. For instance, if inside a class I have a variable m_Count (and please don't preach about whether this is a good name or not, if you work on large projects, closed or open source, you have to deal with good and bad code), and I want to rename this variable to m_IdleCount, doing a replace for m_Count would be very bad if multiple classes have an m_Count variable, some of them public, some of them private. The m_Count could be littered across the entire code base, but only half the instances of it would actually need replacing. With Visual Studio it knows all of this, it will only replace the correct ones and also tell you what is has done/is doing in case you want to review.

4. Find variable/class/value/etc., again I don't mean a simple search. Say I have a sprite, MySprite and it has a render function, Render, and I want to find all the cases of this Render function being called, I can't grep for 'Render' as that function name will be used by loads of other things to. With Visual Studio it is able to actually search for cases when Render is being called on a MySprite class. If the Render function is virtual and comes from a base class, it handles this too.

5. Refactor function signatures, so I can add a parameter to a function, it'll automatically fix up declaration and definition, it'll then use the clever find functionality to find instances of said function and put them in a list so you can go through and fix them up.

6. See through defines, by this I mean I can have a define that say adds a function to a class:

#define ADD_MESSAGE_RECEIVER( ) \

void ReceiveMessage( int p1, int p2 ) \

{ \

HandleMessage( p1, p2 ); \

}

class MyClass

{

public:

ADD_MESSAGE_RECEIVER( );

};

Visual Studio can 'see through' this, so when I have an instance of MyClass and hit dot (as in .) it will list 'ReceiveMessage' as one of the functions. This is the tip of the iceberg, it can see through much more, I personally think it is very impressive.

7. Go to definition/declaration, so I can have the cursor over any variable, method, enum, define, etc. and jump to the declaration/definition. Again this doesn't require compiling code. It is also clever as it will 'see through' defines, like in the above example. It will also see through templates. I have seen some very complex macro/template/inheritance code and again it is able to see through all of this. This isn't compile time stuff, or CTAGS, this is real time stuff that works (and works a lot better than any CTAGS implementation I have ever tried).

8. Information current editor position, so if the cursor is over a member variable, in my test I have the cursor on 'm_DebugPrim' it has information that tells me 'PrimitiveHandle m_DebugPrim' so I know m_DebugPrim is a PrimitiveHandle. If I move right, a function is being called on m_DebugPrim, in this case it is m_DebugPrim.SetSortPriority, as I move over 'SetSortPriority' it tells me 'void SetSortPriority( unsigned int SortPriority )'. At any point I can use the definition/declaration information, so if I press Alt-G right now it gives me two options:

Engine\Base\Graphics\RenderHandles.cpp:153 void SetSortPriority( unsigned int SortPriority ) {...} 1

Engine\Base\Graphics\RenderHandles.h:53 void SetSortPriority( unsigned int SortPriority ) 2

I can see which is the definition by {...} at the end, I can also quickly jump to either (1/2 keys).

9. Provide function parameter information, so inside a function call, there is a list of parameters, I want to know what they do, if I have the cursor over say the second parameter, hit CTRL + SHIFT + SPACE, it a random case it tells me:

RayCastResult RayCastTerrain( const Vector2 & startPosition, const Vector2 & vec = Vector2( 0.f, -128.f ) )

And the second parameter 'const Vector2 & vec = Vector2( 0.f, -128.f )' is in bold. This is very handy for functions that takes loads of parameters, rather than counting how many commas there are before the current variable, Visual Studio will just tell you, if you then use the cursor keys to go left and right, as you pass to the next variable it'll update the bold variable. You can also note in the above it tells me that the second parameter has a 'default' value, in this case Vector2( 0.f, -128.f ).

10. Implementing virtual functions, say I have a hierarchy of 8 classes, with various virtual functions that can optionally be implemented. I can look at any level of this hierarchy, but say I look at the final child, I can right click on the child class and and 'Implement Virtual Methods...' this will give me a list of all virtual methods, arranged per class, for each of the base/parent classes. It'll show which ones are already implemented (check box that is ticked) and which ones aren't (no tick in box). If I go ahead and tick a couple of the unimplemented virtual methods and click okay, it'll then implement these functions for me. So it'll add the declaration to the header, and the definition to the source file. The default definition just throws an exception.

11. Integrated CPU/GPU debugger and profiler, since Visual Studio 2012 the GPU debugger (PiX basically) is integrated into Visual Studio. So not only can you set quickly through code, set break points, hardware watch points, step through disassembly etc. you can also step through shader code, move the program counter, back trace a pixel, view draw lists, view meshes pre/post transform, view shader output, and so much more. Anyone doing serious graphics work will testify that you absolutely need a tool like this.

12. Fast debugger, the speed that you can step through stuff in Visual Studio is really quick. The only debugger in the last 10 years I have used that is faster is the PS2 debugger from SN Systems (the PS3 one got slower and then got integrated into Visual Studio). Maybe other debuggers around are fast too? Certainly Xcode/GDB/CodeBlocks is never anywhere near as fast when ever I have used it.
 
You know you use vim like an ide when you start typing esc:e somepath in word... :D
Indeed. I do :w in terminals, / in browser to search and :q in a whole bunch of terminal programs.
If you haven't checked out viemu then I suggest you do; if you use Outlook/Word/Visual Studio then it plugs in and offers a really nice vim experience, I have used it extensively (I am quite a big Vim user, as well as a big Visual Studio user) and think it is pretty impressive.
 
1. Decent auto-complete.
Ironically, I think this is the worst aspect about Visual Studio in a C++ project. In VB.NET and C#, autocomplete is fine, but I find it's atrocious on C++ projects, it breaks so easily, and I'm constantly seeing a message in the status bar saying that it's not working :(
That said I'm still using VS2008 for the most part, just because that's what I've got a legit copy of. I don't know if 2010 or 2012 are any better. We have VS2010 at work, but don't use C++ there

I found that in VS2010 when they turned "hardware acceleration" on by default in the IDE, the screen never refreshed properly, and I saw bits of previous documents when Ctrl+Tabbing through. Turn that back off, and you're okay though.
 
1. Decent auto-complete.
Ironically, I think this is the worst aspect about Visual Studio in a C++ project. In VB.NET and C#, autocomplete is fine, but I find it's atrocious on C++ projects, it breaks so easily, and I'm constantly seeing a message in the status bar saying that it's not working :(
Yeah, the bigger the project the worse intellisense works with C++. Working on some quite big project and intellisense just thinks it must not work anymore. So the one and only solution for Visual Studio is Visual Assist X (http://www.wholetomato.com/). Once installed and getting used to, you're going to miss it in every other IDE :)
 
I've been using Geany lately, it works great on my low end devices like the Pandora and Raspberry Pi to my work Laptop to my gaming machines as it's lightweight.. It's powerful enough to give me all the IDE features I like, but without all the clutter and crap most of the bigger ones have.
 
Last edited by a moderator:
@PokeParadox: Certainly I have found in my limited experience of CodeBlocks that is does make a 'good effort', however that effort (again based on very limited experience with CodeBlocks) is a long way off what Visual Studio offers.

@crow_riot: Yes totally agree, Visual Assist X is where it is at, most of the stuff I put in my post are features that Visual Assist X provides (I think I did put a disclaimed right at the top of the post saying it assumed Visual Assist is installed)

For the record, my post isn't intended to feed the trolls, it is more that I thought maybe all the people who have trouble seeing why people use Visual Studio really don't understand how good it is. It's like if someone thinks vi is an alternative then they must be joking, trolling or just have a huge lack of understanding of why people use Visual Studio (which my post addresses a small number of reasons). As I also said, if something free/open really can match Visual Studio I think it would be a really good thing, as would crap loads of people 'in the industry' as it would mean studios could save a ton of money with Visual Studio licenses. There seems to be this idea that companies don't think twice before buying software, certainly for AAA software houses I have worked at, this doesn't hold true. They only buy licenses for software where needed, if there is a free version that does the job then it would be serious considered (and ultimately adopted). But the notion that I could fire up vi, capture a frame from my game, click on a pixel and view the history for it, find the final shader to draw it, then step through the shader code is a bit laughable to me.

The other reason for the lengthy post is it is getting a bit old/boring to keep having threads invaded by anti Windows/closed source/etc. comments. I haven't extensively tested every IDE/debugger/editor in existence, but I have used the main culprits over the last few years, and I currently do not believe anything rivals Visual Studio for C/C++ projects (by projects I mean editing, refactoring, debugging, profiling, etc).

So for me it is win-win, either it is accepted Visual Studio has its merits (I am not saying everyone should use it over what they currently prefer, just that it has merits so everyone can understand that is is a viable choice for some people), OR someone comes along and says 'Hey, actually you can do all the stuff just as well in this free editor, check it out!'.

EDIT: 

@TrashyMG: I think people using the editor they prefer makes most sense, never going to hear me argue that, all I really want to counter is the 'anti' people who are anti other people using a specific OS/editor/license.
 
Last edited by a moderator:
I don't have time to go through the points one by one, but I can say that Code::Blocks makes a good effort in many of the listed features and that's why I use it.
What about CodeLite? I've heard it spun off from Code::Blocks and it seams to have more regular releases.

I've been using Geany lately, it works great on my low end devices like the Pandora and Raspberry Pi to my work Laptop to my gaming machines as it's lightweight.. It's powerful enough to give me all the IDE features I like, but without all the clutter and crap most of the bigger ones have.
Yes Geany is nice. I haven't explored it much but I liked what I saw. It is freakingly fast to open for an IDE.

At work we had to recommend a Linux C++ IDE that a bunch of Windows developer would find easy to adapt to. We went with Netbeans C++ and though it takes a little while to open and index the project, I find it rather nice and has a easier adaptation curve than say Eclipse.
 
Throwing my name in the hat for the vi (gvim to be exact) + make crowd.. One nice thing is that it's generally feasible to develop remotely.
 
Back
Top