Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Talk 6: Edward Yang #6

Open
rrnewton opened this issue Aug 20, 2015 · 21 comments
Open

Talk 6: Edward Yang #6

rrnewton opened this issue Aug 20, 2015 · 21 comments

Comments

@rrnewton
Copy link
Contributor

Practice talk time -- 19:15

@rrnewton
Copy link
Contributor Author

I think the focus on Haskell exclusively makes it seem a bit more parochial than it is -- Java, JS, and all the other managed languages have the same problem! Maybe if it's just "for instance" Haskell, with a gesture at the generality...

@rrnewton
Copy link
Contributor Author

minor note: CNF summary slide came up just before the 6 minute mark.

I guess I would like to hear a punchier statement of "send things over the network in their in-memory format" somewhere earlier...

@rrnewton
Copy link
Contributor Author

On the API example slide -- explaining the omitted initial object with a sentence may take more airtime than just having the initial object there but not talking about it...

@rrnewton
Copy link
Contributor Author

The slide titled "Compaction" that talks about copying into the region "unless its already" there -- it has new in the corner, not append. But new should never satisfy that case of "already there", right?

@cgswords
Copy link

How does append not let you violate the type of region internals? It's not clear what you mean by "a region for each data structure".

@rrnewton
Copy link
Contributor Author

Question: "Do you have any plans to extend this to support types with no thunks, that are always in NF? These would seem to be more likely with the upcoming LANGUAGE: Strict pragma."

@rrnewton
Copy link
Contributor Author

"Safety?" slide -- I was a bit confused by the visual metaphore here. What are the scribbles inside the circle? The whole heap?

@samth
Copy link

samth commented Aug 21, 2015

The default Java serializer is well-known to be orders-of-magnitude worse than good Java serialization libraries.

@rrnewton
Copy link
Contributor Author

"Serialization benchmark" -- which data type is this? It says "number of leaves" but I don't think you mentioned what the data is.

@samth
Copy link

samth commented Aug 21, 2015

Don't assume you'll be able to point at the screen in an effective way.

@rrnewton
Copy link
Contributor Author

"Size blow up!" -- might be nice to list the 10Gbit number instead of 1GBit... We tested on 10G anyway, right?

@rrnewton
Copy link
Contributor Author

@samth - you don't think a laser pointer will do it? Or you're anti-laser pointer? (Because of looking away from audience?)

@samth
Copy link

samth commented Aug 21, 2015

@rrnewton Sometimes laser pointers are very hard to see.

@eholk
Copy link

eholk commented Aug 21, 2015

I love the hand-drawn slides! The conversational, story-telling nature of the talk made it easy to stay engaged.

On the Serialization benchmark slide, the y-axis was labeled slowdown, but you were talking about speedups. I also wasn't sure what "Binary" referred to in the results.

@rrnewton
Copy link
Contributor Author

Question by @ccshan -- confused about the use case. Does a distributed computation "just in time" compact before it sends over the network?

Ed's answer -- in the "pessimal case" you have to compact on send. The trick though is that the data in compact form is still "data you can process in the normal way", you can "amortize the cost of compacting over multiple sends". In some cases you can "already have this compact data lying around so you can use it".

@samth
Copy link

samth commented Aug 21, 2015

Question: how would we do this in OCaml?

@rrnewton
Copy link
Contributor Author

Question by @samth -- "this seems like in principle it could be used in other functional languages, but some details seemed like they relied on Haskell specifics. What would it take to adopt this in OCaml?"

Ed's answer: The biggest challenge is purity. Purity is how we enforce no mutable data in the compact region. If you had some way of checking the data should not be mutable, even at runtime, you could do it."

Sam followup: but IORef is just a type of data.

Ed: Compactable class manages this, Compactible instances are part of the trusted code base.

Sam: But then what is purity buying you?

Ed: I guess technically it doesn't buy you anything.

Sam: so type classes in OCaml would be one way...

@rrnewton
Copy link
Contributor Author

Missed a bit of audio on Ed's response to Cameron... maybe can mention what that was here.

@rrnewton
Copy link
Contributor Author

from @samth: why do you need IO on the compaction methods?

Ed: it could be referentially transparent... but you want it to only happen once.

Ken: something having performance implications should be no reason to put it in IO! Otherwise multiplication should be in IO.

Ed: It doesn't need to be in IO... it just needs to be in some monad that preserves ordering and prevents unsharing.

@cgswords
Copy link

My question was: "Is there an alternative garbage collection strategy that can alleviate some of the problems?"

@ezyang
Copy link

ezyang commented Aug 23, 2015

@cgswords Hey Cam, thanks for your feedback. You commented 'How does append not let you violate the type of region internals? It's not clear what you mean by "a region for each data structure".'; do you remember enough to elaborate more? I'm not completely sure what the confusion here is, but I'd like to fix it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants