Better than a programmer disappearing off the face of the earth leaving code he wrote on a workstation backup in a closet somewhere, were it will never be able to be used by anybody else.
Why? Are we all pack-rats?
Writing new code would take a certain amount of effort. Making sense of the code and trying (and failing) to locate the maintainer also takes a certain amount of effort. How do we know the first is always greater than the second?
Proliferation of dead projects also clutters search results, and should make it harder to find the live projects.
A few bits from the "article" that seemed interesting, like the interviewer was being a bit of an ass. Approximately every other paragraph is supposed to be italicized, and in fact does have the <i></i> tags, but that somehow doesn't seem to be showing up.
In my opinion, the main thing lacking in c++ is that it's not possible to get a pointer to a function in a class instance. This meant that any code based on the windows API could not be "eloquently" wrapped into objects.
What do you mean? Are you saying that "void(X::*y)(int)" (declare y as a pointer to a member function of class X that takes an int and returns void) doesn't exist? That classes can't contain function pointers as member variables? Something else?
And, BTW, duck typing is *not* the same as type inference, which is what you see in ocaml and Haskell.
I know the difference, it looks like I just misremembered what Ocaml can (or can't) do:
# type aaa = X | Y | A;;
type aaa = X | Y | A
# type aaa = X | Y | A;;
type aaa = X | Y | A
# type bbb = X | Y | Z;;
type bbb = X | Y | Z
# let foo e = match e with X -> 5 | Y -> 4 | _ -> 0;;
val foo : bbb -> int =
# let bar e = match e with X -> 5 | Y -> 4 | A -> 2 | _ -> 0;;
Error: This pattern matches values of type aaa
but a pattern was expected which matches values of type bbb
#
Only since Python and particularly Ruby fans started using it as a way to market a feature in their pet language (dynamic typing coupled with dynamic dispatch) that's been available in existing languages for *many* years. It's a marketing term, nothing more. It adds nothing to the actual discussion, other than to sound all neat and cutsey.
Standardized terminology adds quite a lot to any discussion.
And I would define it as dynamic typing and binding. Nothing more. The language determines, at run time, how to bind a method call to an object. It's just that simple.
What do you call what Ocaml does?
Templates, on the other hand, are realized at compile time.
C++ templates are a turing-complete functional programming language, and are executed by the compiler. What you think of as "compile time" is the same as "runtime" for the templates.
What I should've said is that duck typing == dynamic dispatch + dynamic typing. Either way, it's hardly a new idea. And it's an idea that does *not* fit in a language that's meant to be strongly, statically typed (eg, C++).
Duck typing does not require dynamic dispatch, and does not (strictly) require dynamic typing. All it requires is that what matters is "I have a multiply() method" rather than "I am a number".
First, what you young bucks like to call 'duck typing', as cutesy as that sounds, the computing science world calls 'dynamic dispatch'. And it's hardly a new concept (see Smalltalk for a classic example). But, hey, what's old is new and shiny again, right?
No. Dynamic dispatch is what for example virtual methods (or multimethods) do, where which version of the code gets called depends on the types of the arguments. Duck typing is where instead of you telling the compiler what types of arguments are allowed, it either figures it out entirely on its own (ocaml, I think) or just checks at runtime instead (dynamic languages).
Concepts in C++ should have had the same effect for Generic Programming in C++ that C++ had for Object Oriented Programming in C. The should have democratized generic programming and brought forth a renaissance in C++ library design. Instead, petty politics killed the most exciting change to C-like languages in years.
Given "Things could have been much worse. In particular, we could have made the seriously flawed "concepts" part of the standard." and "By building directly on the pre-Frankfurt concepts and applying modifications along the lines I suggested in "simplifying the use of concepts" we could have had something acceptable (IMO) within months, but that will not happen now. Instead, we must re-evaluate the basics of concepts and rebuild more or less from scratch (relying on the experience gained so far)â"and experiment. My stated estimate is that that will take on the order of five years, but that it will happen.", I'm thinking that concepts being delayed (not killed) means they'll actually be significantly better that they would have been without being kicked out of this particular revision of the standard.
Second thing on my must-have list is a pre-pre-processor. I'm tired of writing all these header files all the time. I want a way to generate them programmatically, at compile time.
That would actually be kinda cool. Have something that will take your file and pull out function declarations, pull out the public parts of your class definitions, and rewrite your classes to use the pimpl idiom to hide the private parts properly. It'd also be good to have it get rid of slicing problems, but first you'd have to be able to overload the "." operator and determine the base classes of your template parameters.
Which conclusions do you draw, if any, from the failure of concepts? How do you feel about this whole affair?
You mean from the decision not to ship concepts more or less as is for C++0x? I am not of the opinion that concepts have failed. My position was that we needed only a few weeks to "fix" what in my opinion were serious usability problems. Obviously, a majority of the committee didn't agree with that timescale. [...] Things could have been much worse. In particular, we could have made the seriously flawed "concepts" part of the standard.
The specification of concepts has taken seven years. By contrast, the standardization of the entire STL took about half that time. What is so complicated about concepts?
I count the concepts work as started in 2002; I presented my first design papers in 2003. In 1994 Alex Stepanov presented a complete implementation of the STL to Andrew Koenig and me, but 2002-to-2009 and 1994-to-1998 are not comparable time lines. Alex had been working on the STL from at least 1976.
So perhaps the conclusion is that concepts were doomed to fail because they try to fix so many things at once, by transforming C++ into an almost new language? After all, the whole notion of templates is a bit problematic in C++â"what the programmer writes or reads is quite different from the actual (unseen) code that the compiler generates and parses when it processes a template instance.
No. I don't think that concepts were doomed to fail. Also, I don't think concepts were trying to fix many things or to transform C++ into an almost new language. [...] I do not think that templates are "a bit problematic." For starters, they are not macros. Programmers should no more worry about the transformations a compiler performs on template code to produce executable code than they do about the transformations compilers do for non-template code to produce executable code
In March 2009, several months after the acceptance of Concepts into the WD, Howard Hinnant was the first to ask: "What is the risk in requiring Joe Coder to be concept-aware? What is the benefit?" It's surprising that these questions hadn't arisen much earlier during the design process. Doesn't that indicate the committee should have more checks and balances, especially when it comes to adding a new feature that is as pervasive as concepts?
I suspect some members of the committee will seriously resent those questions and consider them proof of ignorance or ill will. [...] The committee operates according to ISO rules. Those are quite ponderous and biased in favor of not upsetting status quo. [...] I don't think we need more formal "checks and balances." If anything, the balance may have tilted too far toward caution for the long-term good of the language.
However, the committee has no similar "field research lab" for core language features. Consequently, pervasive core language features might be incorporated into the WD without sufficient experience and testing. That's what happened with concepts I believe. Would a "staging core C++" organization be feasible and useful?
You are wrong in your characterization of what happened to concepts. In that case, we did have a "staging lab." It was conceptGCC, the people working on concepts (mostly at Indiana and Texas A&M universities), and the people trying to use concepts in libraries (many from Boost).
So now programmers can write code that will work on either processor and will be optimized on neither. Brilliant. I'm sure this is somehow a great step forward.
-sigh-
Um, what? How does the existence of a compiler that generates x86 code prevent the existence of an optimizing compiler that generate GPU instructions?
The ad company could just run the server (if the files were truly static, they could do so at pretty low cost).
Maybe. When not running adblock, I've noticed that a large part of page load time often seems to be waiting for ad servers. So I think that ad companies must not have proper incentives to make their servers fast... but for per-view ads they really will need to trust the admin of some machine talking directly to the reader (and I suppose running their own program on someone else's hardware wouldn't work, that someone else could fairly easily do things like make fake page requests from arbitrary addresses).
Still, users who wanted to block those ads could participate in a system that let them flag content that was an advertisement and subscribe to a list of content that had been flagged as advertising (there would be some issues to deal with as far as unreliable users, but I doubt it would be a significant problem).
That would actually be pretty good, since users would likely only report the annoying ads. So there should be some feedback as to what annoys people and what doesn't. Assuming the definition file doesn't grow to something like 20MB.
Its only a matter of time before they figure out how to circumvent adblocking software. The more that use it, the more likely it will be that they'll find a way around it.
Host all static files (including ads) on one server using Content Addressed Storage, all URLs look like http://hostname/sha1_hash . Maybe have a program controlled by the ad company that either reads the server log file as it's written or proxies all http connections and counts the ones that correspond to the advertisements.
If Oracle doesn't support that, then I would say their implementation is broken.
I'd just suspect it's more than 4 years old (hmm, looks like the 10gR2 we're using was actually released in 2005, and that RFC is dated October 2005). The "standard" is "this seems to be what most people are doing" rather than "here's the definition of a cool new format".
Clearly, you can represent tree style data with CSV, but it has more flexibility than you think.
Hm, cool. Also, ick.
Too many people roll their own CSV, because it seems so simple. Then they don't quote and escape quotes properly blaming any issues on garbage data.
...and then I have to tweak it into the csv dialect that Oracle understands.
All that aside, the way these projects' being open source will make this better is by making a patch come out sooner. The community knows there is a problem. Someone will get on finding it right away, and in a day or two we will see patches getting pushed out that fix it. There's no sitting around helplessly hoping we don't get DoSed until someone at MegaSoft Corp. decides this is worth fixing and rolls a patch.
This is because the Community has unlimited volunteer resources available on very short notice, and large corporations with many paid full-time employees do not.
What happens when your data contains \r or \n characters? (I know Oracle's sqlldr / external tables at least will reject that row, and I don't believe they recognize any escape sequence for this.) What happens if the data has commas in it, and the.csv was generated by something that doesn't add quotes?
What do you do if your data is more complicated than a simple table?
Maybe I'm misunderstanding, but I get the impression from the summary that Bell is hijacking domain queries, meaning that users can't easily choose not to use their provider's DNS services.
Your ISP always provides a couple of caching DNS resolvers, and it tells your computer about them when you get your IP address (ie, provided by the DHCP server). So your computer will by default send all DNS queries through your ISPs DNS resolvers, and they can send you whatever garbage results they want.
This is most likely "only" Bell making their DNS resolvers (that everyone uses, because they're the default) malicious, and not them redirecting traffic mean for other DNS servers to their servers.
Better than a programmer disappearing off the face of the earth leaving code he wrote on a workstation backup in a closet somewhere, were it will never be able to be used by anybody else.
Why? Are we all pack-rats?
Writing new code would take a certain amount of effort. Making sense of the code and trying (and failing) to locate the maintainer also takes a certain amount of effort. How do we know the first is always greater than the second?
Proliferation of dead projects also clutters search results, and should make it harder to find the live projects.
Does anyone else just immediately stop listening when they see words like 'meme'?
Perhaps 'meme' is a fnord.
A few bits from the "article" that seemed interesting, like the interviewer was being a bit of an ass. Approximately every other paragraph is supposed to be italicized, and in fact does have the <i></i> tags, but that somehow doesn't seem to be showing up.
In my opinion, the main thing lacking in c++ is that it's not possible to get a pointer to a function in a class instance. This meant that any code based on the windows API could not be "eloquently" wrapped into objects.
What do you mean? Are you saying that "void(X::*y)(int)" (declare y as a pointer to a member function of class X that takes an int and returns void) doesn't exist? That classes can't contain function pointers as member variables? Something else?
And, BTW, duck typing is *not* the same as type inference, which is what you see in ocaml and Haskell.
I know the difference, it looks like I just misremembered what Ocaml can (or can't) do:
# type aaa = X | Y | A;;
type aaa = X | Y | A
# type aaa = X | Y | A;;
type aaa = X | Y | A
# type bbb = X | Y | Z;;
type bbb = X | Y | Z
# let foo e = match e with X -> 5 | Y -> 4 | _ -> 0;;
val foo : bbb -> int =
# let bar e = match e with X -> 5 | Y -> 4 | A -> 2 | _ -> 0;;
Error: This pattern matches values of type aaa
but a pattern was expected which matches values of type bbb
#
Only since Python and particularly Ruby fans started using it as a way to market a feature in their pet language (dynamic typing coupled with dynamic dispatch) that's been available in existing languages for *many* years. It's a marketing term, nothing more. It adds nothing to the actual discussion, other than to sound all neat and cutsey.
Standardized terminology adds quite a lot to any discussion.
And I would define it as dynamic typing and binding. Nothing more. The language determines, at run time, how to bind a method call to an object. It's just that simple.
What do you call what Ocaml does?
Templates, on the other hand, are realized at compile time.
C++ templates are a turing-complete functional programming language, and are executed by the compiler. What you think of as "compile time" is the same as "runtime" for the templates.
What I should've said is that duck typing == dynamic dispatch + dynamic typing. Either way, it's hardly a new idea. And it's an idea that does *not* fit in a language that's meant to be strongly, statically typed (eg, C++).
The principle of duck typing says that you shouldn't care what type of object you have - just whether or not you can do the required action with your object.
CeePlusPlus: Templates can create compile-time polymorphism via DuckTyping (as used in AndreiAlexandrescu's ModernCeePlusPlusDesign as well as Microsoft's ActiveTemplateLibrary).
In computer programming, duck typing is a style of dynamic typing in which an object's current set of methods and properties determines the valid semantics, rather than its inheritance from a particular class or implementation of a specific interface. [...]"when I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."
Duck typing does not require dynamic dispatch, and does not (strictly) require dynamic typing. All it requires is that what matters is "I have a multiply() method" rather than "I am a number".
First, what you young bucks like to call 'duck typing', as cutesy as that sounds, the computing science world calls 'dynamic dispatch'. And it's hardly a new concept (see Smalltalk for a classic example). But, hey, what's old is new and shiny again, right?
No. Dynamic dispatch is what for example virtual methods (or multimethods) do, where which version of the code gets called depends on the types of the arguments. Duck typing is where instead of you telling the compiler what types of arguments are allowed, it either figures it out entirely on its own (ocaml, I think) or just checks at runtime instead (dynamic languages).
Concepts in C++ should have had the same effect for Generic Programming in C++ that C++ had for Object Oriented Programming in C. The should have democratized generic programming and brought forth a renaissance in C++ library design. Instead, petty politics killed the most exciting change to C-like languages in years.
Given "Things could have been much worse. In particular, we could have made the seriously flawed "concepts" part of the standard." and "By building directly on the pre-Frankfurt concepts and applying modifications along the lines I suggested in "simplifying the use of concepts" we could have had something acceptable (IMO) within months, but that will not happen now. Instead, we must re-evaluate the basics of concepts and rebuild more or less from scratch (relying on the experience gained so far)â"and experiment. My stated estimate is that that will take on the order of five years, but that it will happen.", I'm thinking that concepts being delayed (not killed) means they'll actually be significantly better that they would have been without being kicked out of this particular revision of the standard.
Second thing on my must-have list is a pre-pre-processor. I'm tired of writing all these header files all the time. I want a way to generate them programmatically, at compile time.
That would actually be kinda cool. Have something that will take your file and pull out function declarations, pull out the public parts of your class definitions, and rewrite your classes to use the pimpl idiom to hide the private parts properly. It'd also be good to have it get rid of slicing problems, but first you'd have to be able to overload the "." operator and determine the base classes of your template parameters.
I'm not reading this article because it's on 20 different pages. STOP THAT SHIT.
Seriously. There really needs to be some way to administer a small electric shock to both the submitter and the editor for things like this.
So now programmers can write code that will work on either processor and will be optimized on neither. Brilliant. I'm sure this is somehow a great step forward.
-sigh-
Um, what? How does the existence of a compiler that generates x86 code prevent the existence of an optimizing compiler that generate GPU instructions?
Host all static files (including ads) on one server using Content Addressed Storage
And lose positions in the search engines, which use keywords in URLs to help determine relevance.
Eh, they can't be planning to stick with that for too long, and your main pages probably come out of a CMS instead of being static anyway.
The ad company could just run the server (if the files were truly static, they could do so at pretty low cost).
Maybe. When not running adblock, I've noticed that a large part of page load time often seems to be waiting for ad servers. So I think that ad companies must not have proper incentives to make their servers fast... but for per-view ads they really will need to trust the admin of some machine talking directly to the reader (and I suppose running their own program on someone else's hardware wouldn't work, that someone else could fairly easily do things like make fake page requests from arbitrary addresses).
Still, users who wanted to block those ads could participate in a system that let them flag content that was an advertisement and subscribe to a list of content that had been flagged as advertising (there would be some issues to deal with as far as unreliable users, but I doubt it would be a significant problem).
That would actually be pretty good, since users would likely only report the annoying ads. So there should be some feedback as to what annoys people and what doesn't. Assuming the definition file doesn't grow to something like 20MB.
Its only a matter of time before they figure out how to circumvent adblocking software. The more that use it, the more likely it will be that they'll find a way around it.
Host all static files (including ads) on one server using Content Addressed Storage, all URLs look like http://hostname/sha1_hash . Maybe have a program controlled by the ad company that either reads the server log file as it's written or proxies all http connections and counts the ones that correspond to the advertisements.
Surprised, why?
Reality has a well-known anti-Microsoft bias, so any pro-Microsoft results are clearly due to tampering.
VirtualBox doesn't include USB support in the Open Source version
I thought this changed recently?
If Oracle doesn't support that, then I would say their implementation is broken.
I'd just suspect it's more than 4 years old (hmm, looks like the 10gR2 we're using was actually released in 2005, and that RFC is dated October 2005). The "standard" is "this seems to be what most people are doing" rather than "here's the definition of a cool new format".
Clearly, you can represent tree style data with CSV, but it has more flexibility than you think.
Hm, cool. Also, ick.
Too many people roll their own CSV, because it seems so simple. Then they don't quote and escape quotes properly blaming any issues on garbage data.
...and then I have to tweak it into the csv dialect that Oracle understands.
Except CSV isn't a standard.
The IETF might disagree with you.
"This memo provides information for the Internet community. It does not specify an Internet standard of any kind. "
All that aside, the way these projects' being open source will make this better is by making a patch come out sooner. The community knows there is a problem. Someone will get on finding it right away, and in a day or two we will see patches getting pushed out that fix it. There's no sitting around helplessly hoping we don't get DoSed until someone at MegaSoft Corp. decides this is worth fixing and rolls a patch.
This is because the Community has unlimited volunteer resources available on very short notice, and large corporations with many paid full-time employees do not.
CSV FTW.
What happens when your data contains \r or \n characters? (I know Oracle's sqlldr / external tables at least will reject that row, and I don't believe they recognize any escape sequence for this.) What happens if the data has commas in it, and the .csv was generated by something that doesn't add quotes?
What do you do if your data is more complicated than a simple table?
Ok, why is the increased sale of ice cream correlated to the increased number of shark attacks?
Probably that both are caused by hot weather.
You don't really need them... but if you're designing the hardware, they're probably the cheaper option.
Maybe I'm misunderstanding, but I get the impression from the summary that Bell is hijacking domain queries, meaning that users can't easily choose not to use their provider's DNS services.
Your ISP always provides a couple of caching DNS resolvers, and it tells your computer about them when you get your IP address (ie, provided by the DHCP server). So your computer will by default send all DNS queries through your ISPs DNS resolvers, and they can send you whatever garbage results they want.
This is most likely "only" Bell making their DNS resolvers (that everyone uses, because they're the default) malicious, and not them redirecting traffic mean for other DNS servers to their servers.
Isn't this sort of forgery exactly what DNSSEC is supposed to prevent?
(And no, don't go suggesting DNSCurve. It doesn't protect against your ISPs caching resolver being malicious like this.)