Free software doesn't need to have long term commercial success, because it isn't a business.
But, I agree that deliberately breaking SCO support would be pretty childish. On the other hand, deciding not to expend any resources maintaining compatibility as the compiler evolves doesn't seem so bad...
Computers are equivalent to Turing machines, modulo the bounded memory; they can go far, far beyond our intuitions. The only way to make them intuitive is to dumb them down, i.e. limit what they can do. So be prepared to choose between having your computer dumbed down to a consumer appliance or else having to learn a lot in order to master it.
What the fuck are you talking about? Let's apply this same argument to something where it obviously fails. Say I claim,
"Man, DOS sucks because every application has access to write over any part of memory."
And you answer,
"Dude, computers are turing machines. Turing machines can write anywhere in their tapes. Do you want us to dumb down your computer and limit what it can do by creating process sandboxes with virtual memory? You'll be left with a consumer device."
And I say,
"Not every time you "limit" what a computer can do, do you dumb it down. Abstractions and controls are critical to making a usable and powerful system."
(Well, some of these are annoyances with an OS built around Linux, not Linux itself!)
- Desktop managers, GUIs, and icons designed by terrible artists
- USB does not work right
- Archaic technologies (X, old syscall interface, C, primitive access controls,...)
- Perl
- Constantly upgrading software with buffer overflows
Nonetheless, I use linux all day, every day, at work...
Many optimizations that compilers can do, like inlining, software pipelining, and loop unrolling are often difficult to do by hand, and at best result in assembly code that is a nightmare to maintain. (Before you jump up and tell me that macro assemblers make inlining easy, well, it's not true. They make cut-and-paste easy, but to really do inlining you need to optimize the pasted code in its new context, which means register-allocating the surrounding region with the code there; removing dead branches, etc.) Other optimizations are just so tedious (register allocation) that nobody could bear to do them constantly by hand while writing code. Instead, they resort to macros, calling conventions, and global variables -- so that their code ends up looking like the output of a non-optimizing C compiler. (Just search for a win32 assembly tutorial, you'll see what I mean.)
Assembly does have its advantages, in two ways: Most compilers are optimized for speed, not space. Assembly programs usually come out to be much smaller than C programs (some of this has to do with linker stupidity). For embedded devices where you can count the bytes available on a few thousand hands, writing in assembly is sensible. Second, fine-tuning an inner loop or two in assembly is sometimes necessary to get the best possible performance. But just writing it in assembly will not get you the performance benefit; you also need to hand-optimize it like crazy, and only a few kinds of routines are amenable to this kind of thing. In any case, these are both "small scale" projects.
I'm no fan of C, but writing a "fully fledged OS" (ie, for the PC) in assembly is retarded. It will be impossible to maintain and debug, subject to security holes like crazy, and probably won't be faster than an operating system written in a programming language because it becomes more and more difficult to use clever algorithms when you use lower and lower level methods. Clever algorithms are where the real performance gains are.
It's an interesting discussion, but in the end a game is a game. If I wanted ultra realism, I would just play "real life."
Other popular forms of entertainment, like movies, have similar devices. If a movie has background music, does that diminish its ability to tell a realistic story because where the hell is the music coming from? Or for that matter, does it make the movie less enjoyable when it's less realistic?
My Windows XP EFS keys (hey, if any of you are using encyrpting file system on Windows, make sure that you export the keys and store them somewhere. Because if you can't get windows to boot for some reason, even if you know your password and have access to the hard drive, there's no supported way to decrypt the files without having previously exported the keys.) and PGP key. Small files I'd be really upset to lose, like midi or tablature for a bunch of songs I wrote.
And a whole bunch of MP3s, since my drive is also an MP3 player!
The thing is, anywhere you'd care to use putty, it's probably easier to just download it from the internet, since it's just one file. (Maybe it would be sensible to store some "offline" apps on it, but I don't have any I care for..)
Super Smash-Bros. Melee is one of the best console games I've ever played. It's the only game I bought for GC, actually, which I really only picked up because of the GBA adaptor. It would be a shame to end the series, and perhaps worse to pervert it with a new, worse, designer...
On the contrary, you could show this to them and then ask them about all the broken science in it. It's so dumb even kids should be able to understand.
I checked out the numbers, but GCJ seems to be just barely edged out by Hotspot in most cases. Considering that GCJ is free and allows you to distribute native binaries, that's pretty good.
They don't have figures for memory usage, installation profile, etc., and I bet in those areas GCJ beats Hotspot for end-users. And you can't beat an install with no library dependencies.
Indeed. With sum types you can get rid of the dreaded null pointer -- you have "real" pointer types, and then you have "optional" types like you mention with Found/NotFound. Now, not only does it force a check before using the potentially "null" pointer, but once you check it you know it really points to some object and you don't ever need to check again. It's painfully obvious once you've programmed like that, but somehow people continue to miss out on this feature because, I guess, it was never in C.
Taking it a step further, recursive sum types like in SML can be used to define recursive data types like lists and trees, and then pattern match against them. That's so nice compared to the way you'd do it in Java or C++.
Well, the "work" in question would be the entirety of the inserted stubs. It's difficult (but not impossible) to claim fair use exemption if you copy the whole work. But, like I said, it's unlikely that those stubs are protectable under copyright.
The stuff that Visual C++ generates is probably not copyrightable because it is not very expressive. (Indeed, it is generated by a machine!)
Also, you can use Visual Studio without it generating crap. That is how I always build my projects, because the wizards go wrong too often to be worth it.
The worst missing features in most programming languages that I sometimes have to use:
- lack of sum types. Languages have long offered conjunctions (structs in C, tuples in python). Disjunctions are equally useful. (With it, a function could return one of two possible types. The overuse of 'null' as "the other pointer" in C/C++/Java accounts for a tiny corner of the possibilities here.)
- lack of higher-order, nested functions. You can do so so much with functions once they are first-class in your language. All this stuff about iterators over containers in Java and "I want SQL built into my language so I can say for each employee in query do" is subsumed by map/fold operations and higher order functions, for starters.
- lack of safety. Man, I sure hate tracking down memory corruption bugs, and I sure hate it when there's an exploitable security hole in my or someone else's code because of them.
I already have languages with these features and more, so I don't need recommendations. But if your new sparkling language doesn't have these features... then what are you doing?!?
Why, what are they doing that's illegal?
It's not exactly "insider info" that their lawsuit is shit and their stock as high as it'll ever go...
This is why they hire real writers to do book reviews for, like, the New York Times.
Free software doesn't need to have long term commercial success, because it isn't a business.
But, I agree that deliberately breaking SCO support would be pretty childish. On the other hand, deciding not to expend any resources maintaining compatibility as the compiler evolves doesn't seem so bad...
Don't you think it's worth it to have Arnold be governor, no matter what it messes up??
Computers are equivalent to Turing machines, modulo the bounded memory; they can go far, far beyond our intuitions. The only way to make them intuitive is to dumb them down, i.e. limit what they can do. So be prepared to choose between having your computer dumbed down to a consumer appliance or else having to learn a lot in order to master it.
What the fuck are you talking about? Let's apply this same argument to something where it obviously fails.
Say I claim,
"Man, DOS sucks because every application has access to write over any part of memory."
And you answer,
"Dude, computers are turing machines. Turing machines can write anywhere in their tapes. Do you want us to dumb down your computer and limit what it can do by creating process sandboxes with virtual memory? You'll be left with a consumer device."
And I say,
"Not every time you "limit" what a computer can do, do you dumb it down. Abstractions and controls are critical to making a usable and powerful system."
(Well, some of these are annoyances with an OS built around Linux, not Linux itself!)
- Desktop managers, GUIs, and icons designed by terrible artists
- USB does not work right
- Archaic technologies (X, old syscall interface, C, primitive access controls,
- Perl
- Constantly upgrading software with buffer overflows
Nonetheless, I use linux all day, every day, at work...
Writing stuff in assembly is extremely overrated.
Many optimizations that compilers can do, like inlining, software pipelining, and loop unrolling are often difficult to do by hand, and at best result in assembly code that is a nightmare to maintain. (Before you jump up and tell me that macro assemblers make inlining easy, well, it's not true. They make cut-and-paste easy, but to really do inlining you need to optimize the pasted code in its new context, which means register-allocating the surrounding region with the code there; removing dead branches, etc.) Other optimizations are just so tedious (register allocation) that nobody could bear to do them constantly by hand while writing code. Instead, they resort to macros, calling conventions, and global variables -- so that their code ends up looking like the output of a non-optimizing C compiler. (Just search for a win32 assembly tutorial, you'll see what I mean.)
Assembly does have its advantages, in two ways: Most compilers are optimized for speed, not space. Assembly programs usually come out to be much smaller than C programs (some of this has to do with linker stupidity). For embedded devices where you can count the bytes available on a few thousand hands, writing in assembly is sensible. Second, fine-tuning an inner loop or two in assembly is sometimes necessary to get the best possible performance. But just writing it in assembly will not get you the performance benefit; you also need to hand-optimize it like crazy, and only a few kinds of routines are amenable to this kind of thing. In any case, these are both "small scale" projects.
I'm no fan of C, but writing a "fully fledged OS" (ie, for the PC) in assembly is retarded. It will be impossible to maintain and debug, subject to security holes like crazy, and probably won't be faster than an operating system written in a programming language because it becomes more and more difficult to use clever algorithms when you use lower and lower level methods. Clever algorithms are where the real performance gains are.
Notice it's called X-Game-Station, as in X box, GameCube, Playstation. They can get sued by all three!
Now there's a great crossover -- pocket knife/usb drive. I'd buy one.
It's an interesting discussion, but in the end a game is a game. If I wanted ultra realism, I would just play "real life."
Other popular forms of entertainment, like movies, have similar devices. If a movie has background music, does that diminish its ability to tell a realistic story because where the hell is the music coming from? Or for that matter, does it make the movie less enjoyable when it's less realistic?
My Windows XP EFS keys (hey, if any of you are using encyrpting file system on Windows, make sure that you export the keys and store them somewhere. Because if you can't get windows to boot for some reason, even if you know your password and have access to the hard drive, there's no supported way to decrypt the files without having previously exported the keys.)
and PGP key.
Small files I'd be really upset to lose, like midi or tablature for a bunch of songs I wrote.
And a whole bunch of MP3s, since my drive is also an MP3 player!
The thing is, anywhere you'd care to use putty, it's probably easier to just download it from the internet, since it's just one file. (Maybe it would be sensible to store some "offline" apps on it, but I don't have any I care for..)
Super Smash-Bros. Melee is one of the best console games I've ever played. It's the only game I bought for GC, actually, which I really only picked up because of the GBA adaptor. It would be a shame to end the series, and perhaps worse to pervert it with a new, worse, designer...
On the contrary, you could show this to them and then ask them about all the broken science in it. It's so dumb even kids should be able to understand.
You get a free Gameboy Player with the Gamecube now, which lets you play all the GBA/GBC/GB titles on your TV.
Haha. I used to have a homemade poster on my wall when I was like 9 that said, "Genesis sux... but Nintendon't"
CafePress shirts suck, though.
It wouldn't do justice to this ripe-for-screenprinting design.
Yeah, you could try shopping at any place but thinkgeek.
I get pretty decent DSL over my 4-connector RJ-11 telephone line.
Dan Sandler's is my favorite of those. Then again, I've got slashdot in 'reduced green mode'...
I checked out the numbers, but GCJ seems to be just barely edged out by Hotspot in most cases. Considering that GCJ is free and allows you to distribute native binaries, that's pretty good.
They don't have figures for memory usage, installation profile, etc., and I bet in those areas GCJ beats Hotspot for end-users. And you can't beat an install with no library dependencies.
Indeed. With sum types you can get rid of the dreaded null pointer -- you have "real" pointer types, and then you have "optional" types like you mention with Found/NotFound. Now, not only does it force a check before using the potentially "null" pointer, but once you check it you know it really points to some object and you don't ever need to check again. It's painfully obvious once you've programmed like that, but somehow people continue to miss out on this feature because, I guess, it was never in C.
Taking it a step further, recursive sum types like in SML can be used to define recursive data types like lists and trees, and then pattern match against them. That's so nice compared to the way you'd do it in Java or C++.
Well, the "work" in question would be the entirety of the inserted stubs. It's difficult (but not impossible) to claim fair use exemption if you copy the whole work. But, like I said, it's unlikely that those stubs are protectable under copyright.
Hey now... engrams? I thought those were under the exclusive purview of the scientologists...
The stuff that Visual C++ generates is probably not copyrightable because it is not very expressive. (Indeed, it is generated by a machine!)
Also, you can use Visual Studio without it generating crap. That is how I always build my projects, because the wizards go wrong too often to be worth it.
The worst missing features in most programming languages that I sometimes have to use:
- lack of sum types. Languages have long offered conjunctions (structs in C, tuples in python). Disjunctions are equally useful. (With it, a function could return one of two possible types. The overuse of 'null' as "the other pointer" in C/C++/Java accounts for a tiny corner of the possibilities here.)
- lack of higher-order, nested functions. You can do so so much with functions once they are first-class in your language. All this stuff about iterators over containers in Java and "I want SQL built into my language so I can say for each employee in query do" is subsumed by map/fold operations and higher order functions, for starters.
- lack of safety. Man, I sure hate tracking down memory corruption bugs, and I sure hate it when there's an exploitable security hole in my or someone else's code because of them.
I already have languages with these features and more, so I don't need recommendations. But if your new sparkling language doesn't have these features... then what are you doing?!?