|
30 years ago I started working with C, then C++, then Pascal (Delphi, actually), then back to C++, a bit of Java, and in the meantime I'm back to C++ again.
C++, while old, is not going to be replaced or retired any time soon. It may however be less prominently presented in press, or job offers, because fluctuation tends to be lower with developers in older, established languages - at least that is my experience.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
What I've found is that a lot of companies will build things that they think their customers want... so this includes using all of the new technologies so that they could look like they're on the bleeding edge of technology. Did they HAVE to use the new technologies, no, but they chose to do so because they think that's what will attract new customers.
I remember when the "cloud" term became first popular, people were asking us if our applications were available on the "cloud". Well, it doesn't make sense because of what our company does, but somehow people want buzz terms. It's sad really, people would rather get buzz terms than results.
|
|
|
|
|
C++ will never go away. It is still the best choice when performance and/or determinism matter. However, having been on the job market twice in the last two years (was working for highly unstable companies) finding C++ jobs is getting more difficult. I've also observed that Java is primarily holding on because of Android. The big boy is .NET and for most programming--which is Web and database front ends--it makes a lot of sense. That said, you'll still find that C++ is used heavily for server back ends.
I plan on holding onto C++ for the rest of my career, which is hopefully no more than a decade. Were I ten years younger, I probably wouldn't bother--the big bucks are now in web services.
|
|
|
|
|
Actually I was wondering, should I learn JEE or .NET.
.NET is attractive for its simplicity and the lesser steep learning curve than JEE, but what if suddenly Windows stops being relevant?
Microsoft has problems at the moment and Google is trying to replace the whole Desktop thing with thin clients connected to the cloud.
Maybe open source platforms are just safer.
|
|
|
|
|
The market share of Windows is beyond gargantuan. There is a reason the Server and Tools Division at Microsoft makes so much money. Many people don't respect how important Windows is in the corporate environment. Even if Microsoft went away tomorrow, the need for Windows developers would continue to ten, if not twenty, years.
Microsoft is having problems in an entirely relative manner. Most companies would love to "suffer" Microsoft's problems.
Ask yourself what kind of applications you want to write. What kind of company do you want to work for? Personally, I don't like working on applications where .NET or Java are genuinely the best choices. This is a decision you have to make for yourself. But don't worry about Microsoft going bankrupt any more than worrying about Oracle or IBM going bankrupt.
|
|
|
|
|
Hadi wrote: I wanted to hear your opinion whether C++ has a future.
Your other responses illustrates some confusion.
Regardless of whether a language is used or not it doesn't reflect what a relatively limited marke tplace needs. There will be places that you can go where there will be NO jobs for developers. Doesn't matter what language you know.
It is possible that some market places can become saturated and/or change significantly over time. And market places always are influenced by limited local events. For example if a consulting firm goes out of business in a relatively small town and dumps a lot of C++ developers into the market then finding a job in that language is going to be difficult for a while.
The following is the best objective data that I have seen for a long time as a representative indication of language popularity.
[^]
|
|
|
|
|
Hi ,all ,
I am now using Visual studio to build code on Windows OS .
I am going to learn C on Fedora and write a small project about hooking file system but I don't know that compiler is good on Linux ( To inject dll file ). and I want to run code on other machines .
I installed codeblocks but i don't make sure codebloks will help me .
please help me .
Thanks
Thong LT
modified 8-Nov-13 22:58pm.
|
|
|
|
|
|
gcc is pretty much the most popular Linux compiler (only one you really need to use in Linux, also available for Windows[^]). CodeBlocks is not a compiler at all, it's an Integrated Development Environment (IDE). The difference is that while the compiler compiles the code, the IDE is simply making your collection of tools easily accessible to the developer (edit your code and control the compiler, linker, and debugger all from one place).
|
|
|
|
|
Thank Albert and Richard .
I am now reading "advanced-linux-programming" book and compile by gcc .
Thanks
Thong LT .
|
|
|
|
|
Hi, I read an old program, the programmer wrote some function like the following block, I am wonder if the volatile is necessary with a local variable.
As I know, local variable is in stack, every time enter the function, local variable get a new stack address.
void logRealClock(void)
{
volatile int second;
volatile int minute;
volatile int hour;
second = globalDate->second;
minute = globalDate->minute;
hour = globalDate->hour;
....
checkTime(second,minute,hour);
...
globalRTC_REG.second = second;
globalRTC_REG.minute = minute;
globalRTC_REG.hour = hour;
}
|
|
|
|
|
|
Thanks,I read the Wiki article, but I still can't see the need of volatile for local variable.
The example code only cause size of generated assembly code bigger, but useless.
int main() {
volatile int a = 10, b = 100, c = 0, d = 0;
printf("%d", a + b);
a = b;
c = b;
d = b;
printf("%d", c + d);
return 0;
}
|
|
|
|
|
If you pass a pointer to your variable outside the function (for example to an interrupt handler) and then you guarantee the lifetime of that variable (for example by blocking on an event with this thread) and you want to use the variable in the function after finishing the block operation on the event then it could be useful (because the value of the variable might have been changed by other threads) but what I've described previously sounds quite pervert and awfully designed code. I don't think volatile local vars to be useful.
|
|
|
|
|
thanks, what you said like:
volatile int* aPtr = aSharedMem;
right? then in another thread,
aSharedMem = aNewValue;
then in the current thread, stalled before aSharedMem=aNewValue, then resume, *aPtr get the aNewValue.
if local variable just copy a global's value, like:
volatile int aLocal = aGlobal;
then in another thread, aGlobal = aNewValue;
in current thread, stalled before aGlobal = aNewValue, then resume, aLocal will get aNewValue?
|
|
|
|
|
int* globalptr;
void myfunc()
{
volatile int localvar = 0;
globalptr = &localvar;
printf("localvar: %d\n", localvar);
}
|
|
|
|
|
is the following scenario, the volatile is useful?
int globalVar;
void task1SetGlobal(void)
{
if (xyz == 100)
globalPtr = 100;
}
...
void task2GetGlobal(void)
{
volatile int localVar = 0;
localVar = globalVar;
if (localVar < 100 ) doSth;
else if (localVar == 100) do100Thing;
}
|
|
|
|
|
Not really. In order to understand volatile you should first understand some other concepts like multithreading and caching and all the related problems that can cause problems along with the optimizations done by the compiler.
|
|
|
|
|
It's not necessarily bad design to pass a reference to a local variable to another thread for processing. One example of where it might come in handy is splitting up an array into chunks and processing each chunk in separate threads. However using volatile as a synchronisation mechanism is not the sort of thing I'd recommend to try and avoid a proper synchronisation mechanism (i.e. a condition variable).
|
|
|
|
|
Then we agree, in this case some kind of memory fence is used for synchronization that is usually built into the synch primitives like events. In this case you usually make a function call too to pass the job to another thread and usually this already prevents a compiler from optimizing away some things.
|
|
|
|
|
Probably just me but given the code that was posted I can't see any reason for volatile.
|
|
|
|
|
I have added some code (to an existing MFC/ATL application), to communicate with a piece of hardware that comes complete with com-based driver software.
(Before I forget: I'm writing C++ in Visual Studio 2010, for Windows7).
My code is based closely upon the sample code that the hardware manufacturer supplied, and is as follows;
#import "GlobMgr.dll" no_namespace // I/O funtionality
#import "IviDriverTypeLib.dll" no_namespace // IVI inherent functionality
#import "agu265x.dll" no_namespace // Instrument specific functionality
IAgilentU265xPtr spAgDrvrSlot1;
CCMDS::CCMDS( ...class details not relevant... )
: CUSBDevice( ...ditto... )
{
spAgDrvrSlot1.CreateInstance( __uuidof( AgilentU265x ) );
try
{
spAgDrvrSlot1->Initialize( "USBInstrument1", VARIANT_FALSE, VARIANT_TRUE, "" );
}
catch ( _com_error e )
{
AfxMessageBox( "Driver Initialise Failed" );
}
HOWEVER, my code crashes at the Initialize(USBInstrument1...) statement with a Windows dialog saying Quote: First-chance exception at 0x755bb9bc in IOHandler.exe: Microsoft C++ exception: _com_error at memory location 0x001de4e0..
Why this code fails at all is a mystery but the big question is why does Windows crash with a dialog rather than my Try-Catch code catching the error in the controlled fashion I'd hoped for??
|
|
|
|
|
Presumably something in Windows is catching the error and not re-throwing it. You may wish to talk to the people who provided this code for more help.
Veni, vidi, abiit domum
|
|
|
|
|
Ok, got it thanks - Windows was catching the error and not re-throwing it because... I'm running in Debug and had Visual Studio set to catch all Exceptions
|
|
|
|
|
Something you might have missed: You can set the VC++ debugger up to catch exceptions where they're thrown and it generates a message like the dialogue you're getting. Are you running under the debugger with that setting enabled?
If you're not running under a debugger then it's something else but I thought I'd try and clear that up first!
|
|
|
|