6,887 karma · joined June 7, 2011
evan.martin@gmail.com
My posts on HN: https://news.ycombinator.com/from?site=neugierig.org
I mean, it's great that you can write threaded code with more confidence, but it seems the conclusion here is that Rust gives you more confidence but not absolute confidence and you still need the normal stable of runtime detection tooling. The second fix[1] in particular resembles the bad pattern of "sprinkle atomics it until it works" you see in non-Rust languages.
(If this comment raises your hackles, please read the "no true Scotsman[2]" fallacy before responding.)
[1]: https://hg.mozilla.org/integration/autoland/rev/044f8b594c71 [2]: https://en.wikipedia.org/wiki/No_true_Scotsman
The first question I have is about the business model — people already sadly often cut the dentist when cutting costs, so it seems like it would be hard to get a lot of people paying you $50-100 for a test whose outcome is either “you are ok” or “more costs incoming”. How do you see it working?
https://www.typescriptlang.org/play?#code/FDDGHsDsGcBcAJrwLz...
(I still think this is actually due to bug in TypeScript, see https://github.com/microsoft/TypeScript/issues/31990 .)
Within Google we include a "strict" d.ts in every compilation that shadows this API (and one other) with one that instead returns "unknown". We have talked about going through the whole TS API and removing all the 'any' in this manner for this reason.
https://html.spec.whatwg.org/multipage/server-sent-events.ht...
When A/B are not well-maintained upstream, distributions can assist by updating its dependency D, but even when A/B are well-maintained upstream, distributions still might monkey with them when D changes, even when that change to D actually breaks the software. To me, the root cause is that the distributions are effectively attempting to participate the software they ship, but do so by getting in the middle, rather than participating upstream.
As a former author of some well-maintained upstream software I found their involvement made the software overall worse, but as a user of a distribution I find their maintenance of otherwise unmantained software sometimes helpful. In other words, I think the goal is admirable but the mechanism is wrong, and doing things like adding more dynamic linking only further enable the bad behavior.
(Disclaimer: I worked on Chrome. I believe the conclusion "uses a lot of RAM" is correct, but it doesn't mean the reasoning that led to there is right.)
My blog post linked above goes more into the consequences -- ideally you'd formally define what the allowable language subset is.
https://evmar.github.io/js-min-bench/
What I discovered there is that the best minification is one where you just produce an empty file -- it's 0 bytes of output and extremely fast.
And if you say "wait, I have have the additional requirement that you didn't break the code in the original file, obviously!", you then must define what exactly "break" means in that requirement-- for example, it could be that some user requires that someFunction().toString().charAt(10) == 'a', in which case even removing whitespace counts as breakage.
You might think the above is just being overly pedantic or pathological, but it demonstrates a principle that actually ends up mattering, which is that you can't evaluate a minifier unless you define what a successful minification even means. Particularly in the case of more advanced transformation.
I went into it more in this post:
http://neugierig.org/software/blog/2019/04/js-minifiers.html
For what it’s worth, it’s very hard to be sure switching brands is the causation of a better outcome vs just a correlation. Babies change rapidly so it’s possible that unrelated development is there true source of recovery. But it was definitely a dramatic difference for us exactly when we switched formulas too.
[1] https://news.ycombinator.com/item?id=21298472 , definitely worth a read if you care about salmon
Not ironic, intentional. Chrome was made by former Firefox engineers, and the name was a joke about exactly this. I remember struggling to come up with a better name for the app other than this code name and then they eventually launched it with it anyway.
https://static.googleusercontent.com/media/research.google.c...
To get this fully correct, note that you would need to model all inputs that Inkscape might read, which includes not only binaries but also configuration files or dynamically-loaded plugins. Some systems (I think tup?) track this by tracing executed binaries to see which file system operations they do.
Even with tracing it can be really subtle: for example if a C file has an #include "foo.h", creating a new file named foo.h earlier in the include search path is a meaningful change, which means a file-access-tracing build system also needs to track file-not-found results from previous executions.
(For C programs, also note that getting header dependencies correct includes similarly tracking all the headers in /usr/include that your program transitively includes. See the -MD vs -MMD flags to gcc.)
But the description from this article suggests they're trying to make the chemo more targeted to the site of the tumor. That seems to counteract what I had understood to be the point of chemo.
Can you explain? (In case it wasn't obvious from the above, I have low knowledge in this area.)
I think (a) it's still possible, per https://chromium.googlesource.com/chromium/src/+/master/docs... .
(b) Creating new .so files that shadow functions in others is an interesting idea! I think you're implying that the executable wouldn't pick them up for free, which I think is true, but I'm not actually sure. I forget the details of how this works but it might be that you could just play tricks with the order of the files to make them shadow.
In practice with a fast linker (I used gold at the time, but I think lld is even faster than gold now) it doesn't matter so much as long as you keep the component libraries small enough. But my info is also nearly a decade out of date now...