The build process is already needlessly complicated. One more preprocessor won't hurt.
2) pollutes the global namespace terribly (emit, signals, etc.)
"If you're worried about namespace pollution, you can disable this macro by adding the following line to your.pro file:
CONFIG += no_keywords"
3) slows rebuild as MOC has to inspect the code and regenerate MOC files if needed
gcc is orders of magnitude slower than moc.
4) cannot understand normal and common C++ code (inner class, templates) 6) doesn't know const char * vs. char const * are the same 7) same goes for any other compatible but not strictly-exact prototype
Use the subset that moc understands. Problem solved.
5) causes binding errors that are (maybe not) discovered at runtime
That's a valid point, but what do you recommend to fix it? These errors disappeared when I switched to Qt Creator. There's autocomplete for signals and slots there.
8) adding one more tool/compiler to code generation (to make, compiler, resource compilers, linker..)
Yes, one more. The toolchain is already long, it doesn't matter. Yacc and bison do the same, yet nobody complains.
9) complicates porting to emerging or not supported platforms as you have to port MOC compiler first
Other than "make moc"? Could you show me one instance where moc interfered with porting? If there's a platform where parsing text files can cause problems, why bother?
10) MOC 'invents' its own non-standard non-ISO C++ syntax
That's exactly why I like it: Qt C++ basically looks like a scripting language. And you're not forced to use it, anyway.
11) fragments drive as every MOC dependent file has to be frequently overwritten
You clearly made this one up to make your list longer. How many temporary files do you have in a standard make build?
12) is redundant as Boost already and clearly shows
Qt predates Boost signals. Port both Qt and my applications to Boost and we'll talk.
In addition to providing the signals and slots mechanism for communication between objects (the main reason for introducing the system), the meta-object code provides the following additional features: QObject::metaObject() returns the associated meta-object for the class. QMetaObject::className() returns the class name as a string at run-time, without requiring native run-time type information (RTTI) support through the C++ compiler. QObject::inherits() function returns whether an object is an instance of a class that inherits a specified class within the QObject inheritance tree. QObject::tr() and QObject::trUtf8() translate strings for internationalization. QObject::setProperty() and QObject::property() dynamically set and get properties by name. QMetaObject::newInstance() constructs a new instance of the class.
It is also possible to perform dynamic casts using qobject_cast() on QObject classes. The qobject_cast() function behaves similarly to the standard C++ dynamic_cast(), with the advantages that it doesn't require RTTI support and it works across dynamic library boundaries.
Dude, they're bindings from one third-party platform to another. How is it leeching to suggest that a license fully compatible with both of these is a good thing?
Now drop the MOC from QT and everybody might consider your platform.
Eh? Moc is crucial for tiny little features like signals and slots (and through that, the event system, and basically everything you want to do with an event-based application). It's the main selling point for Qt. Dropping it would require a complete rewrite, with perhaps QString being the only class that doesn't use it.
Besides, "their platform" already knows about it, and it's completely transparent unless you write your Makefiles by hand.
I simply think it's unfair to make Riverbank look like the bad guys and Nokia the saviours.
Nobody wants to make Riverbank look bad. However, Nokia is doing something bigger now: they're gathering all the little pieces you previously needed to find yourself (MinGW, Qt, an IDE, and now PyQT), bundling them up, and releasing them as one package. Open Source GUI programming on Windows has literally never been easier.
My next phone is going to be a Nokia. They deserve it.
Not if you want to write commercial software on top of it, which is what Nokia wants to enable. Just as they did with releasing Qt under the LGPL.
It also helps integration if you can get both from the same vendor, and for a project like this, integration is the goal. From now on, you can expect simultaneous and/or bundled releases.
You seem to think I'm talking about the graphical interface as a whole, but that's not the case. I'm talking about the task bar (as in, a convenient way to always see all your running programs and switch back and forth between them with a single click of the mouse). I've never used a Mac, and I'm not planning to start anytime soon, but from what I found, they didn't have anything like that before Win95, and afterwards they focused on starting new programs with a single click, not switch to running ones or even show them.
Could you please tell me from each of the screenshots, if there is a text editor somewhere in the background with a file I want to edit? I wouldn't want to open the same file twice.
15 years is not that much. We already had Pentiums in 1994. The article is about a time when CPU cycles were more expensive than programmer time and text data took a lot of space.
The UI itself hasn't got significantly better since Windows 95. (Hands up if you would actually consider using a graphical interface without a task bar.)
Ah - the "If you want to outrun a bear, the key is not to outrun the bear - it's to outrun the person behind you" principle.
If you gain enough speed, you will also outrun the bear. The fact that others don't is not your concern in this context, and there's nothing you can do about it anyway.
The world is not black and white. And the Nuremberg trials technically enforced laws that were made up just for this purpose, not to mention they imposed it on a (formerly) independent country while preaching freedom. Julius Streicher was sentenced to death for publishing a newspaper.
Back on topic: why does the site only use one third of the width of my screen?
Now you can run Windows in a VM when people come over to avoid the shame of admitting you run Gentoo
What shame? Absolutely nothing can establish your Alpha Geek status faster than saying "Umm, I don't have a graphical desktop right now, it's still compiling", and firing up lynx to check your email.
The website has audio, so while you are instructed not to download music (hey, spoken word is a type of art/music), you are in fact downloading music.
Every stream of bits can be interpreted as audio, so technically, if you're using the internet, you're "downloading music". Not to mention how many times your computer copies it around.
They walk around trying to get money by repairing dents in cars. They leave the cans of paint, and bondo all over the sidewalk where they worked on the car. Its a belief they are the ones who dent cars in parking lots and then come by offering to fix the damage. The other great part is how the women will load up a shopping cart at the local supermarket, then walk around the store and beg for money to pay for it. If you own a store the kids come in trying to buy something for pennies on the dollar. I caught one trying to steal while another distracted me with his constant fast talking bargaining. And when they come into your shop its a posse of about 6-8 to distract you while they try to steal.
But as below says, they make error handling an easier task as well as some oddly structured loops for which try/catch logic doesn't get you all the way
1) complicates the build process
The build process is already needlessly complicated. One more preprocessor won't hurt.
2) pollutes the global namespace terribly (emit, signals, etc.)
"If you're worried about namespace pollution, you can disable this macro by adding the following line to your .pro file:
CONFIG += no_keywords"
3) slows rebuild as MOC has to inspect the code and regenerate MOC files if needed
gcc is orders of magnitude slower than moc.
4) cannot understand normal and common C++ code (inner class, templates)
6) doesn't know const char * vs. char const * are the same
7) same goes for any other compatible but not strictly-exact prototype
Use the subset that moc understands. Problem solved.
5) causes binding errors that are (maybe not) discovered at runtime
That's a valid point, but what do you recommend to fix it? These errors disappeared when I switched to Qt Creator. There's autocomplete for signals and slots there.
8) adding one more tool/compiler to code generation (to make, compiler, resource compilers, linker..)
Yes, one more. The toolchain is already long, it doesn't matter. Yacc and bison do the same, yet nobody complains.
9) complicates porting to emerging or not supported platforms as you have to port MOC compiler first
Other than "make moc"? Could you show me one instance where moc interfered with porting? If there's a platform where parsing text files can cause problems, why bother?
10) MOC 'invents' its own non-standard non-ISO C++ syntax
That's exactly why I like it: Qt C++ basically looks like a scripting language. And you're not forced to use it, anyway.
11) fragments drive as every MOC dependent file has to be frequently overwritten
You clearly made this one up to make your list longer. How many temporary files do you have in a standard make build?
12) is redundant as Boost already and clearly shows
Qt predates Boost signals. Port both Qt and my applications to Boost and we'll talk.
In addition to providing the signals and slots mechanism for communication between objects (the main reason for introducing the system), the meta-object code provides the following additional features:
QObject::metaObject() returns the associated meta-object for the class.
QMetaObject::className() returns the class name as a string at run-time, without requiring native run-time type information (RTTI) support through the C++ compiler.
QObject::inherits() function returns whether an object is an instance of a class that inherits a specified class within the QObject inheritance tree.
QObject::tr() and QObject::trUtf8() translate strings for internationalization.
QObject::setProperty() and QObject::property() dynamically set and get properties by name.
QMetaObject::newInstance() constructs a new instance of the class.
It is also possible to perform dynamic casts using qobject_cast() on QObject classes. The qobject_cast() function behaves similarly to the standard C++ dynamic_cast(), with the advantages that it doesn't require RTTI support and it works across dynamic library boundaries.
You're just being a freeloading leech right now.
Dude, they're bindings from one third-party platform to another. How is it leeching to suggest that a license fully compatible with both of these is a good thing?
Now drop the MOC from QT and everybody might consider your platform.
Eh? Moc is crucial for tiny little features like signals and slots (and through that, the event system, and basically everything you want to do with an event-based application). It's the main selling point for Qt. Dropping it would require a complete rewrite, with perhaps QString being the only class that doesn't use it.
Besides, "their platform" already knows about it, and it's completely transparent unless you write your Makefiles by hand.
I simply think it's unfair to make Riverbank look like the bad guys and Nokia the saviours.
Nobody wants to make Riverbank look bad. However, Nokia is doing something bigger now: they're gathering all the little pieces you previously needed to find yourself (MinGW, Qt, an IDE, and now PyQT), bundling them up, and releasing them as one package. Open Source GUI programming on Windows has literally never been easier.
My next phone is going to be a Nokia. They deserve it.
Or isn't the GPL considered open anymore?
Not if you want to write commercial software on top of it, which is what Nokia wants to enable. Just as they did with releasing Qt under the LGPL.
It also helps integration if you can get both from the same vendor, and for a project like this, integration is the goal. From now on, you can expect simultaneous and/or bundled releases.
I've met my share of code with the warning "There be dragons!".
The word "fuck" in the comments is a much better metric. If it's more than one for the same function, it's time to pay attention.
There are also cases where this just isn't true. See malloc.
Are you suggesting the population of /. is maturing?
Have you seen a RIAA article lately?
I hope not, this slashdot screw microsoft meeting has only just started.
You must be new here.
instead of forcing them to play silly mind games.
That's why I like Joel's approach.
Windows 95 == Mac 85!
You seem to think I'm talking about the graphical interface as a whole, but that's not the case. I'm talking about the task bar (as in, a convenient way to always see all your running programs and switch back and forth between them with a single click of the mouse). I've never used a Mac, and I'm not planning to start anytime soon, but from what I found, they didn't have anything like that before Win95, and afterwards they focused on starting new programs with a single click, not switch to running ones or even show them.
Could you please tell me from each of the screenshots, if there is a text editor somewhere in the background with a file I want to edit? I wouldn't want to open the same file twice.
Also, platform-independent network protocols are not really high on their feature list.
15 years is not that much. We already had Pentiums in 1994. The article is about a time when CPU cycles were more expensive than programmer time and text data took a lot of space.
The UI itself hasn't got significantly better since Windows 95. (Hands up if you would actually consider using a graphical interface without a task bar.)
The Secret Service actually came down and collected both the letter and the CD. They are taking this seriously.
Proving once again that debt institutions have a priority over everything else. Except maybe oil companies.
You have the option to find a road and get in your car between bear attacks.
Ah - the "If you want to outrun a bear, the key is not to outrun the bear - it's to outrun the person behind you" principle.
If you gain enough speed, you will also outrun the bear. The fact that others don't is not your concern in this context, and there's nothing you can do about it anyway.
As they say, locks are only good for honest people.
The main reason you want a strong lock is not because they're unbreakable, but because your neighbor should be the easier target.
He must requalify every year, fwiw.
What the hell? Are they checking if he grew back his legs or something? Perhaps the timeline changed and now he hadn't gone to war?
Such comparisons diminish the horrors of Nazism
The world is not black and white. And the Nuremberg trials technically enforced laws that were made up just for this purpose, not to mention they imposed it on a (formerly) independent country while preaching freedom. Julius Streicher was sentenced to death for publishing a newspaper.
Back on topic: why does the site only use one third of the width of my screen?
Real geeks decrypt their mail by hand.
Now you can run Windows in a VM when people come over to avoid the shame of admitting you run Gentoo
What shame? Absolutely nothing can establish your Alpha Geek status faster than saying "Umm, I don't have a graphical desktop right now, it's still compiling", and firing up lynx to check your email.
The website has audio, so while you are instructed not to download music (hey, spoken word is a type of art/music), you are in fact downloading music.
Every stream of bits can be interpreted as audio, so technically, if you're using the internet, you're "downloading music". Not to mention how many times your computer copies it around.
Every single one of you is a filthy thief.
They walk around trying to get money by repairing dents in cars. They leave the cans of paint, and bondo all over the sidewalk where they worked on the car. Its a belief they are the ones who dent cars in parking lots and then come by offering to fix the damage. The other great part is how the women will load up a shopping cart at the local supermarket, then walk around the store and beg for money to pay for it. If you own a store the kids come in trying to buy something for pennies on the dollar. I caught one trying to steal while another distracted me with his constant fast talking bargaining. And when they come into your shop its a posse of about 6-8 to distract you while they try to steal.
Are you sure they didn't come from Hungary?
But as below says, they make error handling an easier task as well as some oddly structured loops for which try/catch logic doesn't get you all the way
Ugh. Magic invisible gotos FTW!