Presumably he’s not serving the model but running it, which is cpu bound, in which case Goroutines would solve the problem.
4,767 karma · joined November 25, 2014
Presumably he’s not serving the model but running it, which is cpu bound, in which case Goroutines would solve the problem.
The idea is that callers/clients define the structure they’re going to use. If the caller needs something that can hold food, then only things that hold food can be passed in. If the caller depends on having four legs, then only things with four legs can be passed in. If the caller depends on four legs and can hold food, only objects that satisfy both properties can be passed in. The type doesn’t choose which structures it implements (that’s nominal typing) the type just is and it either implements a contract / has the right structure for a given client or it doesn’t. Check out Go’s interfaces for a more concrete example.
> Again, from my pov, a dynamic-like language is a lot more tolerant with the unknown unknowns of which the open world is full of, it doesn't depend on any "structure implementation" being defined or on anyone else counting the legs of said table.
This is inherently untrue because structural typing is simply the formalization of the same logic you use when composing programs in a dynamic language. The same logic that lets Python document an argument as “file-like” is formally expressed in a static language as “anything with methods read(), write(), seek(), close(), etc”. This still gives you the openness you need (you can pass in other types even if they don’t know about your file-like interface) but it guards against runtime TypeErrors and AttributeErrors.
Give static typing an earnest try. And be discerning about the source of friction you encounter: is it because static typing is making it harder for you to write big-prone code? Is it because the language makes heavy use of inheritance (and nothing to do with static typing at all)? Is it because the language is very verbose (and nothing to do with static typing at all)? Or maybe the language has a bizarre syntax and jargon-laden, conflicting documentation, in which case these also aren’t properties of type systems but rather functional languages ;).
You’re advocating for structural typing, which is a property of (many) static type systems. The view you project onto Aristotle/Plato/static-type-advocates is nominal typing, which is just a different kind of static typing. Many languages support both kinds (for example, Go, Rust, and Python’s static type system, Mypy).
Note that languages with structural typing will correctly accept your stone table and reject objects unsuitable for holding food (where “holding food” is the structure a type must implement) while a dynamic type system will happily allow anything to be passed in as the table, including a waterfall or communism and you’ll be none the wiser until your bread is wet or your country is starving.
I don’t understand the desire to make this out to be a sort of dichotomy—both groups have the right to do what they did (the maintainer to reject patches and even allegedly lie about the security properties of his project and the critics to criticize even in bad taste) and both parties could have handled it better. TFA did a fine job for implicitly acknowledging this by simply referring to the situation as sad all around.
> The problem wasn't the criticism, but the expectation that said criticism invokes a certain behavior of the maintainer.
Of course it implies that the maintainer should change. All criticism implies an expectation of change, at least when the opportunity to change is still available.
> Everything else is just trying to force people to do stuff for you, and that's rude.
Criticism isn't "force" or "attempted force". This is just criticism. If you think criticism is rude, that's fine. Hypocritical, but fine.
You can't rationally say the maintainer is within his rights for rejecting security patches and then argue that critics are wrong for criticizing these practices.
That would be unfortunate, because I'm very clearly not saying any such thing. Specifically, asking about the magnitude of discrimination is not asserting that it doesn't exist at all. For what it's worth (hopefully very little), I'm a True Believer in discrimination--it exists, I've experienced it. I'm skeptical about specific truth claims about discrimination (notably claims that it explains a significant part of any gap in the US). I'm also skeptical about social science's ability to accurately study discrimination due to its political homogeneity and track record (more on this below).
> It is very easy to find ample evidence of discrimination documented in published peer-reviewed studies.
Undoubtedly. It's easy to find peer-reviewed studies that support almost any popular conclusion; however, I'm not looking to confirm my own biases (nor anyone else's) but rather to understand what's really going on. Notably, neither the IAT study and Goldin's orchestra study should have passed peer review and yet they did and were held up as exemplary for decades. Between issues like these and the social science replication crisis, I don't put much stock in individual studies.
> The other exasperating thing is at presenting evidence almost never work. The step after someone has presented evidence of discrimination is for the person who doesn't "believe in discrimination" to challenge the result. Either the result doesn't actually prove discrimination or the study is flawed in some way so you can't draw any conclusions.
Discrimination is indeed difficult to prove; the reasonable response isn't to be frustrated that others remain skeptical after being shown problematic evidence, but rather to question why you are compelled by said problematic evidence. Skepticism is the reasonable position here. Note again that skepticism about various discrimination claims isn't the same thing as asserting the opposite of those claims. Note also that skepticism about various discrimination claims doesn't mean that we need to stop investigating discrimination; it merely means we don't have conclusive evidence (and consequently, we probably shouldn't be drafting policy that could hurt people or otherwise propagating myths about the conclusiveness of said evidence).
EDIT: Downvoters, what's wrong with this comment? Are downvotes disagreement? If so, do you have anything to substantiate your position? If it's not disagreement, what could I do to improve the quality of my post to make it acceptable?
> In the early days of Mercurial's Python 3 port in 2015, Mercurial's project maintainer (Matt Mackall) set a ground rule that the Python 3 port shouldn't overly disrupt others: he wanted the Python 3 port to more or less happen in the background and not require every developer to be aware of Python 3's low-level behavior in order to get work done on the existing Python 2 code base. This may seem like a questionable decision (and I probably disagreed with him to some extent at the time because I was doing Python 3 porting work and the decision constrained this work). But it was the correct decision. Matt knew that it would be years before the Python 3 port was either necessary or resulted in a meaningful return on investment (the value proposition of Python 3 has always been weak to Mercurial because Python 3 doesn't demonstrate a compelling advantage over Python 2 for our use case).
As a general rule, this seems like good practice, but surely b-strings, print_function, etc are a trivial upfront cost, and one that would have to be paid sooner or later anyway?