It's a sad commentary that no modern language suitable for scientific programming has been able to do away with pointers without loss of efficiency or expressiveness. The iterator concept of Sather is the closest I've seen, but the language itself lacks, errm, taste, for lack of a better word, and subsequently hasn't caught on to any extent.
"Get off this socialistic attitude people, if things lose their value whats the point of striving to make it better."
1. The idea that your contribution will better society, at no cost to you. (only the _potential_ loss of income)
2. The fame of inventing something new and useful.
3. The pleasure of figuring things out.
4. The selfish reward of recieving others contributions if they also adopt your beneficent attitude.
5. The selfish reward of making something or improving something merely to satisfy your own needs.
Compare the use of regulations, welfare, and other "socialistic" practices with the artificial and arbitrary constructs of patents and copyright laws which deal more with assuring income then protecting rights.
The interesting question is how would the world be different if patents only assured the inventor of the right of name association (it's not a "safety pin" unless made by X), and copyrights only assured authors that their works would not be modified without proper attribution? (If you change one word, it's no longer "War and Peace")
Microsoft is in the business of building infrastructure. That's their business... They should be booed? Microsoft is in the business of maximizing profit, as all businesses are and should be. I believe that they should be completely free to use any legal means to accomplish this. On the other hand, I am in favor of a free and open information infrastructure, and will absolutely express my displeasure at attempts to build the opposite.
That's certainly an interesting view of the history of the web. Maybe it took off because infrastructure companies like Microsoft, Sun, and Netscape did their jobs well.
I have a hard time believing you think Microsoft had anything to do with building the internet and web infrastructure before it "took off". Sun certainly did help the internet by promoting open protocols. Netscape and Microsoft helped build the market, but the infrastructure was by and large already defined and decentralized. This allowed many more participants to get involved and experiment with different profit making enterprises than would have been the case if one company controlled everything.
I disagree. I don't think what they are doing is cool at all. Because what they are doing is defining an infrastructure, and making sure that they control it. This is bad, and should be boo'd.
The web took off because no one owned the protocol, any one could create an HTTP server, anyone could write the services behind the server and anyone could write a browser, and any user could jump on a browser and start using it. Now microsoft wants to own the protocol, the server, the services, brand users with their passport branding iron, and heh, the only thing open about this monstrosity is that anyone can build a browser.
On the other hand, I see your point. What _would_ be cool would be an open platform that provided some of the things that hailstorm provides in a decentralized, open way. And hopefully some things that would not appeal to microsoft's executives, but would to users. Like anonymity. Or privacy. Or choice.
Losing SourceForge would be a lot like a hard disk crash. As the finality of losing all that stuff settles in, you eventually come to the realization that most of it was complete CRAP that you never use anyway and you've got backups of anything really important. Besides you can start of with a nice clean system and try not to load it up with useless stuff like that again.
Calmer heads have prevailed. The moon shots were a source of national pride during the cold war--"Look at what we can do!". They didn't actually make economic sense.
When we come up with a lift technology that costs less than the payback, it will happen rapidly and in a big way.
Dunno dude. I would think a super serious fellow like yourself would never dye your hair white, or get in a goofy cowboy outfit, but the evidence to the contrary is overwhelming. So I have to ask, re your antagonism to penguins in an install, what's up with that?
Obviously this was a bad decision, but what rights _should_ a corporation have, if any?
Perhaps only the rights steming from the ownership of property for productive use by a collection of individuals - no unreasonable search and seizure, no soldiers quartering during war, property taken for public use without just compensation, etc. For everything else the individuals in charge should be accountable, because only individuals think and make decisions.
Amen, brother. Once it becomes economically feasible (profitable), greed will get us there faster than you can say "Bill Gates has the biggest dome on Mars, the bastard!".
My great-grandmother was in a rest home in the 80's and sometimes I would go and have a pleasant visit with her. One time however, just after the place put in a couple of microwave ovens for the use of the "guests", something unusual happened. I was watching as a nurse showed one of the old dodgers how use the thing. Just as the steaming plate was placed in front of a grey old man with visible shaking in his limbs, another guest suddenly jumped and yelled in a slightly germanic accent "I predicted it! I predicted It!!! No one believed me, but I predicted it! Look it up!!! I predicted it!". The nurses ultimately wrestled "Crazy Waldo" down and injected him with something that seemed to calm him down. I later heard that these outbursts occured for years before and after the incident that I witnessed. Waldo finally died in 1994 during surgery to remove the paper plates he had injested whole.
Taking a physical thing leaves the owner with nothing.
Taking a copy of something does not affect the owner physically
They are different things, but this is not to say that copying does not diminish the original's economic value. Unfortunately, IMHO, the days when an artist could make a recording and make oodles of money are coming to an end. Oh, there will be protracted court battles for sure, but the writing is on the wall. Recorded music will simply become an advertisement for live performances, or at the best have very short lived economic value at the initial release.
Hmmm, and using your space fame for an easy ride into congress isn't opportunistic? Personally, I don't see anything crass or opportunistic about exchanging money for something. I do it all of the time. Perhaps you do too. On the other hand, Glenn's fame was earned on the backs of thousands of engineers and millions of taxpayers. The way I see it, Tito _earned_ his trip, and Glenn was just lucky to get picked by a committee.
Now this is great to see. We need more projects like this to keep bored retirees off the street and away from the temptations that are offered there. Why just the other day in the neighorhood Denny's, I was accosted by a grim little man whose bravado was no doubt enhanced by the support of his fellow grandslammers. He yelled in his reedy voice, "Hey buddy! I got my social security! And you're paying for it!!!" which was followed by the raucous laughter of his comrades...
Perl is better in its niche than any other alternative, had free implementations from the start, and isn't a growth on the pascal-like language tree.
When programs were small, and machines were slow, Eiffel was great for fast machines and big programs. Now that programs are big, and machines are fast, it has a niche. But the best implementation is proprietary, and it's always going to be a growth on the pascal-like language tree.
Your organic versus designed argument holds no water. What about the popularity of Java? What about the non-popularity of Forth? It's not how it came about, it's how it does the job.
Mine currently exists on 30 or so sheets of 'em.
Some high points:
- a focus on efficiency, avoiding problems that other languages have and keeping a C-ish flavor (even less than Java, but it's there).
- declarations and definitions together a la java, although they can be split among several files.
- cooroutine-ish "iterators" a la Sather, but nicer syntax. <- check this out in Sather, it's a really cool idea. In fact this is the only way to perform a loop in the language.
- a novel "if" statement that can perform the work of "switch", as well as produce a value. It's not the franken-if you are imagining...or maybe it is.
- a unified way to annotate language elements with declarative statements.
- both callers and callees declare whether arguments are read-only, possibly modified, or created.
- be able to specify different heaps for objects on an algorithm basis, allowing garbage collection to be optimized on an algorithmic basis.
- Cross-sectional or "aspect-oriented" declarations. For example, be able to describe what is to be done at the end of each method in class X,Y and Z, but specify this in just one place.
- well defined base types and core libraries for portability (but no virtual machine!)
- Design by contract declarations a la eiffel.
- first class functions (like C/C++ functions)
- parameterized classes.
- portable distribution format (something like a compressed abstract syntax tree and any number of other resources in a zip file)
- case insensitive identifiers.
- only one comment marker:// (if that's not good enough, get a better editor!:)
- module import specifications not in code source files, but in the specification for the link-unit, allowing mapping, replacement, and less specification in total.
- types separate from classes. Similiar to Java's interfaces, but implementations can be reused too.
- global analysis to automatically determine polymorphic methods, dead code and make profile driven optimization a bit easier.
- objects can be allocated on the stack like C++.
- very little is done behind your back--no hidden conversions, compiler written invisible routines, etc.
Well, $120 per license is a pretty good deal. Maybe the government should get the same deal for us citizens. For 150 million copies, the discount should be down to say, $100 a copy. That's only $15 billion, just a drop in the bucket for rich old uncle sam, and just a bit more than half of M$'s yearly revenues, so it won't hurt them either, but OMG--think of the savings!
Redundancy is useless if it is mere copy/paste duplication with some minor editting. I can't imagine anyone dismissing Java because it lacks this division, on the contrary, it saves time, and given simple tools for extracting interfaces, does not have any drawbacks.
virtualness:
I don't disagree that thought must be given to the design of the base class, however, I don't believe a language should penalize you for allowing overloading on a method even if the method is not overloaded by any class in your link unit. Whether or not overloading is allowed by default is a matter in which I no particularly strong opinion, although I believe that C++'s default of non-virtual is mainly due to the inability to avoid the penalty in almost all implementations.
In Eiffel, every method CAN be polymorphic (I dunno if there is an option like "final") If the compiler can determine that a method has no overloaders, this case is is optimized (at least in reasonable implementations) as a direct call without you having to worry about it. This is the ideal, IMHO.
That would be extremely bad programming practice (making everything virtual). I would argue that a class designer that doesn't know which of his methods will need to be overridden in derived classes is either lazy or doesn't really know what they are designing.
This is just the nature of reusable software. If you design a library class with a method that does something useful by default, but want to make it replacable or extendible, in C++ you have to make it virtual, independent of whether or not it actually gets overrided or extended in a particular program.
Virtual method calls are less efficient than direct calls because of the following factors:
1. The vtable base has to be loaded from the object. There is no getting around this unless you've already got it in a register. If you are in a method of the same class, or you already called a virtual method of the object, you probably have it already in a register, otherwise you need to load it. A decision tree implementation also has this overhead.
2. Until this value is loaded in some form, there is no way to look ahead in the instruction stream-> the indirect calls are dependent on the vtable address. And yes there are multiple possibilities for the instruction stream, and they all depend on the vptr of the object being called. If there were not the case, a direct call could be used.
3. If the vtable is implemented by an array of function pointers, you've got another load to do before you can start filling the pipeline again. If it's an array of jumps, you're incurring only an extra instruction overhead.
4. The fact that the vtable, the functions themselves and the original code are usually at different address neighborhoods, you incur more stress on the CPU caches. This is statistical stress, which may not be a problem with any particular call, but overall more cache misses happen, on average, and in general.
5. It is impossible for compilers to inline virtual methods without global analysis, which is generally precluded from the use of dated linking techniques. This inability precludes an easy solution to #4
6. The previously mentioned need to make all methods that _might_ be overloaded virtual, especially for library code which is difficult for end users to modify.
In short, C++ vtable-based virtual methods incur at least one more instruction to be executed, probably a pipeline stall, can't be inlined, and cause more cache stress.
It's a sad commentary that no modern language suitable for scientific programming has been able to do away with pointers without loss of efficiency or expressiveness. The iterator concept of Sather is the closest I've seen, but the language itself lacks, errm, taste, for lack of a better word, and subsequently hasn't caught on to any extent.
I have the same reaction. Except it seems to happen when OTHER people use their cell phones near me.
Clearly, the solution is to bolt the receiver to the top of their skulls.
"Get off this socialistic attitude people, if things lose their value whats the point of striving to make it better."
1. The idea that your contribution will better society, at no cost to you. (only the _potential_ loss of income)
2. The fame of inventing something new and useful.
3. The pleasure of figuring things out.
4. The selfish reward of recieving others contributions if they also adopt your beneficent attitude.
5. The selfish reward of making something or improving something merely to satisfy your own needs.
Compare the use of regulations, welfare, and other "socialistic" practices with the artificial and arbitrary constructs of patents and copyright laws which deal more with assuring income then protecting rights.
The interesting question is how would the world be different if patents only assured the inventor of the right of name association (it's not a "safety pin" unless made by X), and copyrights only assured authors that their works would not be modified without proper attribution? (If you change one word, it's no longer "War and Peace")
Microsoft is in the business of building infrastructure. That's their business... They should be booed?
Microsoft is in the business of maximizing profit, as all businesses are and should be. I believe that they should be completely free to use any legal means to accomplish this. On the other hand, I am in favor of a free and open information infrastructure, and will absolutely express my displeasure at attempts to build the opposite.
That's certainly an interesting view of the history of the web. Maybe it took off because infrastructure companies like Microsoft, Sun, and Netscape did their jobs well.
I have a hard time believing you think Microsoft had anything to do with building the internet and web infrastructure before it "took off". Sun certainly did help the internet by promoting open protocols. Netscape and Microsoft helped build the market, but the infrastructure was by and large already defined and decentralized. This allowed many more participants to get involved and experiment with different profit making enterprises than would have been the case if one company controlled everything.
I disagree. I don't think what they are doing is cool at all. Because what they are doing is defining an infrastructure, and making sure that they control it. This is bad, and should be boo'd.
The web took off because no one owned the protocol, any one could create an HTTP server, anyone could write the services behind the server and anyone could write a browser, and any user could jump on a browser and start using it. Now microsoft wants to own the protocol, the server, the services, brand users with their passport branding iron, and heh, the only thing open about this monstrosity is that anyone can build a browser.
On the other hand, I see your point. What _would_ be cool would be an open platform that provided some of the things that hailstorm provides in a decentralized, open way. And hopefully some things that would not appeal to microsoft's executives, but would to users. Like anonymity. Or privacy. Or choice.
Losing SourceForge would be a lot like a hard disk crash. As the finality of losing all that stuff settles in, you eventually come to the realization that most of it was complete CRAP that you never use anyway and you've got backups of anything really important. Besides you can start of with a nice clean system and try not to load it up with useless stuff like that again.
But then they can just license this technology to filter it out.
Calmer heads have prevailed. The moon shots were a source of national pride during the cold war--"Look at what we can do!". They didn't actually make economic sense.
When we come up with a lift technology that costs less than the payback, it will happen rapidly and in a big way.
Dunno dude. I would think a super serious fellow like yourself would never dye your hair white, or get in a goofy cowboy outfit, but the evidence to the contrary is overwhelming. So I have to ask, re your antagonism to penguins in an install, what's up with that?
Ummm, who said they are going bankrupt/biting the dust? Sounds like a drastic restructuring so they can go back to french-only at "le lunch"....
Obviously this was a bad decision, but what rights _should_ a corporation have, if any?
Perhaps only the rights steming from the ownership of property for productive use by a collection of individuals - no unreasonable search and seizure, no soldiers quartering during war, property taken for public use without just compensation, etc. For everything else the individuals in charge should be accountable, because only individuals think and make decisions.
that's a whole lotta soap!
Amen, brother. Once it becomes economically feasible (profitable), greed will get us there faster than you can say "Bill Gates has the biggest dome on Mars, the bastard!".
Yep. There ought to be law against circular reasoning in laws.
My great-grandmother was in a rest home in the 80's and sometimes I would go and have a pleasant visit with her. One time however, just after the place put in a couple of microwave ovens for the use of the "guests", something unusual happened. I was watching as a nurse showed one of the old dodgers how use the thing. Just as the steaming plate was placed in front of a grey old man with visible shaking in his limbs, another guest suddenly jumped and yelled in a slightly germanic accent "I predicted it! I predicted It!!! No one believed me, but I predicted it! Look it up!!! I predicted it!". The nurses ultimately wrestled "Crazy Waldo" down and injected him with something that seemed to calm him down. I later heard that these outbursts occured for years before and after the incident that I witnessed. Waldo finally died in 1994 during surgery to remove the paper plates he had injested whole.
Taking a physical thing leaves the owner with nothing.
Taking a copy of something does not affect the owner physically
They are different things, but this is not to say that copying does not diminish the original's economic value. Unfortunately, IMHO, the days when an artist could make a recording and make oodles of money are coming to an end. Oh, there will be protracted court battles for sure, but the writing is on the wall. Recorded music will simply become an advertisement for live performances, or at the best have very short lived economic value at the initial release.
Hmmm, and using your space fame for an easy ride into congress isn't opportunistic? Personally, I don't see anything crass or opportunistic about exchanging money for something. I do it all of the time. Perhaps you do too. On the other hand, Glenn's fame was earned on the backs of thousands of engineers and millions of taxpayers. The way I see it, Tito _earned_ his trip, and Glenn was just lucky to get picked by a committee.
Now this is great to see. We need more projects like this to keep bored retirees off the street and away from the temptations that are offered there. Why just the other day in the neighorhood Denny's, I was accosted by a grim little man whose bravado was no doubt enhanced by the support of his fellow grandslammers. He yelled in his reedy voice, "Hey buddy! I got my social security! And you're paying for it!!!" which was followed by the raucous laughter of his comrades...
Perl is better in its niche than any other alternative, had free implementations from the start, and isn't a growth on the pascal-like language tree.
When programs were small, and machines were slow, Eiffel was great for fast machines and big programs. Now that programs are big, and machines are fast, it has a niche. But the best implementation is proprietary, and it's always going to be a growth on the pascal-like language tree.
Your organic versus designed argument holds no water. What about the popularity of Java? What about the non-popularity of Forth? It's not how it came about, it's how it does the job.
Mine currently exists on 30 or so sheets of 'em.
// (if that's not good enough, get a better editor! :)
Some high points:
- a focus on efficiency, avoiding problems that other languages have and keeping a C-ish flavor (even less than Java, but it's there).
- declarations and definitions together a la java, although they can be split among several files.
- cooroutine-ish "iterators" a la Sather, but nicer syntax. <- check this out in Sather, it's a really cool idea. In fact this is the only way to perform a loop in the language.
- a novel "if" statement that can perform the work of "switch", as well as produce a value. It's not the franken-if you are imagining...or maybe it is.
- a unified way to annotate language elements with declarative statements.
- both callers and callees declare whether arguments are read-only, possibly modified, or created.
- be able to specify different heaps for objects on an algorithm basis, allowing garbage collection to be optimized on an algorithmic basis.
- Cross-sectional or "aspect-oriented" declarations. For example, be able to describe what is to be done at the end of each method in class X,Y and Z, but specify this in just one place.
- well defined base types and core libraries for portability (but no virtual machine!)
- Design by contract declarations a la eiffel.
- first class functions (like C/C++ functions)
- parameterized classes.
- portable distribution format (something like a compressed abstract syntax tree and any number of other resources in a zip file)
- case insensitive identifiers.
- only one comment marker:
- module import specifications not in code source files, but in the specification for the link-unit, allowing mapping, replacement, and less specification in total.
- types separate from classes. Similiar to Java's interfaces, but implementations can be reused too.
- global analysis to automatically determine polymorphic methods, dead code and make profile driven optimization a bit easier.
- objects can be allocated on the stack like C++.
- very little is done behind your back--no hidden conversions, compiler written invisible routines, etc.
Well, $120 per license is a pretty good deal. Maybe the government should get the same deal for us citizens. For 150 million copies, the discount should be down to say, $100 a copy. That's only $15 billion, just a drop in the bucket for rich old uncle sam, and just a bit more than half of M$'s yearly revenues, so it won't hurt them either, but OMG--think of the savings!
Redundancy is useless if it is mere copy/paste duplication with some minor editting. I can't imagine anyone dismissing Java because it lacks this division, on the contrary, it saves time, and given simple tools for extracting interfaces, does not have any drawbacks.
virtualness:
I don't disagree that thought must be given to the design of the base class, however, I don't believe a language should penalize you for allowing overloading on a method even if the method is not overloaded by any class in your link unit. Whether or not overloading is allowed by default is a matter in which I no particularly strong opinion, although I believe that C++'s default of non-virtual is mainly due to the inability to avoid the penalty in almost all implementations.
In Eiffel, every method CAN be polymorphic (I dunno if there is an option like "final") If the compiler can determine that a method has no overloaders, this case is is optimized (at least in reasonable implementations) as a direct call without you having to worry about it. This is the ideal, IMHO.
That would be extremely bad programming practice (making everything virtual). I would argue that a class designer that doesn't know which of his methods will need to be overridden in derived classes is either lazy or doesn't really know what they are designing.
This is just the nature of reusable software. If you design a library class with a method that does something useful by default, but want to make it replacable or extendible, in C++ you have to make it virtual, independent of whether or not it actually gets overrided or extended in a particular program.
Virtual method calls are less efficient than direct calls because of the following factors:
1. The vtable base has to be loaded from the object. There is no getting around this unless you've already got it in a register. If you are in a method of the same class, or you already called a virtual method of the object, you probably have it already in a register, otherwise you need to load it. A decision tree implementation also has this overhead.
2. Until this value is loaded in some form, there is no way to look ahead in the instruction stream-> the indirect calls are dependent on the vtable address. And yes there are multiple possibilities for the instruction stream, and they all depend on the vptr of the object being called. If there were not the case, a direct call could be used.
3. If the vtable is implemented by an array of function pointers, you've got another load to do before you can start filling the pipeline again. If it's an array of jumps, you're incurring only an extra instruction overhead.
4. The fact that the vtable, the functions themselves and the original code are usually at different address neighborhoods, you incur more stress on the CPU caches. This is statistical stress, which may not be a problem with any particular call, but overall more cache misses happen, on average, and in general.
5. It is impossible for compilers to inline virtual methods without global analysis, which is generally precluded from the use of dated linking techniques. This inability precludes an easy solution to #4
6. The previously mentioned need to make all methods that _might_ be overloaded virtual, especially for library code which is difficult for end users to modify.
In short, C++ vtable-based virtual methods incur at least one more instruction to be executed, probably a pipeline stall, can't be inlined, and cause more cache stress.