Well multiple return values is an old problem, and excpetion throwing is just the latest solution that can be misused for this purporse.
hmm... i don't love your "editorializing" in a supposedly informative answer, but as long as you are equally scrupulous in indicating that a distinguished value like -1 is also a misuse, I won't complain:)
In any case, as a quibble, it is not particularly multiple return values that is at issue, it's multiple return types (I mean abstract type). Multiple return values is only the latest way of dealing with the issue of multiple return types:)
It requires some time to do multidrops (jump several functions call backward at once, not just one like the normal return), since the complete stack so far has to be
cleared and destructed cleanly by that process.
actually, the language CLU that I referenced addresses this problem. You see, jumping several frames back up might be a useful compiler optimization, but as an error handling mechanism within the language it is just plain wrong. Let me illustrate with an example:
If you call a function that signals "arithmetic overflow", you are interested only in arithmetic overflows that are related to the arguments that you passed in. But lets say the implementation of the function changes so that it uses a network socket to commuicate with some SETI@HOME machine that's doing the calculation... if the socket code also signals "arithmetic overflow" under some circumstances, it would be wrong for you to handle this exception because to you it is a "network error" exception having nothing to do with your arithmetic. Thus to be correct, a language should require every caller to dispose of every exception, even if it is to explicity rethrow. This makes exceptions travel up the stack just as returns do unless you wish to optimize. But in that case, the optimization makes exception handling a nice way to handle returns because it is similar semantically to a return from inside a deeply nested set of loops and ifs within a function.
it is etched into hardware, but it is not implemented in hardware... there is software ("microcode") on the chip which executes a little program to do the equivalent of what an x86 instruction does.
alternatively, etching the code for a Java VM into hardware in this same way would not make it any faster so the whole discussion of virtual machine vs machine would still not be meaningful.
"If God went to so much trouble to make it look like the universe is billions of years old, maybe we should believe him."
thanks, that's a great one! it's also a little bit of a turnaround on the story of Genesis/Creation and the original sin of learning/questioning stuff we weren't supposed to:)
There are some things Windows can't do. Running a remote desktop is not one of them.
I'm guessing that you've never used X Windows? Understandable if you are not a unix guy, but if you had experienced X Windows you would understand what I'm talking about and would not argue this.
of course, Windows can potentially do anything, as can unix: they're both "turing machines" so to speak. But just because something is theoretically possible and code is written to do it doesn't mean that it is practical or works well enough to satisfy a user of the other OS.
Citrix is a special case app, not part of the OS. as such it has to solve all sorts of problems
This is because it is not part of the architecture of windows so every thing is a special case (how to handle the mouse? hmmm. ok now how to handle the clipboard... hmm... ok, now how to handle the...) and it solves them pretty well. but it can't easily solve them all in any practical sense. Here's one example: in Windows you can grab mouse-over messages and make your app respond to them. Programmers thus write software that takes advantage of this and draw fancy little do-dads on-the-fly. But if the Citrix layer gets added on top of this, suddenly those mouse-over messages have to travel over a network link and are slower. So suddenly the zippy little doodad is slow as snot. (yes, the same timing issue exists in Unix, but apps are written to run that way: theoretically possible in Windows if all programmers wrote for Citrix, but they don't) Then, on top of this is the fact that NT/2000 was not designed to have more than one person logged in at the same time, so you have to solve all the problems asscociated with assumptions about where in the registry to grab configuration from, and how you can run two copies of Microsoft Word (or pick some harier app) at the same time for two different users and not have them fight with each other. And then, can you have the apps on one machine interact with apps running on another? only in rare cases have Windows apps been written this way. Not Citrix's fault, but not solvable by Citrix either.
Because X Windows running across a net is identical to X Windows running on one machine this stuff just works in unix. It means that across the network I can have the Start button be the identical Start button to the one on my other machine, because it is the indentical start button. And all my apps that are installed come along with it (and I don't need to get an administrator to give me permission) There is no sense of wonder as there is with Citrix ("how do they do this?!") Stuff just works.
You can run X Windows on top of Windows, by the way, and it works fantastic. (I'm doing it right now) But it only works fantastic with X Windows apps and there are very few of these in the Windows world. Citrix is cool, it works, and it brings a whole world of possibilities to Windows. But it doesn't bring all the possibilities that X Windows brings because it can't even bring all of the possibilities that Windows brings. When a unix person says "share my desktop" they mean a lot more than what PCAnywhere or Citrix does, and that difference in understanding is what leads you to object to my saying that.
Don't assume that I think there is no possibility of an omnipotent god creating all that shit.
I didn't assume anything. You said (and I quoted you) "natural phenomena that prove the earth is older than 6000 years". To a person who allows for the possibility of Creationist ideas (as you say you do), these natural phenomena do not prove anything of the sort because they could simply be part of Creation. If you can't see that simple flaw in your reasoning, I'm afraid you will be doomed to be too credulous of all sorts of real scientists who happen to hold wrong ideas. Not because you don't understand the value of reason, but because you don't always see flaws in reasoning.
Arbitrary possibilities deserve no attention until they make a phenomenal appearence.
Yes, quite, true, and this is the crux of your argument. It is what you should have said instead of that bit about the "proof" which was not a proof.
compare the speed of a VM executed program to a native compiled one
i don't think it's a quibble or pedantic to point out that the x86 architecture itself is nothing but a VM. The reason you can run "native" code on all the different chips available is because the myriad all implement the same virtual machine. Everyone agrees that code for that virtual machine is executed "quickly".
If there is something about Java that means it conflicts with this (or some other important) VM, that would be interesting to hear. But it can't be said that VMs are "slow" in general.
oh, boy do I agree, it's why I quit working on Windows stuff. I would describe the problem as a little worse, though: it's not too difficult to write a little class that encapsulates the Windows API ugliness and cruft as you encounter it. Then you could just use the pretty wrappers, right?
Wrong! The vast majority of Windows programmers, and I'm talking about many otherwise intelligent people, are completely addicted to "cut-and-paste inheritence" and they don't "see" the beauty of a one-line call to ecapsulate a dozen lines of in-lining that accomplishes only a couple of measly Windows messages passed.
I truly don't get it. And the MSDN CDs just make the problem worse because they don't really indicate what is deprecated and what is not so you can generate tons of new cruft without even realizing it.
Don't think that Microsoft does not understand this, and don't think that they don't do it on purpose. What better way to defend a monopoly than by deeply embedding Microsoft proprietary stuff in everything you do.
First their was BCPL, then B, then C. Logically the next language in this family would be P.
well, "P" would be the logical next name for next new language based on BCPL. the naming convention requires that a new language based on "C" should be "".
on the off-chance that any language/compiler designer/implementers out there read this thread, could I put in a request?
Exception handling should be a "normal" part of the programmers toolkit, not just something used solely for error conditions. For example, a function like "strchr" (search a string for a character) should be available which "throws" the not-found result, rather than returning an exceptional or "distinguished" value such as the nullpointer. Same with eof on a read.
To give the programmer this ability,
catch-throw need to be fast and efficient,
yes, but they also
need to have a simple syntax.
Calling such a "strchr" should not require several or even one extra layers of squigglies, nor should it require declaring an "extra" variable. The whole point is to eliminate the awkwardness of the temporary variable that distinguished values impose. The (relatively obsolete) language CLU provides a good attempt at this. (I can go into it if this thread provokes some interest.)
The programmer also needs
the standard library to provide a rich but orthogonal set of functions that signal return conditions
This is the biggest failing I found with Java. Java classes return all sorts of varying and kooky conditions embedded in values. Then, when I tried to implement my own exception-based class wrappers, I discovered that Symantec Visual Cafe had created a nightmare in their debugger:
debuggers should not automatically put a breakpoint everywhere an exception is thrown
natural phenomena that prove the earth is older than 6000 years
i'm not only not a creationist, i'm an atheist, ok?
do you really think, though, that an omnipotent God couldn't create this physical evidence that has you totally snowed? He could have created it yesterday, fer chrissakes. Be skeptical not only of blind faith, but of received theory as well.
dude, Citrix has been around for years. do you really think you're the only one who has heard of it? I played with Citrix when it first came out, and since then I've fixed problems that Citrix has imposed on apps that it's trying to share. You're right, it's the closest thing to something that works similarly to X of all the suggestions here, but it is no substitute for X Windows.
ask yourself this question: would installing Citrix in the Largo example from the story above both work and save the city of Largo money, and especially support costs? no, it wouldn't.
It would be epensive, it would be an unusual configuration with all the attendent support problems, and it would place all sorts of restrictions on what apps users could or could not run simultaneously on the server.
... and, if history is any example, Citrix will break when future version of Windows roll out because Microsoft always crushes its partners.
what about the registry? you didn't address how the registry gets shared. There isn't a single modern windows app that will run without its registry settings... how do solve this. When I started this off by saying "share the desktop", surely you didn't think it would be meaningful to do so without access to your favorite apps...
Idiots could and will fubar just about anything, including syncronized file systems for Unix (AFS?)
c'mon, the fact that any config could be screwed up is a pathetic attempt to draw attention away from the fact that Microsoft Windows simply cannot do the things that X Windows can. With X Windows, I can walk up to any X-enabled workstation (the unix GUI) and I can run some or all of my stuff from my home directory anywhere in the world (firewalls willing), and I don't have to install or configure anything to do it.
you want something from your PC on the network, throw it on your desktop. It'll be there wherever you boot from
So, if the something I want is not just a document, but the app that created it, I have to install the app on my desktop? And then Windows will not only launch it, but use the application settings from the registry on the other machine... are you seeing the problem yet? the various ad hoc one-size-must-fit-somebody solutions you Windows guys kluge up just don't solve the problem. Do you argue so hard because you can't believe that Windows can't do something, or because you simply don't understand the problem?
you access your desktop from your laptop... you don't say that you and your colleagues share each others' machines. Your config works because you are an expert who tweaks and configures these various environments so they work for you on your multiple machines. It would not work anywhere near so well for multiple people to share one machine which was the point of the article.
it's so hard to hash these things out with Microsoft fans because they keep getting distracted from the goal.
That only happens if you are an idiot and store everything on your desktop instead of an appropriate place
we all note that you use the euphemism "an appropriate place" instead of saying something simple like "in your home directory". You do this because there is no appropriate place in Windows. It depends on the app, and the apps are overwhelmingly not designed for multiple users.
I've worked at several places where all work grinds to a halt because everything is nfs mounted and there are
network problems; problems I've never had with roaming profiles.
lemme see... nfs is screwed up because the net is down, but windows shares are not screwed up because the net is down.
This could only happen or is only believable, like you said, "if you are an idiot". Because, like you said, "How is an nfs mounted home directory any different from a windows share that gets mounted with the user logs in?"
Legitimately, you should brag about the things Microsoft products are good at. But networking is not one of them. To brag about MS Windows in an network environment is to show that you don't know anything about the alternatives.
But in any case, read the rest of the threads here so you can learn that the benefits of running X Windows have nothing to do with the benefits of NFS.
you're referring to "setup/n" from the old windows world [he says, thus proving he thoroughly knows this subject material]?
what that does is install a specific instance of windows on a particular client, but keeps the disk storage remote. This can be a big improvement, but it requires that all the clients be identical (impossible to maintain over time) or that each worker sit at the same desktop (which defeats one of the main benefits). It also keeps the support work at the client end which undermines the main benefit that Largo was enjoying.
No, Microsoft's OSes really are quite limited in the network world. X-Windows was designed for networking and handles this stuff without a sweat.
I'm familiar with Citrix: it often requires that Windows apps be reworked because they weren't designed to run in a multi-user environment. Unix apps always are, from the ground up.
Out of the box, Linux and other Unixes work 100% as client server. Windows does not. Brag about Citrix all you want, but decide to implement it an you've got months of config ahead of you, coupled with various discoveries of what doesn't work and unsolved mysteries why some things never will. Because?: it's a kluge.
with VNC or PCAnywhere, you can't "see your desktop" at the same time anybody else is seeing theirs because the "server" is not an application server, it's an application client that you are graphically cloning. Not to mention the quality of the UI on top of these kluges...
those are "add-ons" and not built-in to the way windows works. thus, application software often uses the registry or temporary files in ways that are not compatible to a multi-user setting.
the desktop on a Unix machine uses X the same whether it's remote or local, and unix is multi-user so it's software is too.
These differences account for why you only very rarely see these setups, and then only in an environment with a restricted set of apps. And, support costs are not lower since most tech support needs to take place at the client workstation and the problems are more obscure because they configuration is so unusual.
The key here is Total Cost of Ownership: Windows boosters and shills like to point out that a free-purchase-price does not mean cheaper overall cost. But this article points out that the savings Largo is looking for are not the licensing costs, but the support costs. In Largo, the network is the computer. The idea that you could see "your" desktop from another workstation is just a dream in the Windows world.
This is not a victory for Linux. This is a victory for one old variant of Windows: yes, X-Windows.
well if you really want to nitpick, it's transliterated that way, but it's actually spelled with Cyrillic characters. This is significant because the Cyrillic character that looks like the backwards cap-R is a vowel that makes a "yah" sound. so, "sklyarov" is pronounced something like "skl-ya-rov" but said fast and scrunched together. it is not much more difficult to pronounce than the English word "sclerosis"
Seriously, though, there isn't much incentive for people to pursue music if there is no return.
bzzzzzt! wrong.
Where have you been, Mars? Virtually all serious musicians pursue music for love of the art, and most expect to receive no monetary return from it as they pour time into mastering their craft.
And as a separate point, in the days before music became copyrighted/cartelized big business, many musicians did earn their livings performing. It is only today that so few expect to.
hmm... i don't love your "editorializing" in a supposedly informative answer, but as long as you are equally scrupulous in indicating that a distinguished value like -1 is also a misuse, I won't complain :)
In any case, as a quibble, it is not particularly multiple return values that is at issue, it's multiple return types (I mean abstract type). Multiple return values is only the latest way of dealing with the issue of multiple return types :)
It requires some time to do multidrops (jump several functions call backward at once, not just one like the normal return), since the complete stack so far has to be cleared and destructed cleanly by that process.
actually, the language CLU that I referenced addresses this problem. You see, jumping several frames back up might be a useful compiler optimization, but as an error handling mechanism within the language it is just plain wrong. Let me illustrate with an example:
If you call a function that signals "arithmetic overflow", you are interested only in arithmetic overflows that are related to the arguments that you passed in. But lets say the implementation of the function changes so that it uses a network socket to commuicate with some SETI@HOME machine that's doing the calculation... if the socket code also signals "arithmetic overflow" under some circumstances, it would be wrong for you to handle this exception because to you it is a "network error" exception having nothing to do with your arithmetic. Thus to be correct, a language should require every caller to dispose of every exception, even if it is to explicity rethrow. This makes exceptions travel up the stack just as returns do unless you wish to optimize. But in that case, the optimization makes exception handling a nice way to handle returns because it is similar semantically to a return from inside a deeply nested set of loops and ifs within a function.
alternatively, etching the code for a Java VM into hardware in this same way would not make it any faster so the whole discussion of virtual machine vs machine would still not be meaningful.
thanks, that's a great one! it's also a little bit of a turnaround on the story of Genesis/Creation and the original sin of learning/questioning stuff we weren't supposed to :)
I'm guessing that you've never used X Windows? Understandable if you are not a unix guy, but if you had experienced X Windows you would understand what I'm talking about and would not argue this.
of course, Windows can potentially do anything, as can unix: they're both "turing machines" so to speak. But just because something is theoretically possible and code is written to do it doesn't mean that it is practical or works well enough to satisfy a user of the other OS.
Citrix is a special case app, not part of the OS. as such it has to solve all sorts of problems This is because it is not part of the architecture of windows so every thing is a special case (how to handle the mouse? hmmm. ok now how to handle the clipboard... hmm... ok, now how to handle the ...) and it solves them pretty well. but it can't easily solve them all in any practical sense. Here's one example: in Windows you can grab mouse-over messages and make your app respond to them. Programmers thus write software that takes advantage of this and draw fancy little do-dads on-the-fly. But if the Citrix layer gets added on top of this, suddenly those mouse-over messages have to travel over a network link and are slower. So suddenly the zippy little doodad is slow as snot. (yes, the same timing issue exists in Unix, but apps are written to run that way: theoretically possible in Windows if all programmers wrote for Citrix, but they don't) Then, on top of this is the fact that NT/2000 was not designed to have more than one person logged in at the same time, so you have to solve all the problems asscociated with assumptions about where in the registry to grab configuration from, and how you can run two copies of Microsoft Word (or pick some harier app) at the same time for two different users and not have them fight with each other. And then, can you have the apps on one machine interact with apps running on another? only in rare cases have Windows apps been written this way. Not Citrix's fault, but not solvable by Citrix either.
Because X Windows running across a net is identical to X Windows running on one machine this stuff just works in unix. It means that across the network I can have the Start button be the identical Start button to the one on my other machine, because it is the indentical start button. And all my apps that are installed come along with it (and I don't need to get an administrator to give me permission) There is no sense of wonder as there is with Citrix ("how do they do this?!") Stuff just works.
You can run X Windows on top of Windows, by the way, and it works fantastic. (I'm doing it right now) But it only works fantastic with X Windows apps and there are very few of these in the Windows world. Citrix is cool, it works, and it brings a whole world of possibilities to Windows. But it doesn't bring all the possibilities that X Windows brings because it can't even bring all of the possibilities that Windows brings. When a unix person says "share my desktop" they mean a lot more than what PCAnywhere or Citrix does, and that difference in understanding is what leads you to object to my saying that.
peace.
I didn't assume anything. You said (and I quoted you) "natural phenomena that prove the earth is older than 6000 years". To a person who allows for the possibility of Creationist ideas (as you say you do), these natural phenomena do not prove anything of the sort because they could simply be part of Creation. If you can't see that simple flaw in your reasoning, I'm afraid you will be doomed to be too credulous of all sorts of real scientists who happen to hold wrong ideas. Not because you don't understand the value of reason, but because you don't always see flaws in reasoning.
Arbitrary possibilities deserve no attention until they make a phenomenal appearence.
Yes, quite, true, and this is the crux of your argument. It is what you should have said instead of that bit about the "proof" which was not a proof.
peace.
i don't think it's a quibble or pedantic to point out that the x86 architecture itself is nothing but a VM. The reason you can run "native" code on all the different chips available is because the myriad all implement the same virtual machine. Everyone agrees that code for that virtual machine is executed "quickly".
If there is something about Java that means it conflicts with this (or some other important) VM, that would be interesting to hear. But it can't be said that VMs are "slow" in general.
Wrong! The vast majority of Windows programmers, and I'm talking about many otherwise intelligent people, are completely addicted to "cut-and-paste inheritence" and they don't "see" the beauty of a one-line call to ecapsulate a dozen lines of in-lining that accomplishes only a couple of measly Windows messages passed.
I truly don't get it. And the MSDN CDs just make the problem worse because they don't really indicate what is deprecated and what is not so you can generate tons of new cruft without even realizing it.
Don't think that Microsoft does not understand this, and don't think that they don't do it on purpose. What better way to defend a monopoly than by deeply embedding Microsoft proprietary stuff in everything you do.
well, "P" would be the logical next name for next new language based on BCPL. the naming convention requires that a new language based on "C" should be "".
Zortech bought theirs too, but I don't recall what it was before.
Microsoft bought Lattice C as their first.
eventually, all of them rewrote them, but that's probably more having to do with the siren-song of the second-system fallacy (phallusy? ;-)
Exception handling should be a "normal" part of the programmers toolkit, not just something used solely for error conditions. For example, a function like "strchr" (search a string for a character) should be available which "throws" the not-found result, rather than returning an exceptional or "distinguished" value such as the nullpointer. Same with eof on a read.
To give the programmer this ability,
- catch-throw need to be fast and efficient,
yes, but they also- need to have a simple syntax.
Calling such a "strchr" should not require several or even one extra layers of squigglies, nor should it require declaring an "extra" variable. The whole point is to eliminate the awkwardness of the temporary variable that distinguished values impose. The (relatively obsolete) language CLU provides a good attempt at this. (I can go into it if this thread provokes some interest.)The programmer also needs
- the standard library to provide a rich but orthogonal set of functions that signal return conditions
This is the biggest failing I found with Java. Java classes return all sorts of varying and kooky conditions embedded in values. Then, when I tried to implement my own exception-based class wrappers, I discovered that Symantec Visual Cafe had created a nightmare in their debugger:- debuggers should not automatically put a breakpoint everywhere an exception is thrown
because when it's in a tight loopi'm not only not a creationist, i'm an atheist, ok?
do you really think, though, that an omnipotent God couldn't create this physical evidence that has you totally snowed? He could have created it yesterday, fer chrissakes. Be skeptical not only of blind faith, but of received theory as well.
ask yourself this question: would installing Citrix in the Largo example from the story above both work and save the city of Largo money, and especially support costs? no, it wouldn't. It would be epensive, it would be an unusual configuration with all the attendent support problems, and it would place all sorts of restrictions on what apps users could or could not run simultaneously on the server.
... and, if history is any example, Citrix will break when future version of Windows roll out because Microsoft always crushes its partners.
c'mon, the fact that any config could be screwed up is a pathetic attempt to draw attention away from the fact that Microsoft Windows simply cannot do the things that X Windows can. With X Windows, I can walk up to any X-enabled workstation (the unix GUI) and I can run some or all of my stuff from my home directory anywhere in the world (firewalls willing), and I don't have to install or configure anything to do it.
So, if the something I want is not just a document, but the app that created it, I have to install the app on my desktop? And then Windows will not only launch it, but use the application settings from the registry on the other machine... are you seeing the problem yet? the various ad hoc one-size-must-fit-somebody solutions you Windows guys kluge up just don't solve the problem. Do you argue so hard because you can't believe that Windows can't do something, or because you simply don't understand the problem?
it's so hard to hash these things out with Microsoft fans because they keep getting distracted from the goal.
we all note that you use the euphemism "an appropriate place" instead of saying something simple like "in your home directory". You do this because there is no appropriate place in Windows. It depends on the app, and the apps are overwhelmingly not designed for multiple users.
I've worked at several places where all work grinds to a halt because everything is nfs mounted and there are network problems; problems I've never had with roaming profiles.
lemme see... nfs is screwed up because the net is down, but windows shares are not screwed up because the net is down. This could only happen or is only believable, like you said, "if you are an idiot". Because, like you said, "How is an nfs mounted home directory any different from a windows share that gets mounted with the user logs in?"
Legitimately, you should brag about the things Microsoft products are good at. But networking is not one of them. To brag about MS Windows in an network environment is to show that you don't know anything about the alternatives.
But in any case, read the rest of the threads here so you can learn that the benefits of running X Windows have nothing to do with the benefits of NFS.
what that does is install a specific instance of windows on a particular client, but keeps the disk storage remote. This can be a big improvement, but it requires that all the clients be identical (impossible to maintain over time) or that each worker sit at the same desktop (which defeats one of the main benefits). It also keeps the support work at the client end which undermines the main benefit that Largo was enjoying.
No, Microsoft's OSes really are quite limited in the network world. X-Windows was designed for networking and handles this stuff without a sweat.
Out of the box, Linux and other Unixes work 100% as client server. Windows does not. Brag about Citrix all you want, but decide to implement it an you've got months of config ahead of you, coupled with various discoveries of what doesn't work and unsolved mysteries why some things never will. Because?: it's a kluge.
with VNC or PCAnywhere, you can't "see your desktop" at the same time anybody else is seeing theirs because the "server" is not an application server, it's an application client that you are graphically cloning. Not to mention the quality of the UI on top of these kluges...
the desktop on a Unix machine uses X the same whether it's remote or local, and unix is multi-user so it's software is too.
These differences account for why you only very rarely see these setups, and then only in an environment with a restricted set of apps. And, support costs are not lower since most tech support needs to take place at the client workstation and the problems are more obscure because they configuration is so unusual.
This is not a victory for Linux. This is a victory for one old variant of Windows: yes, X-Windows.
ha ha, that's especially funny because "rus" means "Russia" in Russian.
as another bit of trivia, no, it's not really the same: the Russian "ya" has a little curl-up at the bottom of the slanty leg.
well if you really want to nitpick, it's transliterated that way, but it's actually spelled with Cyrillic characters. This is significant because the Cyrillic character that looks like the backwards cap-R is a vowel that makes a "yah" sound. so, "sklyarov" is pronounced something like "skl-ya-rov" but said fast and scrunched together. it is not much more difficult to pronounce than the English word "sclerosis"
bzzzzzt! wrong.
Where have you been, Mars? Virtually all serious musicians pursue music for love of the art, and most expect to receive no monetary return from it as they pour time into mastering their craft.
And as a separate point, in the days before music became copyrighted/cartelized big business, many musicians did earn their livings performing. It is only today that so few expect to.
is this true? it seems like it is important if it is.