aleph

pithyless 2023-08-07T11:03:57.128979Z

Based on the previous thread, I thought it would be interesting to do some git archaeology on aleph/manifold. ๐Ÿงต

pithyless 2023-08-07T11:05:16.954899Z

> Aleph - "initial commit" - July 7, 2010 > Aleph is an asynchronous web server, built on top of "Netty". It conforms to the interface described by "Ring", with one small difference: the request and response are decoupled. https://github.com/clj-commons/aleph/commit/30f04aa94e279c1eb4672fc1cb55b2767f975353 > core.async - "initial commit" - May 15, 2013 > A Clojure library designed to provide facilities for async programming and communication https://github.com/clojure/core.async/commit/3ed968b132a2dacd76dcb0f2744eff48fcce58e4 > core.async - "Rename core.async. -> clojure.core.async." - May 29, 2013 https://github.com/clojure/core.async/commit/9b93d1f5e3cab00d58bfa8e0c04c1bbeeea49c2d > core.async announced - June 28,2013 https://clojure.org/news/2013/06/28/clojure-clore-async-channels > Manifold "first commit" (actually called "Eventual" at the time) - March 4, 2014 > This library provides basic building blocks for asynchronous programming, and can be used as a translation layer between libraries which use similar but incompatible abstractions. https://github.com/clj-commons/manifold/commit/e26bb678669784b90da62ebced592e6fcfd3cda7 > Manifold "base stream implementation, rename to 'manifold'" - April 1, 2014 > Introduces: org.clojure/core.async "0.1.267.0-0d7780-alpha" https://github.com/clj-commons/manifold/commit/e4b8939137c069605599409e739cbe6f6a722087 > Aleph "tear it all down" commit - July 27, 2014 > Introduces: manifold "0.1.0-SNAPSHOT" https://github.com/clj-commons/aleph/commit/b4759eb63975e8f85d266e3dbb512d62c3ae5451 > Aleph "initial http server implementation" - July 31, 2014 > Introduces: byte-streams "0.2.0-SNAPSHOT" https://github.com/clj-commons/aleph/commit/7209a16d02649174eefdd26b4c7fe63ca48ff9a1 > Aleph "update readme" - September 22, 2014 > This is a ground-up rewrite of Aleph. https://github.com/clj-commons/aleph/commit/5d877e9738e3cd59165cb7308cdbef3e667d344f

๐Ÿ‘ 1
pithyless 2023-08-07T11:13:08.860709Z

So, to answer your question @francesco.pischedda and @kingmob - both Rich Hickey and Zach Tellman were obviously thinking about and working on these problems before 2013. But I would hazard a guess that Manifold was a direct descendant of ripping out and reimagining the existing aleph codebase after core.async came out (which as I recall had made a lot of noise at the time it was announced and was prominent in the Clojure zeitgeist).

Francesco Pischedda 2023-08-07T11:24:47.820489Z

Hi @pithyless ! ๐Ÿ‘‹ Thank you for the additional background ๐Ÿ™

Matthew Davidson 2023-08-07T12:29:37.974859Z

Nice detective work! I think if we want to go back to the pre-code ideation phase, though, it's important to note that both of them were heavily inspired by Go's use of Communicating Sequential Processes and channels as communication primitives. I'd bet that's probably a bigger influence than either were on each other. Remember, Go had been out for a few years then, and had garnered a reputation for fast network programming and concurrency.

pithyless 2023-08-07T12:39:51.497849Z

I wasn't suggesting either of them independently invented CSP. ;) Was there something specific that you're aware of that linked them specifically to Go's CSP? Those two individuals are well known for their extensive paper research - I'm sure they were well aware of CSP, irrespective of Go. But maybe their implementation was heavily inspired. I wasn't there, I wouldn't know. ๐Ÿคท

Matthew Davidson 2023-08-07T12:56:33.540559Z

I can't think of any talks about the inspiration for manifold off the top of my head. But in particular, academic CSP views channels as an implementation detail, while Go showed they were a useful, maybe necessary, primitive for actually using CSP in production. And AFAIK, there's no popular CSP-based language before Go. Also, there's no way they wouldn't have heard of Go at the time. The creators were famous, it was backed by Google, and it had been out for a few years before either clj lib existed. It got a lot of attention from the outset. If anything, core.async might owe the bigger debt to Go, since a lot of Manifold's terminology and interop is closer to the Java streaming libs that arose around then.

๐Ÿ‘ 1