Well, combine it! Whenever you install a program which comes as binary, have it automatically decompiled, and then recompiled with machine-specific optimization!
Very "nice" are also those dialog boxes where it says "Such and such error occured", and to close the window you have to click "Ok". No, I usually don't think it's Ok that this error occured, I just have to live with it. So why doesn't this dialog have a "Close" button instead? Because that's what I really want to do: close the error dialog (which actually is an error monolog in most cases anyway).
If this is something you do on a regular basis, it may be a good idea to just make an alias expanding to rm -f *~, say cleanup. Then whenever you want to remove your backup files, you just type cleanup and are done. No dangerous tilde to type.
You have that backwards. Windows deletes slower so that if someone deletes your C drive, you've got a better chance to stop him before too many important files are gone. You see, Windows is again shown to be more secure than Linux:-)
Well, I'm not sure. Maybe "overclocking" will just become "overvoltageing", i.e. increasing the core voltage in order to make the chip faster (and since higher voltage inevitably means more heat, you still can use your ridiculous liquid nitrogen cooling systems).
Look at my super-fast text editor! Yes, it doesn't have many features; indeed what it does is to show you the old version, and then lets you type in the new one, so it also misses the features found usually in text editors like only changing part of the text without touching the rest at all (which would save you from typing the whole file again if you just want to change one character), but it can be proven that this is not strictly necessary, but you can do all the same with the interface "show old version, type in new one", so that's really all you need. And look, how super-optimized the editor is: Most of the time it just waits for the disk to deliver data, for the terminal to write it on your screen, for you to type new text, or for the disk to write the data. The time the editor itself runs is negligible!
Well, actually there's currently only a prototype written as shell script; given the speed the editor already shows at this level, think about the speed the final assembler version will have!
(Caveat: Make sure your terminal has a large enough scrollback buffer for your files!)
AFAIK MUL takes two 32-bit values and produces a 64-bit value, which is stored in edx/eax. Therefore you have to do the edx multiplication first. Other than that, this sequence should work.
Well, you misunderstood: Those puzzles are terrorist's weapons. They bind your mental energy to solving the puzzle, so that it is not any more available to solve more important problems. It's a tool to destroy the free market by removing the mental power from it.
Well, one problem is that it has to work with web browsers. Not just IE, not just Mozilla/Firefox, but every relevant browser out there. Which automatically limits the features you can offer (there's no standard WYSIWYG edit box in the HTML standard, nor is there in all relevant browsers).
Maybe at some time all relevant browsers will contain WYSIWYG edit boxes for XML/XHTML, which are enabled in a standard way (say, by a special standardized style option for edit boxes; older browsers would then simply provide the XML/XHTML source code in the edit box). Then you can just use plain XML or XHTML for your Wiki and have your users use the WYSIWYG edit box and forget all those special syntax rules. But this doesn't help current wikis.
Nothing will come out of it, for the simple reason that C++ does not belong in any kernel. In a kernel, all the code needs to be transparent, and you definitely don't want to hide implementation and the usual abstractions.
The simple reason for that is that otherwise the kernel would be unpredictable. Let's say the error logging function used the string class (which likes to allocate memory behind your back). If the memory allocation function fails and tries to print an error message... you got yourself a kernel crash. This is why the kernel is significantly more difficult to program than, say, a word processor.
Obviously, C does not belong in any kernel. In a kernel, all the code needs to be transparent, and you definitely don't want to hide implementation and the usual abstractions.
The simple reason for that is that otherwise the kernel would be unpredictable. Let's say the error logging function used the printf function (which likes to allocate memory behind your back). If the memory allocation function fails and tries to print an error message... you got yourself a kernel crash. This is why the kernel is significantly more difficult to program than, say, a word processor.
Because C++ makes your program less deterministic.
C++ programs are as deterministic as any other computer program. Unless you have undefined behaviour (line uninitialized variables or dereferencing dead pointers), a C++ program always produces the same output for the same input.
By looking at a piece of code, you can't say what happens where if you use C++.
Yes, you can. Of course you must know the definitions of the entities used in your code, but that is true in C as well. Example:
foo (*bar) (baz);
Now, does this line
define bar to be a pointer to function taking type baz and returning type foo, or
call function foo on the value you get by dereferencing pointer bar, and then call the function to which the pointer to function returned by foo points on the value baz, or maybe
expand the macro foo (*bar), which results in a construct which followed by (baz); gives some valid C code which could do just anything?
Note that even without macros, there are already two possibilities. Now, C++ adds mode possibilities, but that's only a quantitative change, not a qualitative one.
During every single instruction, an (unexpected?) exception might take place,
Nonsense. Exceptions can only take place at well defined places (the only way to get an exception is to write "throw xy", either directly or through called code). And if that exception is unexpected, then either the used library is buggy, or badly documented, or you just didn't read the documentation.
and every single instruction might be changed from what the author has intended (and tested) when somebody changed the definitions of what those methods were inherited from.
That's wrong, too. There is no way you can change the meaning of e.g. int i=3+4; in C++. Of course there are things where you can change the meaning, but that's no different to the following statement about C: "every function call might be changed from what the author has intended (and tested) when somebody changed the definitions of what that function calls."
Clearly if anything you inherit from changes semantics, then this is a break of interface, just as changing semantics of a function is a break of interface. You shouldn't be surprised that if you use a library which does not conform to the specification your program expects then your program breaks. That's independent from language, coding style, programming paradigm, it's even independent from programming (e.g. if you think "moron" is something positive, then telling someone a moron will surely not have the effect you expected).
Non-optimizing compilers can be very fast. Basically you just have to parse it and output pre-defined asm for each bit. According to this page, Turbo C 2.01 (a 1989 product) compiles over 16,000 lines per minute. Given that this number is also on the advertisement shown in that picture, which is actually from that time, it's 16,000 lines on the hardware of that time (i.e. 386). Now IIRC the 386 had at most 33MHz, so from the clock speed difference alone, on an 2.4GHz computer it should compile about 1.16 million lines per second; assuming a factor 4 in efficiency (i.e. modern processors can do 4 times as much per clock cycle as an 386), it should be possible to compile the same amount in 15 seconds. Now according to this page the Linux kernel has 1,526,722 lines of code, so if either my efficiency factor of 4 was too low, or TCC can compile about 1.5 times as fast as Turbo C 2.0 could (or maybe a combination of both), it's clearly not that far-fetched that a linux kernel could be compiled in 15 seconds.
Well, combine it! Whenever you install a program which comes as binary, have it automatically decompiled, and then recompiled with machine-specific optimization!
A man who was dressed like Kerry killed someone. Now the government examines if the Democrats should be forbidden.
Very "nice" are also those dialog boxes where it says "Such and such error occured", and to close the window you have to click "Ok". No, I usually don't think it's Ok that this error occured, I just have to live with it. So why doesn't this dialog have a "Close" button instead? Because that's what I really want to do: close the error dialog (which actually is an error monolog in most cases anyway).
I just tried it, and it said nothing. Well, if that means Microsoft is nothing, then that's not really scary :-)
Of course, sometimes error messages contain unexpected insight, e.g. on Linux:
If this is something you do on a regular basis, it may be a good idea to just make an alias expanding to rm -f *~, say cleanup. Then whenever you want to remove your backup files, you just type cleanup and are done. No dangerous tilde to type.
You have that backwards. Windows deletes slower so that if someone deletes your C drive, you've got a better chance to stop him before too many important files are gone. You see, Windows is again shown to be more secure than Linux :-)
Doesn't FORMAT have an option to make it irreversible? :-))
(Can't check, Linux doesn't have a manpage for FORMAT
Well, I'm not sure. Maybe "overclocking" will just become "overvoltageing", i.e. increasing the core voltage in order to make the chip faster (and since higher voltage inevitably means more heat, you still can use your ridiculous liquid nitrogen cooling systems).
Well, actually there's currently only a prototype written as shell script; given the speed the editor already shows at this level, think about the speed the final assembler version will have!
(Caveat: Make sure your terminal has a large enough scrollback buffer for your files!)
Here's the prototype of that editor:SCNR
Quiche Eater!
Real programmers can write FORTRAN in every language.
So PHP doesn't stand for Program Handcoded in PPC-assembler?
AFAIK MUL takes two 32-bit values and produces a 64-bit value, which is stored in edx/eax. Therefore you have to do the edx multiplication first. Other than that, this sequence should work.
Well, you misunderstood: Those puzzles are terrorist's weapons. They bind your mental energy to solving the puzzle, so that it is not any more available to solve more important problems. It's a tool to destroy the free market by removing the mental power from it.
Well, one problem is that it has to work with web browsers. Not just IE, not just Mozilla/Firefox, but every relevant browser out there. Which automatically limits the features you can offer (there's no standard WYSIWYG edit box in the HTML standard, nor is there in all relevant browsers).
Maybe at some time all relevant browsers will contain WYSIWYG edit boxes for XML/XHTML, which are enabled in a standard way (say, by a special standardized style option for edit boxes; older browsers would then simply provide the XML/XHTML source code in the edit box). Then you can just use plain XML or XHTML for your Wiki and have your users use the WYSIWYG edit box and forget all those special syntax rules. But this doesn't help current wikis.
MediaWiki actually also supports RDF-Metadata, it's just not enabled by default.
Well, you made a mistake. Don't send letters to the congressmen, send dollars.
Well, of course X must go to the kernel first. And wouldn't it be nice to have an XMMS kernel module?
Obviously, C does not belong in any kernel. In a kernel, all the code needs to be transparent, and you definitely don't want to hide implementation and the usual abstractions.
The simple reason for that is that otherwise the kernel would be unpredictable. Let's say the error logging function used the printf function (which likes to allocate memory behind your back). If the memory allocation function fails and tries to print an error message... you got yourself a kernel crash. This is why the kernel is significantly more difficult to program than, say, a word processor.
I hope you get the point.
- define bar to be a pointer to function taking type baz and returning type foo, or
- call function foo on the value you get by dereferencing pointer bar, and then call the function to which the pointer to function returned by foo points on the value baz, or maybe
- expand the macro foo (*bar), which results in a construct which followed by (baz); gives some valid C code which could do just anything?
Note that even without macros, there are already two possibilities. Now, C++ adds mode possibilities, but that's only a quantitative change, not a qualitative one. Nonsense. Exceptions can only take place at well defined places (the only way to get an exception is to write "throw xy", either directly or through called code). And if that exception is unexpected, then either the used library is buggy, or badly documented, or you just didn't read the documentation.That's wrong, too. There is no way you can change the meaning of e.g. int i=3+4; in C++. Of course there are things where you can change the meaning, but that's no different to the following statement about C: "every function call might be changed from what the author has intended (and tested) when somebody changed the definitions of what that function calls."
Clearly if anything you inherit from changes semantics, then this is a break of interface, just as changing semantics of a function is a break of interface. You shouldn't be surprised that if you use a library which does not conform to the specification your program expects then your program breaks. That's independent from language, coding style, programming paradigm, it's even independent from programming (e.g. if you think "moron" is something positive, then telling someone a moron will surely not have the effect you expected).
Non-optimizing compilers can be very fast. Basically you just have to parse it and output pre-defined asm for each bit. According to this page, Turbo C 2.01 (a 1989 product) compiles over 16,000 lines per minute. Given that this number is also on the advertisement shown in that picture, which is actually from that time, it's 16,000 lines on the hardware of that time (i.e. 386). Now IIRC the 386 had at most 33MHz, so from the clock speed difference alone, on an 2.4GHz computer it should compile about 1.16 million lines per second; assuming a factor 4 in efficiency (i.e. modern processors can do 4 times as much per clock cycle as an 386), it should be possible to compile the same amount in 15 seconds. Now according to this page the Linux kernel has 1,526,722 lines of code, so if either my efficiency factor of 4 was too low, or TCC can compile about 1.5 times as fast as Turbo C 2.0 could (or maybe a combination of both), it's clearly not that far-fetched that a linux kernel could be compiled in 15 seconds.
Well, that's still not the ultimate. The ultimate would be to compile the program while you run it, i.e. a JIT C compiler.
Well, maybe a BIOS-integrated Emacs automatically launches and allows you to edit the code ...
Well, it would get really interesting if China sued for things on US servers which are not allowed in China ...
Shouldn't that be GRMed? (Genetical Rights Management)
After all, a cat isn't digital.