A minimal language that doesn't have resources like Golang to put in the stdlib is just not gonna work.
A minimal language that doesn't have resources like Golang to put in the stdlib is just not gonna work.
Yes io.Copy works with any Reader and Writer but dig into the documentation and there's a runtime check for the revised ReaderFrom and WriterTo interfaces that you might also implement for faster performance. It's just something you have to know, otherwise you will not get an optimal copy.
Go 1 is right on the edge of being a big language, but what might stop it is that Google don't need it to get any bigger.
Yes. Rust suffers from this problem. The language is now reasonably solid, but library quality and stability is all over the place. I've been annoying people in the Rust community by saying that it's time to get all widely used crates (over a million downloads, or depended upon by a widely used crate) to version 1.x. After that, no breaking changes without a major version change. Crates with re-exported types from lower levels force groups of crates into lockstep update.
The big advantage of Go is that the libraries for doing server-side web stuff are the ones used internally by Google. So they've been thoroughly exercised. The obscure case that comes up once in a trillion transactions probably happened a hundred times in the last hour in a Google server farm.
It annoys me to no end the huge number of packages I pull in for doing something "simple". It is great that packages can be so small and focused, but now I have a real trust problem. How am I possibly supposed to ensure there are no malicious actors in my dependency tree?
How far along the ridiculous dependency spectrum towards NPM is crates.io?
For example, if I release a piece of nontrivial software built with Rust, how many copyright notices am I going to have to include? (To say nothing of vetting the set of transitive dependencies!)
The Rust foundation's crate manager job is apparently vacant until at least April, so nobody is officially in charge of this.
Relevant XKCD: [1]
My take on this for game development: [2]
[1] https://imgs.xkcd.com/comics/dependency_2x.png
[2] https://www.reddit.com/r/rust_gamedev/comments/11b0brr/were_...
They make the claim that it’s about pushing them into the standard library but some of those libs have been in there forever.
Go on the other hand, is a language I’m still confident I can teach a junior enough to be useful in an afternoon.
The restraint shown by the Go team is admirable in how well they’ve stuck to their vision.
Functionality moves (c) => (b) => (a).
Unless it's a DSL, the osmotic power is strong.
(remove-if-not #'oddp #(1 2 3 4 5))
you have to write a loop from scratch, and then everyone has to read it carefully to learn what it’s doing (and especially what it’s not).Don’t get too excited about having HTTP or JSON built in, we weren’t using those in 1990 and they’ll surely be replaced by 2050.
That probably wouldn't be the case if it had been named retain-if or keep-if; the issue is likely the double negative.
A function which pares down a sequence to just those elements which match a predicate is very useful; why would you deprecate such a thing.
These days the function is usually called filter, but I'm not sure it was a commonly used term then.
It'a terrible name, by the way. A filter separates; it has two outputs. Does a function named filter return the filtrate or the residue? And I just had to look up filtrate to check which one of the two it refers to and what is the opposite term. From now on I will remember that there is residue captured in a filter, and filtrate is not that.
That would be terrible, those loops are crazy dangerous. I would avoid writing a loop and rather come up with a whole different programming paradigm. Maybe a macro system or something based on category theory?
You just really don’t need much to get stuff done with a lisp.