Fork me on GitHub
#unrepl
<
2018-02-09
>
cgrand09:02:46

Similarities with unrepl are reassuring design-wise

dominicm09:02:22

I'm surprised this is a thing, given that unrepl exists 🙂

thheller10:02:47

don't know where Rich is going with this but if nothing else "prepl" is fun to say 😉

bozhidar12:02:41

I think he really wants something like this to be part of Clojure itself. Originally we wanted nREPL as part of Clojure and that’s why Chas agreed to move the project under clojure-contrib, but we all know how things played out and how bad this was for nREPL in the end of the day. I guess he finally realized that the design of the socket REPL is not exactly very convenient for tooling, but he might be pursuing some other goal as well.

cgrand12:02:50

>>> Tasseography is a divination or fortune-telling method that interprets patterns in tea leaves, coffee grounds, commit logs, or wine sediments.

cgrand12:02:33

remote-prepl puzzles me: why not reuse the existing server code? it’s just a different accept.

cgrand12:02:18

Why not allow tap> to have a tag argument? Forcing the user to structure the tap data in a way amenable to triage/routing/filtering? It hinders upgradability too.

cgrand12:02:29

:read only on :ret means that the: • the client doesn’t know when the server has started working • you don’t get :read info for exceptions

bhauman13:02:30

Hmmm, why is there no differentiation between a thrown exception value and a returned exception value?

cgrand13:02:44

what do you mean? looking at the code if the return value is an exception you get a :ret msg not a :err msg, no?

bhauman13:02:30

you get a :ret

bhauman13:02:45

err is only for the :err print stream

cgrand13:02:43

oh you are right, I misinterpreted :err

cgrand13:02:32

so I agree with you: one can’t tell an exception being thrown from an exception being returned

cgrand13:02:37

also: why bother converting :ns to string and exceptions to tagged-literals here? shouldn’t it be done in out-fn?

bhauman13:02:10

he's serializing things as that's the intended use

bhauman13:02:03

and it gives a canonical return value in all situations

bhauman13:02:54

I'm still grocking the why of tap> it's so that tooling can send messages back to the client??

cgrand13:02:21

then why not add a topic to avoid having everyone doing it’s pubsub on top

bhauman13:02:20

I'm guessing (not supporting) that its to allow for varied of the pub sub

bhauman13:02:42

maybe there is a use case that needs to dispatch on a raw value and not a keyword

bhauman13:02:12

I can't really conceive of it but ...

cgrand13:02:43

Worst case, give the possibility to subscribe to all topics?

bhauman13:02:47

that would be absolutely necessary, but its an unnecessary feature as its trivial to create dispatch

bhauman13:02:39

ok now I'm getting it, I dig it

cgrand13:02:58

The problem that I see is that if some code start to use tap> as log is that creating dispatch won’t be easy as you’ll have a lot of variance in the payloads

cgrand13:02:12

really? please enlighten me

bhauman13:02:46

sorry I mean I'm getting the tap design and how its useful, I've got no attachment to the dispatch decision

bhauman13:02:36

but the messages you send to yourself will be correct

bhauman13:02:47

and these messages only have handling that is guaranteed by the client

bhauman13:02:58

so its a crappy log fn

cgrand13:02:18

we reached an agreement!

bhauman13:02:52

I appreciate the back and forth on this it's super helpful

bhauman14:02:25

I really see tap> use as (tap> {:id 25 :type :tool/completion :complete (tool/complete "asso"))

bhauman14:02:42

or something like that

bhauman14:02:30

i think you were already there, it took me a minute

bhauman14:02:03

and you'd need a session id as well

bhauman14:02:14

sorry thinking out loud

cgrand14:02:55

don’t! It’s super useful to me too

bhauman14:02:16

and finally I get your point, session level dispatch would be nice at least

bhauman14:02:52

and ultimately I think this is why there is no dispatch, b/c depending on your use you are going to need another level of dispatch granularity

bhauman14:02:21

one repl dispatch on a message type

bhauman14:02:05

repls in parallel dispatch on a session

bhauman14:02:22

and I guess you could have shared sessions etc

cgrand13:02:56

Yeah but there’s also valf that’s going to transform the value

cgrand13:02:21

so out-fn does more than dumb serializing

bhauman13:02:07

yeah but the base value is always ready to transmit

cgrand13:02:21

then why not add a topic to avoid having everyone doing it’s pubsub on top

bhauman14:02:25

everybody gets all the messages!, I'm going to run my chat server and my repl through tap!

bhauman14:02:55

an interesting thing is that clojurescript needs two different types of tap> for tooling

bhauman14:02:16

one that runs in clojurescript land and one that runs in clojure land

bhauman14:02:07

hmmm so we make a macro called meta-tap>

bhauman14:02:26

or not, I have to put some thought into how you would bootstrap the cljs-repl using these new tools

richiardiandrea16:02:15

I have to say I am a bit disappointed, and there no way to see it differently. Unrepl is there, for everybody to contribute to, I wish we did not have so many different clones of the same thing...we'll see how it pans out.

cgrand16:02:56

@richiardiandrea well it validates the core design of unrepl

cgrand16:02:18

and plain repls are still upgradable

cgrand16:02:54

and life may get easier because of changes made for prepl (but won’t ship until 1.10)

richiardiandrea16:02:58

Lol I keep rewriting this sentence over and over...I am just thinking that I would have taken some additional step to make this part (tooling) a bit more open to contributions...

richiardiandrea16:02:10

Don't worry I will switch off my rant mode 😄

cgrand16:02:41

rant-a-car?

richiardiandrea16:02:28

Fixed 😉 tnx

cgrand17:02:19

no, really I’m not sure I get what you are saying; complaining about the “throw features over the wal” approach?

richiardiandrea17:02:29

I mean, we have a project here with a relatively good support from the community...I am just afraid it will get shadowed. Instead it could have been additive, I hope it will be additive as you were saying and the two will thrive along together.

richiardiandrea16:02:24

But yeah, we know how Clojure works 😃

cgrand16:02:54

Currently I’m seeing unrepl as a toolkit for creating custom (private) protocols for tools. It provides a foundation, some design decisions have been made etc. But unrepl is not “consumer tech”: got a tool? got a plain repl? it works!

richiardiandrea16:02:22

Yep that is definitely nicer

bhauman23:02:16

I'd really love your feedback