mananaysiempre
Joined 5 years ago
Joined 5 years ago
PyPy lacks upstream interest, looked like it could have a shot after many years of development but recently NumPy removed support because they just couldn’t fathom how a non-dead project could be a couple of versions behind CPython.
Now the new JIT is dying because of what seems to be a lack of upstream interest. (The things TFA describes as being required are not unreasonable, but not realistic for a necessarily speculative long-running project without wild amounts of committed funding.)
I’m not optimistic.
[1] https://www.iso.org/stages-and-resources-for-standards-devel...
The only surprising part is how good the results are: there is no leftover color noise that I can see, the window doesn’t have any color fringing, the high-frequency detail of the table setting and the drapes hasn’t been destroyed, the small backlit hairs on the sides of the face of the girl in front haven’t been smeared over oil-painting style. It’s strange how one eyebrow (in the back) got completely obliterated while the other looks completely fine, and it’s even stranger how the texture of the collar (in front) is basically perfect on the left where it’s unobstructed but basically destroyed on the right where some hair escaping from the braids was in front of it, so perhaps there is some image-gen-adjacent stuff going on here.
The skin looks bad, don’t get me wrong. But the degree of badness seems fair for the situation, and as a whole the result has no business looking as good as it does to my 2016-camera-trained eye.
(Also, don’t photograph people with a wide-angle lens from up close, it’s always freaky at best—like here—and ugly at worst. Just don’t.)
Partly, though, it’s a bit more interesting than that[1]. Wikipedia has an interesting chart[2] titled “Lifespan of each United States president”, which shows that in modern-ish times, the generation from which US presidents come is sticky: you get three presidents born ca. 1855, then one born ca. 1865, two ca. 1875, three from the late 1880s, four(!) from the 1910s (starting with “young” JFK), Carter/Reagan/Bush Sr. oscillate between the 1910s and 1920s, then again four from the 1940s (starting with “young” Clinton) only interrupted by “young” Obama (born 1961). (I could start my recounting earlier and it would still work.) Trump and Biden appear abnormal if you look at their ages, but if you look at their birth years instead they are simply a backslide, after Obama, to the generation of Clinton and Bush Jr.
What does appear true is that generations hold onto their power for longer and longer before the snap transition to the next eligible generation happens. Longer life expectancy due to better medical care seems like a perfectly satisfactory explanation for that.
[1] I first read about this idea a few years ago and I don’t remember where, so I’ll need to attempt my own explanation. Sorry.
[2] https://en.wikipedia.org/wiki/List_of_presidents_of_the_Unit...
Rust did not invent this (and I don’t believe Rust’s creators claim it did), see e.g. “Linear regions are all you need”[1] (ESOP 2006) and in general the work around Cyclone[2] in the 2000s. There was also Mezzo[3], which did very similar things but described them in a different style (effects instead of affine types), and a fair bit of work that went beyond what Rust can currently express (e.g. fractional capabilities). What Rust did is succeed at bringing a conservative subset of this academic work to production—which is not a small deal, mind you; others (including the Cyclone team) tried and failed.
[1] https://link.springer.com/chapter/10.1007/11693024_2, https://www.cs.cornell.edu/people/fluet/research/substruct-r...
[2] https://gallium.inria.fr/~fpottier/slides/fpottier-2007-05-l...
(Plenty of things sucked, don’t get me wrong, it’s just that a lot of the fallout from the “war on terror” was still in the upper atmosphere.)
[1] https://int10h.org/oldschool-pc-fonts/fontlist/font?ibm_vga_...
And I think you’re being unfair labelling my couple of examples “some arbitrary algorithm[s]”: my choice was indeed arbitrary, but it’s also immaterial. The general setup would be that you’re processing elements in a loop and that your iterations are serialized (as they usually more or less are before you get around to optimization). A loop body of even three lines of C is likely to have a latency of 5–10 cycles or so, and you’re running on a core clocked somewhere from 5 GHz (desktop) to half that (server). So the best you should expect is ~500 MB/s if your elements are bytes, ~2 GB/s if they’re 32-bit integers, etc. For very simple tasks (that are also somehow not susceptible to vectorization), it is possible to not lose this order of magnitude and get down to almost 1 cycle/element in scalar code, but that requires heroic effort[1].