"Currently not available. The site (blah).pdf is not currently available due to too much data traffic."
Dutch can be a bit gutteral, but the dialects spoken in Belgium are a lot softer, and less hard on the throat!
Well, maybe. The C++ purist in me would still love to see a library implemented without recourse to ugly macros (MFC) or language extensions (QT). I understand why the design decisions were made at the time, but C++ has come on a long way since then. Now that you can treat functions as objects (for example using the boost function
library, there's no need for things like message map macros or the MOC to implement to connect gui events to functions. (boost also provides a signals library, that demonstrates this exactly).
The other thing I look for in a library is how lightweight it is. WTL wins hands down here, as it's just a set of header files. No extra libraries to link to or re-distribute. Of course it's not cross platform, but any cross platform library is going to need either a huge interpretation layer for each platform or its own widget set.
Oh well, I guess my quest for the One True Framework will continue....
I agree with you on several of your points. However, I now do all my windows development using WTL. Why? Because it's better than anything else available. WTL is much cleaner and lightweight than MFC, and gets in your way less.
Of course I'd love a C++ gui library that follows good modern coding principles, like 'no macros', 'use stl rather than re-implement poorly', use RAII rather than 'create then initialise' and so on. However I'm not aware that any such thing exists. Anyone interested in hepling build it?
As a Christian and a gamer, why do I need specifically 'Christian' games? I don't play 'Christian' soccer or 'Christian' chess now, do I? I can see the point of some Christian literature if it's actually educating me on some point of my faith , (writers like Philip Yancey come to mind). I can see the point of Christian music like that of delirious and Tim Hughes that serves a purpose in connecting me with God, but beyond that I'll be the first to admit that a lot of what the Christian sub-culture churns out is poor ripoffs of mainstream. I presume that the marketdroids have realised that we're just another market segment that will dutifully lap up whichever books, films, and now even games that have the word 'christian' stamped on them. I wish this wasn't the case, but it is.
Yes, I finished Codename Droid. It was easier than Strykers Run I found, but if you didn't jump just right on the very last level you got stuck in a little hole you couldn't jump out of, and had to start the entire game again...
It was possible! You had to take the ice-crystal down with you, which froze the ice. Then you could jump over the plants, get through the tunnel to the right and retrieve one of the hidden crowns.
Ok, I don't know what that says about me...
Woohoo! That was the first computer game I ever played. I Had the whole series, Repton, Repton2 (a pain to finish, but I managed it....) Repton3 and Repton Infinity (ahead of it's time - it had a complete game editor/designer built in, including an entire language for modifying the behavior of game elements, but ran way to slow...)
Anyone else play the other greats of that era - things like Ravenskull, Striker's Run, Exile etc...? Did anyone ever finish Exile? Even with the cheats I couldn't figure it out.
Truly awesome games. Amazing how addictive they could be, and running in just 32kb of memory. (We had 128 kb in our BBC master, which alas was thrown out last month.)
I've been quite suprised at the leniency described in some of the answers here. In both high school and university, the vast majority of our marks were earned through examination, exam desks were always set up at least a metre away from their nearest neigbour with several invigilators patrolling up and down the aisles, and it was made VERY clear (in Uni especially) that cheating (on exams or plagiarism on essays) could not only cause you to fail the course, but also be ejected from the institution, and even have earlier qualifications from the same exam board revoked.
That said, I don't recall that happening to anyone I knew, but I do remember seeing someone dragged to the front of the exam hall and being loudly chastised by the invigilator for saying 'hi' to a friend as he sat down at his desk. The non-communication rule was very stricty enforced in exams.
I've often wondered about an 'ultra-strict' compile flag for c++ which would reject any function that propogated exceptions not listed in it's exception specification list. (I guess the implementation would have to check every the specifications on every sub-level function call, or something)
page 375 of TCP++PL (3rd edition) states that breaking an exception-guarantee, when it exists, generally terminates the program. But this is a run-time solution - I don't see why it can't be made into a compile time solution, apart from trivial little matters like every single library on the planet having to be re-written to correctly specify their exceptions.
Looking a page ahead in the text, I see that Stroustrup does debate whether no-throw should be the default, and decides that it wouldn't be worth the effort. He's probably right, but if you could do it, it seems to me it would make c++ even more robust than it currently is.
After spending several hours trying to get make to do something complicated with shared libraries and multiple configurations, I started looking for a replacement, and stumbled across SCONS. It took me a few moments to download and install it, and a very short time to go from no knowledge of the system to having solved my problem.
Since then I've shifted several of my projects to using SCONS as the build system. I'm sure it's theoretically possible to achieve what I was trying using make, but I wasted many hours wading through man pages and howtos without success, and SCONS did it with almost zero effort.
I haven't tried using it on Windows yet, but my understanding is that you can use the same script under both platforms.
So, just one data point, but my experience with it has been 100% positive.
The single best measure of whether a programming language is worth using is: how well does it support communities.
This point doesn't seem to get raised very often when comparing the relative merits of language A against language B. It's easy to forget that while a language is a tool for communicating with a computer, it is also (and arguably more importantly) a tool for communicating with other programmers.
Which is why Python is rapidly becoming my favourite language. I find other people's python code far easier to understand than stuff written in other languages. This despite the fact that I've only been hacking python for a few months, and I've been using C++ and other languages daily for several years.
I feel that there's scope for yet another 'methodology', alongside OO and XP and all that - it might be called 'code as conversation', whereby the quality of a piece of code is judged by how readily it communicates intent to other programmers.
When Pixar started in 1985, Greenberg says, it took 8 hours to render one frame (or 1/24th of a second) of computer animation. Now, it still takes 8 hours, because the artwork in each frame is far more complex.
So, that would be, what, 158 years to render a two hour movie? I guess the company started up a lot longer ago than I thought....
I get paid to develop open source software. Check out my medical imaging library here.
One benefit of working in academia - information sharing has always been a key part of the academic tradition, what with peer reviewed papers and so on, and so open source/free software is a very good philosophical fit. At least that's my opinion - there are others that are more interested in the potential profit to be earned from research endeavours than I am.
Functional languages may not seem to be getting used much at the moment, but the ideas that they present are seeping into a lot of current thought on language design and use.
The latest incarnations of Python seem to be quite heavily influenced by Functional concepts (lambdas and so on), and they are even creeping into C++, despite the fact that people always seem to classify it as Object Oriented. Several of the boost libraries show this kind of approach - there is a lamda library, a 'function' library that lets the programmer pass functions around as if they were objects and so on.
I don't have enough experience with functional languages to say how close these ideas match up with functional theory, but I'm already using them in production code and benefiting from the results. Anyone else out there think that python and c++ would be better classified as 'hybrid' languages than 'OO' ?
This is one of the key strengths of C++. It provides two powerful abstraction mechanisms - runtime abstraction, throught the use of virtual functions, and compile time abstraction, through the use of generics (templates). The programmer can choose which mechanism is appropriate for the problem he is solving.
One big advantage not mentioned yet is that using generics as an abstraction mechanism causes errors in your code to manifest themselves at compile time rather than runtime - i.e. on your desk rather than your client's !
This would take a while to catch on, but I think it's about the only bullet-proof approach to stopping spam. I'd certainly use such a system if it were integrated nicely into my mail client.
I use debuggers every day, and find them indespensible for tracking down obscure bugs. (Like the one I just hit a few minutes ago - why does MSVC barf when calling vector::clear? The debugger stops app execution in _free_base() in free.c. This doesn't happen if I recompile using STLPort instead of the default stl library. ) That said, when I don't use a debugger I'm sure I find myself writing more robust code - I'm more inclined to spend more time on proper exception handling, thinking about my design instead of:
write,
compile,
run,
oh it failed on line 2493, fix that line,
run again,
now it fails at line 2547, fix that....
which results in code that works under the exact set of circumstances that you test it, but has no guarantee as to what will happen if the parameters change any. (And those pesky users always find those annoying 'special cases').
One way of thinking about MI that I've been finding useful recently is this:
The ISA paradigm sees classes as nouns (e.g. an Image IS A collection of pixels.) I think that classes can also be adjectives - so for example I might have a 'Rotatable' class, so then my Image class IS A (collection of pixels) and IS rotatable
class Image : public std::vector, public Rotatable { ... };
In other words, there's more to objects than just a simple way of grouping together related functions. The approach I'm aiming for involves designing quite a large number of fairly minimal classes and plugging them together using MI to get the final behaviour I want. The advantage to this is that each class can be small enough to be robust, generally being only responsible for one task or resource. I admit that I'm not quite there yet, but it seems a promising line of investigation.
I think this is great. I've been thinking for a long time that the hierarchical file system is not necessarily the best way of organising data. This idea definitely merits serious consideration. Even if it never comes to maturity in its present form, its good to see free software being used as a testing ground for new ideas as well as re-implementing existing concepts.
Try going near an MRI machine with change in your pocket. I made that mistake once, and it was tugging hard at the coins from across the room. >1 tesla magnetic fields need to be treated with respect - people can get seriously hurt if anything metallic gets brought into the room - they can get ripped out of your hand or pocket and will fly straight down the central bore where the patient is. I've heard stories of people being killed when someone walked into an MRI room with a pair of scissors in their pocket.
The LISA experiment, which gets mentioned in passing, is really quite audacious - three spaceships orbiting the sun in a clever rotating triangle pattern, 5 million miles apart from each other, and detecting changes in distance between each other to an accuracy of 20 picometers! In essence, it's just a really, really big version of the Michelson interferometer we all played with in 1st year physics - I remember the thrill back then of realising what tiny changes in distance you could discern with just a couple of mirrors, a lamp and something to measure the recieved intensity. It's exciting to witness the nascence of an entirely new form of astronomy.
I would claim that _destructors_ are the single biggest advantage C++ has over Java, C#, perl, python and the rest
Absolutely. A function (destructor) that is guaranteed to be called at some point after another function (constructor) has been called, even if an exception is thrown in between, is incredibly useful. While there are a number of powerful resource managment techniques in c++ (see for example the smart pointer classes over at boost, for me the approach of 'Resource Aquisition Is Initialisation' has proven to be very effective in avoiding headaches with with memory leaks (or database handle leaks, or file handle leaks, or....)
"Currently not available. The site (blah).pdf is not currently available due to too much data traffic." Dutch can be a bit gutteral, but the dialects spoken in Belgium are a lot softer, and less hard on the throat!
Well, maybe. The C++ purist in me would still love to see a library implemented without recourse to ugly macros (MFC) or language extensions (QT). I understand why the design decisions were made at the time, but C++ has come on a long way since then. Now that you can treat functions as objects (for example using the boost function library, there's no need for things like message map macros or the MOC to implement to connect gui events to functions. (boost also provides a signals library, that demonstrates this exactly).
The other thing I look for in a library is how lightweight it is. WTL wins hands down here, as it's just a set of header files. No extra libraries to link to or re-distribute. Of course it's not cross platform, but any cross platform library is going to need either a huge interpretation layer for each platform or its own widget set.
Oh well, I guess my quest for the One True Framework will continue....
I agree with you on several of your points. However, I now do all my windows development using WTL. Why? Because it's better than anything else available. WTL is much cleaner and lightweight than MFC, and gets in your way less.
Of course I'd love a C++ gui library that follows good modern coding principles, like 'no macros', 'use stl rather than re-implement poorly', use RAII rather than 'create then initialise' and so on. However I'm not aware that any such thing exists. Anyone interested in hepling build it?
As a Christian and a gamer, why do I need specifically 'Christian' games? I don't play 'Christian' soccer or 'Christian' chess now, do I? I can see the point of some Christian literature if it's actually educating me on some point of my faith , (writers like Philip Yancey come to mind). I can see the point of Christian music like that of delirious and Tim Hughes that serves a purpose in connecting me with God, but beyond that I'll be the first to admit that a lot of what the Christian sub-culture churns out is poor ripoffs of mainstream.
I presume that the marketdroids have realised that we're just another market segment that will dutifully lap up whichever books, films, and now even games that have the word 'christian' stamped on them.
I wish this wasn't the case, but it is.
I think that if you took them to StoneHenge they got converted into gold bars, but I've forgotten what you would use them for after that.
Yes, I finished Codename Droid. It was easier than Strykers Run I found, but if you didn't jump just right on the very last level you got stuck in a little hole you couldn't jump out of, and had to start the entire game again...
Ahh, memories.
It was possible! You had to take the ice-crystal down with you, which froze the ice. Then you could jump over the plants, get through the tunnel to the right and retrieve one of the hidden crowns. Ok, I don't know what that says about me...
Woohoo! That was the first computer game I ever played. I Had the whole series, Repton, Repton2 (a pain to finish, but I managed it....) Repton3 and Repton Infinity (ahead of it's time - it had a complete game editor/designer built in, including an entire language for modifying the behavior of game elements, but ran way to slow...)
Anyone else play the other greats of that era - things like Ravenskull, Striker's Run, Exile etc...? Did anyone ever finish Exile? Even with the cheats I couldn't figure it out.
Truly awesome games. Amazing how addictive they could be, and running in just 32kb of memory. (We had 128 kb in our BBC master, which alas was thrown out last month.)
I've been quite suprised at the leniency described in some of the answers here. In both high school and university, the vast majority of our marks were earned through examination, exam desks were always set up at least a metre away from their nearest neigbour with several invigilators patrolling up and down the aisles, and it was made VERY clear (in Uni especially) that cheating (on exams or plagiarism on essays) could not only cause you to fail the course, but also be ejected from the institution, and even have earlier qualifications from the same exam board revoked.
That said, I don't recall that happening to anyone I knew, but I do remember seeing someone dragged to the front of the exam hall and being loudly chastised by the invigilator for saying 'hi' to a friend as he sat down at his desk. The non-communication rule was very stricty enforced in exams.
Hmm, so I'm not the only one...
I've often wondered about an 'ultra-strict' compile flag for c++ which would reject any function that propogated exceptions not listed in it's exception specification list. (I guess the implementation would have to check every the specifications on every sub-level function call, or something)
page 375 of TCP++PL (3rd edition) states that breaking an exception-guarantee, when it exists, generally terminates the program. But this is a run-time solution - I don't see why it can't be made into a compile time solution, apart from trivial little matters like every single library on the planet having to be re-written to correctly specify their exceptions.
Looking a page ahead in the text, I see that Stroustrup does debate whether no-throw should be the default, and decides that it wouldn't be worth the effort. He's probably right, but if you could do it, it seems to me it would make c++ even more robust than it currently is.
After spending several hours trying to get make to do something complicated with shared libraries and multiple configurations, I started looking for a replacement, and stumbled across SCONS. It took me a few moments to download and install it, and a very short time to go from no knowledge of the system to having solved my problem.
Since then I've shifted several of my projects to using SCONS as the build system. I'm sure it's theoretically possible to achieve what I was trying using make, but I wasted many hours wading through man pages and howtos without success, and SCONS did it with almost zero effort.
I haven't tried using it on Windows yet, but my understanding is that you can use the same script under both platforms.
So, just one data point, but my experience with it has been 100% positive.
-alyosha
Which is why Python is rapidly becoming my favourite language. I find other people's python code far easier to understand than stuff written in other languages. This despite the fact that I've only been hacking python for a few months, and I've been using C++ and other languages daily for several years.
I feel that there's scope for yet another 'methodology', alongside OO and XP and all that - it might be called 'code as conversation', whereby the quality of a piece of code is judged by how readily it communicates intent to other programmers.
Here endeth the nitpick.
I get paid to develop open source software. Check out my medical imaging library here.
One benefit of working in academia - information sharing has always been a key part of the academic tradition, what with peer reviewed papers and so on, and so open source/free software is a very good philosophical fit. At least that's my opinion - there are others that are more interested in the potential profit to be earned from research endeavours than I am.
Functional languages may not seem to be getting used much at the moment, but the ideas that they present are seeping into a lot of current thought on language design and use.
The latest incarnations of Python seem to be quite heavily influenced by Functional concepts (lambdas and so on), and they are even creeping into C++, despite the fact that people always seem to classify it as Object Oriented. Several of the boost libraries show this kind of approach - there is a lamda library, a 'function' library that lets the programmer pass functions around as if they were objects and so on.
I don't have enough experience with functional languages to say how close these ideas match up with functional theory, but I'm already using them in production code and benefiting from the results. Anyone else out there think that python and c++ would be better classified as 'hybrid' languages than 'OO' ?
This is one of the key strengths of C++. It provides two powerful abstraction mechanisms - runtime abstraction, throught the use of virtual functions, and compile time abstraction, through the use of generics (templates). The programmer can choose which mechanism is appropriate for the problem he is solving.
One big advantage not mentioned yet is that using generics as an abstraction mechanism causes errors in your code to manifest themselves at compile time rather than runtime - i.e. on your desk rather than your client's !
This would take a while to catch on, but I think it's about the only bullet-proof approach to stopping spam. I'd certainly use such a system if it were integrated nicely into my mail client.
I use debuggers every day, and find them indespensible for tracking down obscure bugs. (Like the one I just hit a few minutes ago - why does MSVC barf when calling vector::clear? The debugger stops app execution in _free_base() in free.c. This doesn't happen if I recompile using STLPort instead of the default stl library. ) That said, when I don't use a debugger I'm sure I find myself writing more robust code - I'm more inclined to spend more time on proper exception handling, thinking about my design instead of: write, compile, run, oh it failed on line 2493, fix that line, run again, now it fails at line 2547, fix that ....
which results in code that works under the exact set of circumstances that you test it, but has no guarantee as to what will happen if the parameters change any. (And those pesky users always find those annoying 'special cases').
One way of thinking about MI that I've been finding useful recently is this:
The ISA paradigm sees classes as nouns (e.g. an Image IS A collection of pixels.) I think that classes can also be adjectives - so for example I might have a 'Rotatable' class, so then my Image class IS A (collection of pixels) and IS rotatable
class Image : public std::vector, public Rotatable
{
...
};
In other words, there's more to objects than just a simple way of grouping together related functions. The approach I'm aiming for involves designing quite a large number of fairly minimal classes and plugging them together using MI to get the final behaviour I want. The advantage to this is that each class can be small enough to be robust, generally being only responsible for one task or resource. I admit that I'm not quite there yet, but it seems a promising line of investigation.
I think this is great. I've been thinking for a long time that the hierarchical file system is not necessarily the best way of organising data. This idea definitely merits serious consideration.
Even if it never comes to maturity in its present form, its good to see free software being used as a testing ground for new ideas as well as re-implementing existing concepts.
See my previous comment. A strong enough magnetic field really doesn't care what metal something is made of.
Try going near an MRI machine with change in your pocket. I made that mistake once, and it was tugging hard at the coins from across the room. >1 tesla magnetic fields need to be treated with respect - people can get seriously hurt if anything metallic gets brought into the room - they can get ripped out of your hand or pocket and will fly straight down the central bore where the patient is. I've heard stories of people being killed when someone walked into an MRI room with a pair of scissors in their pocket.
The LISA experiment, which gets mentioned in passing, is really quite audacious - three spaceships orbiting the sun in a clever rotating triangle pattern, 5 million miles apart from each other, and detecting changes in distance between each other to an accuracy of 20 picometers!
In essence, it's just a really, really big version of the Michelson interferometer we all played with in 1st year physics - I remember the thrill back then of realising what tiny changes in distance you could discern with just a couple of mirrors, a lamp and something to measure the recieved intensity.
It's exciting to witness the nascence of an entirely new form of astronomy.
^H means backspace. ('^' signifies the control key.) Try typing something in a dos or a unix terminal and then pressing Control + H
I would claim that _destructors_ are the single biggest advantage C++ has over Java, C#, perl, python and the rest ....)
Absolutely. A function (destructor) that is guaranteed to be called at some point after another function (constructor) has been called, even if an exception is thrown in between, is incredibly useful. While there are a number of powerful resource managment techniques in c++ (see for example the smart pointer classes over at boost, for me the approach of 'Resource Aquisition Is Initialisation' has proven to be very effective in avoiding headaches with with memory leaks (or database handle leaks, or file handle leaks, or