That makes no sense. "Facts" in science are just well-supported, well-established theories. Creationists like to bitch about how science can't give you truth, and they are right about that. What they don't understand, however, is that its pretty much logically impossible for humans to get absolute truth, which is by now a pretty well-established metaphysical principle.
Are you honestly suggesting you could create a tower reaching to heaven? Or that heaven even exists in a plane of existence that is perceptible to men? That's just plain blasphemous, if you ask me, and a dimunition of God's power.
Why is it, therefore, here at/. there is such open hatred for Judeo-Christian beliefs when just about anything else goes? You won't find a lot of love here for child abusers, murderers, rapists, the in general ignorant or the malicious. Young earth creationists fall into one of the latter two categories, depending on whether or not they are evangelical.
We have reached a point in our social evolution where reason tempered by emperical verficiation is the established measure of truth. This might not remain the case indefinitely, but for now, that's how it is. It's the same as when blind, unthinking faith was the measure of truth, in the past. No arguments for young-earth creationism (and I've heard most of them), hold water, especially in face of the overwhelming evidence for evolutionary change at the biological level. Organisms are geared for evolution, and it shows in the very structure of their biology. Thus, suffice it to say that by our standards of truth, your beliefs (not Judeo-Christianity in general, young-earth creationism specifically), don't hold water, and we consider ourselves justified in persecuting you.
For god's sake, even the Pope accepts the big-band and evolution! John Paul II deserves a special place in heaven for trying to remove the face-value ridiculous aspects of Christianity and focusing on the parts of it that actually matter!
Before you get into an intellectual moral outrage: remember, they laughed at Einstein, but they laughed at Bozo the clown too. Or, to quote Carl Sagan: "Extraordinary claims require extraordinary evidence!"
Engineers are perhaps the most backwards of the all the types of educated professionals. Its amazing how closely they are tied to history, unable to move past its confines except in incremental, painfully slow steps.
Because there aren't still people around that think the Mayan or Aztec god's actually not only exist, but give enough of a flying fuck about human beings to tell them to put animals in a big boat.
"Windows environment subsystem" isn't a strange buzzword. It was popular in the 1980s-1990s to design operating systems that were compatible with multiple interfaces. An OS would run multiple "personalities," usually as different servers on top of a microkernel. Windows NT does this too, but because Microsoft sucks and never uses accepted terminology for naming features, they called their personalities "environment subsystems." NT has a Win32 environment subsystem, a POSIX environment subsystem, and an OS/2 (console) environment subsystem. My guess is that SpecOps simply filched this terminology for their product.
Had it occurred to you that maybe he meant that Japan used the metric system, and thus the engineers defaulted to that for the height, and only used inches for the width because that's the standard name for it? I bet they call 3.5" floppies 3.5" floppies in Japan too!
There is something called ethics. It is unethical to attack someone unless there is a direct threat to yourself. I consider myself better off dead than alive without morality.
That's all just the cost of making a better product. That doesn't present a barrier to entry. In the economic sense, a barrier to entry is something unrelated to the product itself. For example, if a phone company owns all the phone lines in a country, there is a huge barrier to entry. If most software runs only on Windows, that's a huge barrier to entry. Thus, potential competitors are prevented from entering the market, even if they have a better product.
Google is hardly a monopoly. There are almost no barriers to entry in their market. There is lots of healthy competition (Altavista, Yahoo, AOL, MSN). I repeat: there are almost no barriers to entry in their market.
The case for Microsoft is 180-degrees in the opposite direction.
Yep. You should check out the new generation of software-defined radios. "Embedded" in this case means multiple G4s, an embedded FPGA, and hundreds of megs of RAM.
I never said that mark & compact was a good GC. A naive mark & compact can have very bad performance. However, mark & compact can be really simple to implement, and still handle circuler references. The comment was designed to counter the OP's assertion that the handling of circular references necessitates that the memory allocator be complex.
Don't compare GC to training wheels. Manual memory management makes some very advanced programming techniques nearly impossible. No sane programmer would want to manually manage the memory of a closure or continuation!
And there are a number of publically available GCs that are very good. Intel's ORP has a very advanced garbage collector. OCaml has a very good incremental generational collector. The MPS is a very advanced memory manager, with an incremental generational GC among other things.
Allocation happens at a known point in a GC too. I assume, then, that you mean free(). Now, in a GC'ed application, you can always disable GC and then call the GC at known safe-points. Say you're writing a video application. Basically, you've got a loop that displays a frame just as it is needed, and waits the rest of the time. All you have to do is call the GC during that wait period, so the GC's are quick and regular. As long as you make sure not to generate too much garbage while rendering the frame (doing lots of memory allocation in a time-critical piece of code is a bad idea anyway), you'll be fine. For most soft-real-time uses, a good GC works pretty well. Especially if you take advantage of more advanced GCs that allow you to mix various allocation techniques (manual pool, automatic gc, etc) in the same program.
On a related note. There are languages other than Java that use GC's. Dylan comes to mind. Dylan-Win32 apps are indistinguishable from C/C++ Win32 apps when it comes to performance. The GC's pause times are so short you just don't notice them. I hear OCaml's GC is extremely good as well.
My point was that to avoid the problem of circular references, the garbage collector does have to be more sophisticated No it doesn't. Handling of circuler references falls naturally out of most GC algorithms. One of the simplest possible memory algorithms is the mark & compact GC, which handles circuler references naturally.
Pause times below 1/10th of a second? Hmm, how much below? TV-quality video is 24 frames per second, so a one-tenth second pause means dropping two or three frames. You disable the GC in those cases. A good GC will give you the option to manually manage memory in certain cases (say, through a pool allocator), so in any time-sensitive paths, you can disable the GC and rely on those other options. There are also real-time GC's that have absolutely bounded pause times.
But garbage collection can happen at any time, and cause a pause at any point in my program -- even when I'm needing to re-fill under-run buffers or read volatile memory or make time-critical choices. You do realize that you have this issue with any modern OS? A malloc() can take tens of thousands of clock-cycles if it decides to mmap() to get more backing memory, and the kernel decides to block the app.
Malloc is still ridiculously expensive compared compared to what a generational GC can do. A malloc is dozens to hundreds of instructions, while in many cases (eg: when you're following the typical functional-language allocation patterns), a generational GC can alloc in just a few instructions. And while the GC phase itself is hardly speedy, the amortized cost of the GC is much lower than the non-amortized cost of doing all those free()'s individually.
The G5 vs Opteron comparison is about right, with the G5 winning out on heavily vector-oriented code. The G4 vs P-M comparison is a bit generous --- the P-M has a much faster memory bus, so you want to dock some points from the G4.
A G4 is about as fast as a PIII at the same clock-speed. It should be a bit slower than the Pentium M at the same clock-speed, because the G4 is limited by a really slow SDR memory bus. a 1.6GHz P-M is comparable to a 2.2 - 2.4GHz P4. So the G4 1.5GHz should be comparable to about a 2.0 - 2.0 GHz P4. That's probably being a bit generous, but you get the idea.
Pango is also phenomenally slow. At least, that's what the GTK+ folks always claim.
Re:Yeah, right positioning against Java...
on
A Taste of Qt 4
·
· Score: 1
You do realize that there isn't anything in Java that is actually new, do you not?
Re:New and Elegant "foreach" ?
on
A Taste of Qt 4
·
· Score: 1
Heh. If 'foreach' botherse you, wait till you check out Xen. Its an attempt to hard-code XML and SQL syntax helpers into C#. It is as bad as it sounds...
Re:New and Elegant "foreach" ?
on
A Taste of Qt 4
·
· Score: 1
Well, sexpr's make Lisp macros nearly omnipotent, so you're right in a way. But, most of what is usually done by Lisp macros is doable in an infix language too. Check out Dylan's macro support, which is powerful enough that much of the language's syntax is defined by macros. Eg: 'for' is a macro that defines a local tail-recursive function, which the compiler (in its optimization pass), turns back into a machine-language loop.
The 'std::cout "value: "' will get evaluated eagerly, and you won't get the expected result. There are work-arounds, but they are a pain to use when a mistake in a lambda expression results in completley indecipherable errors.
That makes no sense. "Facts" in science are just well-supported, well-established theories. Creationists like to bitch about how science can't give you truth, and they are right about that. What they don't understand, however, is that its pretty much logically impossible for humans to get absolute truth, which is by now a pretty well-established metaphysical principle.
Are you honestly suggesting you could create a tower reaching to heaven? Or that heaven even exists in a plane of existence that is perceptible to men? That's just plain blasphemous, if you ask me, and a dimunition of God's power.
Why is it, therefore, here at /. there is such open hatred for Judeo-Christian beliefs when just about anything else goes?
You won't find a lot of love here for child abusers, murderers, rapists, the in general ignorant or the malicious. Young earth creationists fall into one of the latter two categories, depending on whether or not they are evangelical.
We have reached a point in our social evolution where reason tempered by emperical verficiation is the established measure of truth. This might not remain the case indefinitely, but for now, that's how it is. It's the same as when blind, unthinking faith was the measure of truth, in the past. No arguments for young-earth creationism (and I've heard most of them), hold water, especially in face of the overwhelming evidence for evolutionary change at the biological level. Organisms are geared for evolution, and it shows in the very structure of their biology. Thus, suffice it to say that by our standards of truth, your beliefs (not Judeo-Christianity in general, young-earth creationism specifically), don't hold water, and we consider ourselves justified in persecuting you.
For god's sake, even the Pope accepts the big-band and evolution! John Paul II deserves a special place in heaven for trying to remove the face-value ridiculous aspects of Christianity and focusing on the parts of it that actually matter!
Before you get into an intellectual moral outrage: remember, they laughed at Einstein, but they laughed at Bozo the clown too. Or, to quote Carl Sagan: "Extraordinary claims require extraordinary evidence!"
Engineers are perhaps the most backwards of the all the types of educated professionals. Its amazing how closely they are tied to history, unable to move past its confines except in incremental, painfully slow steps.
Because there aren't still people around that think the Mayan or Aztec god's actually not only exist, but give enough of a flying fuck about human beings to tell them to put animals in a big boat.
"Windows environment subsystem" isn't a strange buzzword. It was popular in the 1980s-1990s to design operating systems that were compatible with multiple interfaces. An OS would run multiple "personalities," usually as different servers on top of a microkernel. Windows NT does this too, but because Microsoft sucks and never uses accepted terminology for naming features, they called their personalities "environment subsystems." NT has a Win32 environment subsystem, a POSIX environment subsystem, and an OS/2 (console) environment subsystem. My guess is that SpecOps simply filched this terminology for their product.
Had it occurred to you that maybe he meant that Japan used the metric system, and thus the engineers defaulted to that for the height, and only used inches for the width because that's the standard name for it? I bet they call 3.5" floppies 3.5" floppies in Japan too!
There is something called ethics. It is unethical to attack someone unless there is a direct threat to yourself. I consider myself better off dead than alive without morality.
That's all just the cost of making a better product. That doesn't present a barrier to entry. In the economic sense, a barrier to entry is something unrelated to the product itself. For example, if a phone company owns all the phone lines in a country, there is a huge barrier to entry. If most software runs only on Windows, that's a huge barrier to entry. Thus, potential competitors are prevented from entering the market, even if they have a better product.
Google is hardly a monopoly. There are almost no barriers to entry in their market. There is lots of healthy competition (Altavista, Yahoo, AOL, MSN). I repeat: there are almost no barriers to entry in their market.
The case for Microsoft is 180-degrees in the opposite direction.
Yep. You should check out the new generation of software-defined radios. "Embedded" in this case means multiple G4s, an embedded FPGA, and hundreds of megs of RAM.
I never said that mark & compact was a good GC. A naive mark & compact can have very bad performance. However, mark & compact can be really simple to implement, and still handle circuler references. The comment was designed to counter the OP's assertion that the handling of circular references necessitates that the memory allocator be complex.
Don't compare GC to training wheels. Manual memory management makes some very advanced programming techniques nearly impossible. No sane programmer would want to manually manage the memory of a closure or continuation!
And there are a number of publically available GCs that are very good. Intel's ORP has a very advanced garbage collector. OCaml has a very good incremental generational collector. The MPS is a very advanced memory manager, with an incremental generational GC among other things.
Allocation happens at a known point in a GC too. I assume, then, that you mean free(). Now, in a GC'ed application, you can always disable GC and then call the GC at known safe-points. Say you're writing a video application. Basically, you've got a loop that displays a frame just as it is needed, and waits the rest of the time. All you have to do is call the GC during that wait period, so the GC's are quick and regular. As long as you make sure not to generate too much garbage while rendering the frame (doing lots of memory allocation in a time-critical piece of code is a bad idea anyway), you'll be fine. For most soft-real-time uses, a good GC works pretty well. Especially if you take advantage of more advanced GCs that allow you to mix various allocation techniques (manual pool, automatic gc, etc) in the same program.
On a related note. There are languages other than Java that use GC's. Dylan comes to mind. Dylan-Win32 apps are indistinguishable from C/C++ Win32 apps when it comes to performance. The GC's pause times are so short you just don't notice them. I hear OCaml's GC is extremely good as well.
There are numerous algorithms for real-time GC, though I don't know of any open-source implementations.
My point was that to avoid the problem of circular references, the garbage collector does have to be more sophisticated
No it doesn't. Handling of circuler references falls naturally out of most GC algorithms. One of the simplest possible memory algorithms is the mark & compact GC, which handles circuler references naturally.
Pause times below 1/10th of a second? Hmm, how much below? TV-quality video is 24 frames per second, so a one-tenth second pause means dropping two or three frames.
You disable the GC in those cases. A good GC will give you the option to manually manage memory in certain cases (say, through a pool allocator), so in any time-sensitive paths, you can disable the GC and rely on those other options. There are also real-time GC's that have absolutely bounded pause times.
But garbage collection can happen at any time, and cause a pause at any point in my program -- even when I'm needing to re-fill under-run buffers or read volatile memory or make time-critical choices.
You do realize that you have this issue with any modern OS? A malloc() can take tens of thousands of clock-cycles if it decides to mmap() to get more backing memory, and the kernel decides to block the app.
Malloc is still ridiculously expensive compared compared to what a generational GC can do. A malloc is dozens to hundreds of instructions, while in many cases (eg: when you're following the typical functional-language allocation patterns), a generational GC can alloc in just a few instructions. And while the GC phase itself is hardly speedy, the amortized cost of the GC is much lower than the non-amortized cost of doing all those free()'s individually.
The G5 vs Opteron comparison is about right, with the G5 winning out on heavily vector-oriented code. The G4 vs P-M comparison is a bit generous --- the P-M has a much faster memory bus, so you want to dock some points from the G4.
A G4 is about as fast as a PIII at the same clock-speed. It should be a bit slower than the Pentium M at the same clock-speed, because the G4 is limited by a really slow SDR memory bus. a 1.6GHz P-M is comparable to a 2.2 - 2.4GHz P4. So the G4 1.5GHz should be comparable to about a 2.0 - 2.0 GHz P4. That's probably being a bit generous, but you get the idea.
Pango is also phenomenally slow. At least, that's what the GTK+ folks always claim.
You do realize that there isn't anything in Java that is actually new, do you not?
Heh. If 'foreach' botherse you, wait till you check out Xen. Its an attempt to hard-code XML and SQL syntax helpers into C#. It is as bad as it sounds...
Well, sexpr's make Lisp macros nearly omnipotent, so you're right in a way. But, most of what is usually done by Lisp macros is doable in an infix language too. Check out Dylan's macro support, which is powerful enough that much of the language's syntax is defined by macros. Eg: 'for' is a macro that defines a local tail-recursive function, which the compiler (in its optimization pass), turns back into a machine-language loop.
Boost.Lambda is fraught with complications and subtle errors. For example, if you do:
std::for_each(v.begin(), v.end(), std::cout "value: " _1 endl);
The 'std::cout "value: "' will get evaluated eagerly, and you won't get the expected result. There are work-arounds, but they are a pain to use when a mistake in a lambda expression results in completley indecipherable errors.