UmbralRaptor changed the topic of #kspacademia to: https://gist.github.com/pdn4kd/164b9b85435d87afbec0c3a7e69d3e6d | Dogs are cats. Spiders are cat interferometers. | Космизм сегодня! | Document well, for tomorrow you may get mauled by a ネコバス. | <UmbralRaptor> egg|nomz|egg: generally if your eyes are dewing over, that's not the weather. | <ferram4> I shall beat my problems to death with an engineer. | We can haz pdf
smkz has joined #kspacademia
<egg|laptop|egg>
whitequark: if you are going for a tag (so reset{}) I tend to put tags last, the ones in the standard I can think of are first but also have to be (piecewise_construct, in_place). On the other hand I like the idea of Meow{old_top}, but then I would call it AdoptBlackBoxes{old_top}
<egg|laptop|egg>
an adapter for adoption,
<whitequark>
then AdoptBlackBoxes would have to be a template though
<whitequark>
which is kind of meh
<whitequark>
makes it just that harder to understand
<egg|laptop|egg>
right.
<egg|laptop|egg>
then tag I guess, (adopt is still probably a decent name)
<whitequark>
everything not explicitly mentioned is default-initialized?
<egg|laptop|egg>
I think you just pass p_top by value, (and the caller moves it)
<egg|laptop|egg>
and yes, the unmentioned are default-initialized
<egg|laptop|egg>
also note obviously that the ugliness can be localized, this can all be private with a static factory for resetting
<whitequark>
hrm
<egg|laptop|egg>
or even a non-static member that does *this = p_top(std::move(*this), adopt{})
<egg|laptop|egg>
and then you can do it without friending even, with the constructor in each layer doing p_top(p_top old, adopt tag) : p_blackbox(old.p_blackbox.reset()) {}
<whitequark>
> or even a non-static member that does *this =
<egg|laptop|egg>
uh, well, reset returning the class is weird, this is not java
<whitequark>
well yes the idea is that reset() would be that non-static member
<egg|laptop|egg>
yeah
<egg|laptop|egg>
so for avoiding friending probably a lambda
<whitequark>
i could make the adopting constructor public and then each of them would recursively call adopting constructor on submodules
<egg|laptop|egg>
I want to try doing the thing I suggest in that tweet someday though, it sounds like a potentially nice thing to have (and an absolutely horrendous thing to write)
<whitequark>
egg|laptop|egg: hm, i don't understand the part where i take p_top by value
<whitequark>
does binding a by-value parameter to a prvalue guarantee that there's no copy?
<egg|laptop|egg>
I never understood what a ',r.pchslvalue was
<whitequark>
... or is that a xvalue
<whitequark>
neither do I apparently
<whitequark>
well like, moving old_top produces a p_top&&, right?
<egg|laptop|egg>
right
<whitequark>
so if i bind p_top to p_top&&, is a copy always avoided?
<whitequark>
this seems not obvious
<egg|laptop|egg>
yeah, that is how it works
<egg|laptop|egg>
with & you take the old object but it’s not obvious from the signature that you are invalidating it
<egg|laptop|egg>
if you take a value, well, you have it, and the caller moves, so knows that the moved-from object cannot be used
<egg|laptop|egg>
(and static analysers can know that too)
<whitequark>
i.. hm
<whitequark>
that's cursed but i see your point
<whitequark>
... why can't i just make p_top&&, again?
<whitequark>
*just take
<egg|laptop|egg>
you could, but it’s usually unnecessarily restrictive
<whitequark>
that constructor will be used in exactly 1 call site so i'm fine with that
<egg|laptop|egg>
is p_top copiable? if it is not then you need not worry about copy risks
<whitequark>
it is not
<whitequark>
but the signature is confusing
<whitequark>
cxxrtl will be mostly used by people not familiar with intricacies of c++
<whitequark>
and in practice they (so far) would open the sources and find them readable
<whitequark>
i want to keep it that way
<egg|laptop|egg>
it is what I’d consider most idiomatic, taking && is really for strange edge cases in my eggsperience
<egg|laptop|egg>
(taking this by && is an even higher level of edgecaseyness)
<egg|laptop|egg>
huh erincandescent likes my cursèd fenv though
<SnoopJ>
watching Herb Sutter's cppcon talk made me happy and also angry because in/out/inout/move/forward sounds awesome, but I don't want to wait that long for it ;_;
<_whitenotifier-9244>
[Principia] pleroy labeled pull request #2803: Make ephemeris flows interruptible and stop unused prognosticators - https://git.io/JIveT
egg|cell|egg has quit [Ping timeout: 198 seconds]
egg|cell|egg has joined #kspacademia
egg|cell|egg has quit [Ping timeout: 198 seconds]
<_whitenotifier-9244>
[Principia] pleroy opened pull request #2804: Use Clenshaw-Curtis in the piecewise Poisson series inner product - https://git.io/JIL3l
<_whitenotifier-9244>
[Principia] pleroy synchronize pull request #2804: Use Clenshaw-Curtis in the piecewise Poisson series inner product - https://git.io/JIL3l
<galois>
title: Shared album - Robin Leroy - Google Photos
<egg|laptop|egg>
Also south vietnam didn’t use F-4s
<egg|laptop|egg>
umbralraptop: but the cursedness is in the words, not in the aircraft
* umbralraptop
can only tell T-38s and F-5s apart by the later having a LERX
<umbralraptop>
It's like MiG-25s and 31s all over again
<umbralraptop>
also, huh
<egg|laptop|egg>
umbralraptop: I mean, it true, it contain canopy,,,
egg|laptop|egg has quit [Remote host closed the connection]
egg|cell|egg has joined #kspacademia
egg|laptop|egg has joined #kspacademia
<_whitenotifier-9244>
[Principia] eggrobin labeled pull request #2804: Use Clenshaw-Curtis in the piecewise Poisson series inner product - https://git.io/JIL3l
<umbralraptop>
Today in email silliness: GMU now has a fancy campus-wide MATLAB license. Of course, since our various codes are fully divested from MATLAB now (synapsid's) or never used it at all (mine)...
<egg|laptop|egg>
synapsid?
<egg|laptop|egg>
is the synapsid a cat
<umbralraptop>
As best I'm aware he's a human
* smkz
meows :3
<egg|laptop|egg>
smkz: how cursed is that F-5
<_whitenotifier-9244>
[Principia] pleroy closed pull request #2804: Use Clenshaw-Curtis in the piecewise Poisson series inner product - https://git.io/JIL3l
<_whitenotifier-9244>
[Principia] pleroy pushed 11 commits to master [+0/-0/±37] https://git.io/JILuf
<egg|laptop|egg>
Suitable for use of aromatic fuel
<egg|laptop|egg>
but that got moved to the end of the blurb and garbled
<egg|laptop|egg>
smkz: context: the F-5 is displayed in front of the independence palace as an illustration of the kind of plane that was used by a southern defector who ineffectively bombed the palace on his way out
<egg|laptop|egg>
smkz: and somehow they tried to restore the paint job and markings that it would have had and, uh, could not into english
<egg|laptop|egg>
also I guess they might have been going off of shitty photos since some of the errors are shitty homoglyphs
<egg|laptop|egg>
e.g. PULL "D" HANDLE OUT 6FT becoming PULL HANDLE OUT GET
<smkz>
oic
<umbralraptop>
suitable for use of aromatic fuel makes it sound like someone is comparing heptane with tolulene <_<
<egg|laptop|egg>
and then random renumbering because whoever was doing that had no idea what it meant, so 2. PULL "D" HANDLE OUT 6FT / TO JETTISON CANOPY and became 2. PULL HANDLE OUT GET / 3. TO JETTISON CANOPY
<egg|laptop|egg>
I mean tbh eventually if you jettison canopy you want to out get,,,
<smkz>
tru
<smkz>
that is the eventual goal of jettisoning the canopy
<galois>
NASA: National Aeronautics and Space Administration (in practice Nearly Always Some Acronym)
<egg|laptop|egg>
so it looks like the ones numbered 1F-5E-2-something are ORG MAINT
<umbralraptop>
!acr -redef NSAS National Aeronautics and Space Administration (in practice Nearly Always Some Acronym, or if you're looking for funding Not A Science Agency)
<galois>
Definition added!
<egg|laptop|egg>
whereas the -1 is the flight manual
<egg|laptop|egg>
umbralraptop: NSAS?
<umbralraptop>
!acr -redef NASA National Aeronautics and Space Administration (in practice Nearly Always Some Acronym, or if you're looking for funding Not A Science Agency)
<galois>
Definition added!
<umbralraptop>
!acr -dell NSAS
<galois>
Invalid command. Valid forms: !acr -add:LMAO Lagrange Made Awesome Orbits, !acr -redef:ROFL Rare Occultations for Life, !acr -del:IEEE
<umbralraptop>
!acr -del:NSAS
<galois>
Acronym not defined
<umbralraptop>
NSAS?
<egg|laptop|egg>
so then I guess in that context it makes sense to refer to the "applicable -2 T.O."
<umbralraptop>
!acr -del NSAS
<galois>
Invalid command. Valid forms: !acr -add:LMAO Lagrange Made Awesome Orbits, !acr -redef:ROFL Rare Occultations for Life, !acr -del:IEEE
* umbralraptop
wonders what acronym I actually added
<egg|laptop|egg>
I don’t think NSAS was a thing
<egg|laptop|egg>
NSA?
<egg|laptop|egg>
!acr -redef:NSA No Such Acronym
<galois>
Definition added!
<egg|laptop|egg>
NSA?
<galois>
NSA: No Such Acronym
<egg|laptop|egg>
redef actually adds if it is not there already
<umbralraptop>
Not to be confused with ISAS
<umbralraptop>
!acr -redef:NSA No Such Agency
<galois>
Definition added!
<umbralraptop>
egg|laptop|egg: also, I didn't have the colon in that initial NSAS tyop
<umbralraptop>
neutron star atmospheres are wild. Scale heights can plausibly be in the cm range, despite temperatures of 10s of eV
<SnoopJ>
o.O
<egg|laptop|egg>
!acr -redef:NSA Neutron Star Atmosphere | North-South Asymmetry | Northern Study Area | NASA Standard Assay | National Security Agency
<galois>
Definition added!
<umbralraptop>
I could have the *exact* numbers wrong
<umbralraptop>
yeah, hundred or even thousands of eV are possible from that link
<umbralraptop>
500,000 K atomic hydrogen (or well free protons) at the surface of a 15 km radius 2 solar mass neutron star would have a scale height of... 3.5 mm @_@
<egg|laptop|egg>
whitequark: https://twitter.com/whitequark/status/1334258562600669186 I think the verbosity is a red herring (have you seen Java, or even C++ tbh, and preferences wrt verbosity can go the other way just as well); GNAT is shit indeed, but there are other things: many of the features were too fancy for the compilers of the time and implemented inefficiently so you didn’t benefit from them, and there is the i
<egg|laptop|egg>
mage of « the language of the DoD » (and also the fact of « the language whose features were dictated by random DoD reqs »)
<egg|laptop|egg>
e.g. a requirement was that you can uncooperatively abort another task, with defined semantics, so there is a tonne of language complexity for « yes but what happens if we get an abort there »
<egg|laptop|egg>
(and then in practice in aerospace they didn’t do tasking, they used a cyclic executive, so it was not a requirement they had »
<egg|laptop|egg>
s/ »/)/
<galois>
egg|laptop|egg meant to say: (and then in practice in aerospace they didn’t do tasking, they used a cyclic executive, so it was not a requirement they had)
<egg|laptop|egg>
there are some things that induce verbosity but they are more fundamental misfeatures than direct verbosity, e.g. the fact that you need to explicitly instatiate every generic, because every instatiation is different
<whitequark>
egg|laptop|egg: there's a *lot* of backlash against java
<whitequark>
like, there's a reason that every android developer who is still sane is migrating to kotlin or something
<whitequark>
that said, note that i'm not saying much about popularity of Ada *in general*; i'm specifically singling out open-source
<SnoopJ>
Kotlin is pretty stuzzy, I worked through the katas last weekend
<SnoopJ>
the organization of the katas is stupid but I like the language
<egg|laptop|egg>
whitequark: right but the open-source ecosystem we have did not come out of a vacuum; and while everybody grumbles about it, I had the misfortune of writing some Java server code today
<egg|laptop|egg>
whitequark: just chatted about that with phl@ and he points to two things (in 1983 which is when it matters; the language of 2005 or even 95 comes after the battle, network effects have killed it)
<egg|laptop|egg>
some severe shortcomings in 83 even though it was best in class elsewhere, most notably the lack of function pointers
<egg|laptop|egg>
and compilers were expensive, in large part because the language was so complex compared to what was around at the time, to an extent also because the writers thought they had a captive market thanks to DoD mandates
<egg|laptop|egg>
We are talking about the age of K&R C, you just had your university ad hoc compiler for your uni’s dialect of FORTRAN 77 or C (or Pascal if you were at ETHZ) or whatever, those languages were simple enough that the compilers could be written in those environments, and that was free
<egg|laptop|egg>
you can’t really have « your uni’s C++20 compiler »
<galois>
[WIKIPEDIA] WATFIV#WATFOR-77 | "WATFIV, or WATerloo FORTRAN IV, developed at the University of Waterloo, Canada is an implementation of the Fortran computer programming language. It is the successor of WATFOR.WATFIV was used from the late 1960s into the mid-1980s. WATFIV was in turn succeeded by later versions of WATFOR.Because..."
<whitequark>
is it really certain that Ada lost by 1995?
<egg|laptop|egg>
whitequark: also beyond the price of the compiler, you had the price of the hard to run it
<whitequark>
there's lots of niche languages with relatively large amount of OSS code
<egg|laptop|egg>
(again compare compiling C89 and C++20, the latter is going to be expensive on 80s hard)
<_whitenotifier-9244>
[Principia] pleroy opened pull request #2805: Cache the evaluations at the Gauss-Legendre points - https://git.io/JILKs
<egg|laptop|egg>
by 95 it no longer had the headstart of being the only game in town for generics etc., and you were starting to get a serious ecosystem around C
<egg|laptop|egg>
> became stable within that tree sometime in the late GCC 3.X series.
<egg|laptop|egg>
that’s what, the 2000s?
<egg|laptop|egg>
whitequark: OCaml comes from academics (french academics even), so this is really a concern: if you can’t teach your class in Ada without begging the digital equipment corporation for a compiler, you’re going to pick somewhere else, and that language will get no traction in that world
<egg|laptop|egg>
and writing an Ada compiler is really no small undertaking (and anyway by the 90s if you are an academic who wants to write a compiler you probably want to design a language, not write WATFIV)
<egg|laptop|egg>
so with that in 2005 you can have a function Integrate that takes an anonymous access to subprogram and returns the integral
<egg|laptop|egg>
before that, Integrate would have to live shorter than the integrand
<egg|laptop|egg>
or to be a generic instantiated with the integrand, that works
<egg|laptop|egg>
but e.g. for callbacks etc. the generic approach is too limiting
<egg|laptop|egg>
(also it is clumsy to write and it generates a lot of code)
<egg|laptop|egg>
whitequark: apparently the « no function pointers » thing was from the DoD reqs, they wanted to be able to know where control would go at any call, so can’t have function pointers, but genericity on functions is fine because you can look at the instantiation to see where you go
<whitequark>
so basically CFI
<egg|laptop|egg>
CFI?
<whitequark>
control flow integrity
<whitequark>
CFI is a bit of a different approach
<whitequark>
but similar in goals
<egg|laptop|egg>
(and then once they realized they wanted them it took two versions to add « function pointers but safe », because that’s not exactly trivial)