9 ms·
The Haxl Project at Facebook [pdf]
- shangaslammi 13y agoThese are Simon Marlow's slides from his ZuriHac 2013 talk about Facebook's Haskell DSL for concurrent queries.
- boothead 13y agoI believe Simon is also talking about this at the London Haskell Exchange at skillsmatter in October. I will definitely be attending this one!!
- omn1 13y agoWait, Facebook uses Haskell? I had no idea. There is little information about the size of the codebase though. I could only dig up a talk from 2009 and a tool to modify a PHP codebase with abstract-syntax-tree transformers in Haskell [2]. Can somebody give some more insight on their internal use of the language? Anyway I think it's great that they have a hybrid codebase. With projects like HipHop and this Haskell backend it looks like they are gradually moving away from PHP as their main language. [1]: http://cufp.galois.com/2009/abstracts.html#ChristopherPiroEugeneLetuchy http://cufp.galois.com/2009/abstracts.html#ChristopherPiroEu... [2]: https://github.com/facebook/lex-pass/tree/master https://github.com/facebook/lex-pass/tree/master
- asdasf 13y agoFacebook hasn't been a PHP shop in a long time. PHP is only used on the front end site. New projects that come along are written in whatever language makes sense. Like facebook chat being in erlang for example.
- enigmo 13y agoI heard a rumor a while back that Facebook Chat was rewritten in C++... but I can't seem to find anything to verify that. Do you know if it's still Erlang?
- asdasf 13y agoIt was always both as far as I know. "For Facebook Chat, we rolled our own subsystem for logging chat messages (in C++) as well as an epoll-driven web server (in Erlang)"
- enigmo 13y agoThe rumor was that it had been rewritten in 100% C++...
- asdasf 13y agoNo idea. Sounds like the kind of thing that gets started based on a misunderstanding like someone saying "we wrote that in C++" in reference to part of the chat system. Either way, my point was that facebook isn't a PHP shop. Erlang/C++ or just plain C++, neither is PHP.
- zeckalpha 13y agoWhen it was "erlang" I think they were just running ejabberd.
- asdasf 13y agoEjabberd is not an epoll-driven web server, which is what the quotes from facebook people said they wrote in erlang.
- Ixiaus 13y agoYeah, they also bought out MailRank to get O'Sullivan.
- mightybyte 13y agoYeah, but that wasn't for Haskell.
- tel 13y agoHe isn't working with the Hs group at Facebook?
- mightybyte 13y agoI don't know what he's doing now. But when I talked to him shortly after the acquisition, he was not working on anything related to Haskell.
- evincarofautumn 13y agoHe keeps an eye on it, but he’s not working on Haxl directly.
- AznHisoka 13y agoIt's a shame such cool technology is being put to use for something as trivial as Facebook.
- tel 13y agoThere's a lot of critique that could be leveraged against Facebook, but I don't understand how you could call it trivial.
- freehunter 13y agoIs there any reason it can't be used elsewhere? You could repurpose the solution into your own project and do something less trivial.
- freyrs3 13y agoSimon Marlow said on reddit this morning that some of the technology is getting merged upstream into GHC 7.8. So we'll all benefit from it.
- mcintyre1994 13y agoI'm sort of surprised that Facebook's "friends of" is a directed graph, when the actual social graph is undirected. I guess they use enough directed edges for other things in that graph, but I'm sort of surprised their social graph isn't undirected and ridiculously optimised as its own separate thing.
- seiji 13y agoFor surveillance it's of great importance to know the difference between me being friends with Iranian nuclear scientists, them being friends with me, or us having mutual hugs going on.
- Scaevolus 13y agoAn undirected graph is equivalent to a directed graph with doubled edges. The only efficient way to implement an undirected graph is as a directed graph with doubled edges. You want to list friends of Alice. Directed: query all friend(Alice, X). Undirected: query all friend(Alice, X) OR friend(X, Alice). Finding all friend(X, Alice) will be very slow without an index of all friend relationships with Alice in the second position. Storing this is harder than just storing friend(Alice, X) and friend(X, Alice).
- mcintyre1994 13y agoOh of course, I see what you mean, thanks for the explanation.
- random_coder 13y agoMore generally, in Facebook's social graph, connections can be of different types. For e.g., for a user, 'likes' can be one type of an edge and 'followers'(people he follows) is of a different type, 'followed by'(people who follow him) is yet another type, so on. Many of these types can only be uni directional(e.g., all the above three examples). So, the social graph is a directed graph. Of course, the well known 'friends' connection is a bi-directional type of edge.
- mercurial 13y agoThat's extremely impressive. Datasources pluggable at runtime, no side-effect guarantee, hot-swapping code...
- tel 13y agoThe hot-swapping is very new and experimental, but if facebook has a need then Simon Marlow definitely has the capability bring that back to GHC core. He's already stated at least some of the hot swapping will make it.