hkaiser changed the topic of #ste||ar to: STE||AR: Systems Technology, Emergent Parallelism, and Algorithm Research | stellar-group.org | HPX: A cure for performance impaired parallel applications | github.com/STEllAR-GROUP/hpx | This channel is logged: irclog.cct.lsu.edu
<hkaiser> john98zakaria[m]: I'll merge it, this will build the image
<hkaiser> let's see
<hkaiser> john98zakaria[m]: do we need to modify the CI that builds the docs?
<hkaiser> do we need to activate the Python env in some way there?
<john98zakaria[m]> <hkaiser> "do we need to activate the..." <- No need to activate the environment, I applied the venv to the whole container running python / pip will result in invoking the virtual environment. As I appended the the new venv to path it gains precedence over the system env.
jbalint has quit [Quit: Bye!]
jbalint has joined #ste||ar
<hkaiser> so, IIRC, it's automatically activated
<john98zakaria[m]> Yes
<hkaiser> nice, thanks!
<hkaiser> once the image is ready I'll retrigger the docs PR
<john98zakaria[m]> I think it's time to collect a tshirt 😁
<hkaiser> absolutely! send me your preferred t-shirt size and mailing address (email it)
<hkaiser> also if you prefer a white or a black one
<john98zakaria[m]> What's your email address?
<hkaiser> hartmut.kaiser@gmail.com
aalekhn has quit [Quit: Connection closed for inactivity]
K-ballo has quit [Quit: K-ballo]
hkaiser has quit [Quit: Bye!]
Yorlik has joined #ste||ar
Yorlik_ has joined #ste||ar
Yorlik has quit [Ping timeout: 244 seconds]
Yorlik has joined #ste||ar
Yorlik_ has quit [Ping timeout: 258 seconds]
Yorlik_ has joined #ste||ar
Yorlik has quit [Ping timeout: 255 seconds]
Yorlik has joined #ste||ar
Yorlik_ has quit [Ping timeout: 258 seconds]
Yorlik has quit [Ping timeout: 276 seconds]
Yorlik has joined #ste||ar
K-ballo has joined #ste||ar
hkaiser has joined #ste||ar
<john98zakaria[m]> <hkaiser> "once the image is ready I'll..." <- Did the docs get built?
Undername has joined #ste||ar
<hkaiser> the image was built and pushed to docker hub
<hkaiser> I will retrigger the PR now
Undername has quit [Quit: Leaving.]
<john98zakaria[m]> <hkaiser> "let's see: https://app.circleci..." <- It worked :)
<hkaiser> \o/
<hkaiser> looks good - thanks everybody !
calla has joined #ste||ar
calla has quit [Remote host closed the connection]
<gonidelis[m]> K-ballo: https://leanpub.com/cpp17 ;)
<K-ballo> gonidelis[m]: that's the book from the photo?
<gonidelis[m]> ye
<K-ballo> thanks
<gonidelis[m]> two questions:
<gonidelis[m]> 1. what's the purpose of void `tag_invoke();` here?
<gonidelis[m]> 2. can u have a `-` in a namespace name?
<gonidelis[m]> `namespace tag-invoke{`
<gonidelis[m]> also what do they mean exposition only?
<gonidelis[m]> K-ballo: hkaiser
<hkaiser> gonidelis[m]: it's a 'poison pill' preventing lookup of tag_invoke in the inner namespace
<gonidelis[m]> ...
<gonidelis[m]> its an empty function declaration, that I understand
<gonidelis[m]> but later on it's been used in the concepts declaration
<gonidelis[m]> though we don't know exactly what it's doing
<hkaiser> it's not used anywhere
calla has joined #ste||ar
<hkaiser> we rely on ADL to find the correct overload, that's why the invocation is hidden in a seprate namespace
<satacker[m]> "unqualified lookup for tag_invoke finds only the declaration"
<K-ballo> gonidelis[m]: the cursive names are pseudo identifiers, they don't actually exist in code, that's why the dashes
<satacker[m]> "unqualified lookup for tag\_invoke finds only the declaration void tag_invoke();"
<K-ballo> it's also what exposition only means
<gonidelis[m]> K-ballo: means I cannot actually write this code down and expect it compile?
<gonidelis[m]> satacker: nice!
<K-ballo> you can write it and it will compile if you introduce your own identifiers
<gonidelis[m]> hkaiser: invocation hidden in a separate namespace?
calla has quit [Remote host closed the connection]
<gonidelis[m]> what do you mean poison pill?
<hkaiser> as said, it prevents finding the tag_invoke overload inside that namespace
<gonidelis[m]> > If there is an identifier that you want to prohibit in your source code, you can β€œpoison” it, in order to get a compile error if that identifier appears in your codebase.
<gonidelis[m]> got it
<K-ballo> mnope, that's not the same kind of poison thing
<K-ballo> ordinary lookup looks for a name in a given scope, and if it doesn't find anything, it tries again in the outer scope, and so on and so forth until the global scope
<K-ballo> the customization point poison pill is there to give something to ordinary lookup, so that it stops looking right there and won't find some global tag_invoke or whatever
<K-ballo> note the poison tag_invoke takes no arguments at all, so the candidate selected by ordinary lookup will never be viable
Undername has joined #ste||ar
<K-ballo> it's as if ordinary lookup had effectively been disabled, so the code is essentially performing only argument dependent lookup
<satacker[m]> That's so awesome
<gonidelis[m]> K-ballo: > note the poison tag_invoke takes no arguments at all, so the candidate selected by ordinary lookup will never be viable
<gonidelis[m]> what do you mean the candidate will never be avail?
<gonidelis[m]> the candidate is the poison?
<satacker[m]> it does not take the tag (and not any args as well), ig
<gonidelis[m]> yes that I can see
<gonidelis[m]> I am asking what does the candidate will never be avail? What is the candidate? The user calls `tag_invoke` unqualified, ordinary lookup hits the poison, then... fails? or keeps looking further up?
<gonidelis[m]> * be avail mean? What
<gonidelis[m]> what if the user just calls `tag_invoke()`
<gonidelis[m]> and are we actually talking about the unqualified case or the `std::tag_invoke()` one?
<gonidelis[m]> (I wanna punch stuff rn cause this is the 1000th time I go through tag_invoke and still don't get it 100%)
<K-ballo> the end user can't never reach the pill
rtohid[m] has joined #ste||ar
<K-ballo> I think std::tag_invoke(std::tag_invoke) may reach the pill, not sure
<K-ballo> no, scratch that, it's an object
<K-ballo> you'd have to define a different tag_invoke then make an unqualified call to your own tag_invoke using std::tag_invoke as the argument
Undername has left #ste||ar [#ste||ar]
<gonidelis[m]> what's the purpose of the pill if the user can not reach it?
Undername has joined #ste||ar
<gonidelis[m]> <gonidelis[m]> "I am asking what does the..." <- also what bout that?
Undername has left #ste||ar [#ste||ar]
<K-ballo> what would be the point if the user reached it, it's not defined
<K-ballo> and even if it were defined, it takes no arguments, so it's never viable
<K-ballo> it's certainly not there to be called
<K-ballo> it's there to stop ordinary lookup within the tag-invoke eo-namespace from looking outside of it
<gonidelis[m]> why?
<gonidelis[m]> how could ordinary lookup reach there?
<K-ballo> ?
<K-ballo> within the exposition only tag-invoke namespace
<K-ballo> that's an unqualified call, so you get both ordinary lookup and argument dependent lookup
<K-ballo> tell me what ordinary_lookup will do with that call
<satacker[m]> Ordinary lookup finds `tag_invoke` within namespace scope but signatures don't match hence switch to ADL?
<K-ballo> it's not a switch, they both take place
<gonidelis[m]> K-ballo: what does exposition only mean?
<gonidelis[m]> what is its purpose?
<K-ballo> exposition
<K-ballo> it's used to define via code how something behaves, without the code actually existing
<gonidelis[m]> how do you define via code how sth behaves w/o actually writing the code down?
<K-ballo> what stops you from doing it?
<gonidelis[m]> the non existence of code
<K-ballo> ?
<gonidelis[m]> you understand what i am saying
<K-ballo> no
<gonidelis[m]> ok exposition-only does not have to compile
<gonidelis[m]> i didn't know that
<gonidelis[m]> it's a rough description
<K-ballo> it does have to compile
<K-ballo> if it doesn't compile it doesn't have meaning
<gonidelis[m]> ok
<gonidelis[m]> back to subject
<gonidelis[m]> <K-ballo> "tell me what ordinary_lookup..." <- it will look within the tag_invoke_t_ns, it will crash into `void tag_invoke();` (there is no definition there, shouldn't that be an error) and it will stop looking
<gonidelis[m]> obviously that's not the case, but that's what i see as a logical path
<K-ballo> "crash" isn't the most appropriate word
<gonidelis[m]> whatever
<gonidelis[m]> hit
<gonidelis[m]> find
<K-ballo> name lookup only looks up names, it doesn't care about definitions
<gonidelis[m]> ah
<K-ballo> the result of name lookup won't change based on whether something is defined or not
<gonidelis[m]> alright
<gonidelis[m]> so what's wrong with my suggestion
<K-ballo> what's your suggestion?
<gonidelis[m]> it will look within the tag_invoke_t_ns, it will crash into void tag_invoke(); and it will stop looking
<gonidelis[m]> stop looking further up ^^
<gonidelis[m]> so ordinary lookup "fails" (?) and ADL kicks in ?
<K-ballo> to be entirely correct, it will keep looking but it won't go past the namespace
<gonidelis[m]> K-ballo: right?
<K-ballo> ordinary lookup and argument dependent lookup are orthogonal, they both take place independently and at the same time
<gonidelis[m]> and who wins if both find sth?
<gonidelis[m]> who decides who wins?
<gonidelis[m]> and how?
<K-ballo> neither wins, the candidate set is made of the union of all their results
<gonidelis[m]> find sth suitable that fits^^
<gonidelis[m]> there has to be a prevalent candidate in the end no?
<gonidelis[m]> or is that runtime ?
<K-ballo> that's something overload resolution will do, name lookup just finds names
<gonidelis[m]> so we basically form the set compile time and see what happens when things spark?
<K-ballo> it returns a set of candidates, from which later overload resolution will try to pick a "winning" candidate
<K-ballo> spark?
<gonidelis[m]> overload resolution is in compile time or runtime?
<K-ballo> overload resolution is in compile time
<gonidelis[m]> spark = start the execution
<K-ballo> it's entirely type based
<K-ballo> no, not spark at all
<gonidelis[m]> coo
<gonidelis[m]> awesome
<gonidelis[m]> again going back
<gonidelis[m]> is my suggestion correct until that point?
<gonidelis[m]> so we amputate ordinary lookup and ADL kicks in
<gonidelis[m]> ADL then sees `tag` and looks into `Tag`'s namespace
<gonidelis[m]> ????
<K-ballo> no
<K-ballo> ordinary lookup completes successfully, and adl also completes successfully, they are independent
<K-ballo> don't bother with the "cute" terminology, it's hindering you
<gonidelis[m]> ok but does not contribute to the overload set (ordinary lookup I mean)
<gonidelis[m]> cute, you mean?
<K-ballo> "crash", "spark", "amputate"
<K-ballo> ordinary lookup most definitely contributes to the overload set, it contributes the poison pill
<gonidelis[m]> making it in popular terms helps normal folk understand it
<K-ballo> "popular" terms don't have meaning
<gonidelis[m]> is normal folk
<gonidelis[m]> \me
<K-ballo> we are discussing a technical specification
<gonidelis[m]> they have to diverge from the exact reality that's true cause they contribute more to understanding. that's not a debate between formalism and pop science tho
<gonidelis[m]> ok, it ONLY contributes the pill!
<gonidelis[m]> that's the catch ^^>
<gonidelis[m]> ?
<K-ballo> except crash means something else in technology, spark doesn't imply runtime at all to me, and amputate suggests to me something completely different than what the spec is actually doing
<gonidelis[m]> i shall respect your definition boundaries then
<gonidelis[m]> bottom line is that we only want ADL to find the overload that will eventually prevail?
<K-ballo> yes
<gonidelis[m]> and that's the purpose of the poison
<gonidelis[m]> and the reason that we do not want ordinary lookup to go further up is ...?
<K-ballo> if I define void tag_invoke(int) at global namespace then ordinary lookup would find it
<K-ballo> without the pill, that is
<gonidelis[m]> would find it if you didn't have the pill
<gonidelis[m]> yes
<gonidelis[m]> sounds like that should be with every standard facility name, no?
<K-ballo> why?
<gonidelis[m]> cause we want to reserve the name for the facility we provide (as standard library authors i mena)
<gonidelis[m]> s/mena/mean/
<K-ballo> names are only reserved within the std:: namespace (...and sometimes maybe the global namespace)
<K-ballo> furthermore, the name tag_invoke isn't reserved
<K-ballo> it would be pointless if it were reserved, since it's meant for users to customize
<gonidelis[m]> awesome
<K-ballo> unless by "reserve" you mean something cute instead
<gonidelis[m]> no
<gonidelis[m]> how could the compiler find my outside std tag_invoke definition?
<gonidelis[m]> ordinary lookup would stop deeper in
<K-ballo> you should be able to figure that out
<K-ballo> we just discussed exactly how we want std to find outside tag_invoke definitions
<gonidelis[m]> i thought this was std::tag_invoke
<gonidelis[m]> scratch that
<hkaiser> K-ballo: 'cute' ??
<gonidelis[m]> he means fancy
<hkaiser> ;-)
<K-ballo> "cute" in scare quotes, yes
<gonidelis[m]> Scare quotes lol πŸ˜‚
Undername has joined #ste||ar
Undername has left #ste||ar [#ste||ar]
<K-ballo> today, in fun with boost... https://github.com/boostorg/test/issues/340
<hkaiser> somebody tried to be overly smart when designing this...
<K-ballo> that's probably true for most if not all of boost, but in this case it feels different.. just fundamentally wrong
<hkaiser> I agree
<K-ballo> hkaiser: were you involved in getting boost.lightweight_test started?
<hkaiser> not directly, but the ideas might have come from spirits test suite