Did anyone ever take the work done by Eve and carr...
# thinking-together
w
Did anyone ever take the work done by Eve and carry forward the torch and keep developing those ideas? If not, why not? Was the approach a dead-end? I got the sense that it was a promising direction but they simply ran out of money/motivation. I haven’t looked deeply into everyone’s projects here, but been lurking for a while and I don’t seem to hear of any projects that claim to be descendants of Eve--though I could be wrong.
m
I think http://mech-lang.org/home.html is trying to continue on that area?
s
What would you say are Eve’s ideas?
✔️ 2
i
Yeah, there were lots of very different and orthogonal things in there over the years 🙂 which are you specifically interested in?
w
I click "Learn" on http://mech-lang.org/home.html and get a blank page. Presumably its trying to use its own tech to show itself off, but its not working. Any docs?
i
@Corey ^
👍 1
w
Checked out Mech and it seems to be done by @Corey, who I think was also on the Eve team? Couldn’t get the tutorial to work though. @ibdknox I think where you guys ended up was a logic programming model using a datalog variant implemented with differential dataflow for the iterations, and were firm on that being a good underlying programming model. The question with all the variations was how to best present that programming model to users, and it was unclear if it should be a wiki, a grid, or like a notebook. It does seem like a promising direction, but my impression (and limited purview) is most people seem keen on exploring visual programming (hooking up components) or types in functional programming. Was just wondering if people decided to go in a different direction after seeing Eve for a specific reason.
g
the mech webpage doesn’t work on mobile at the moment (and maybe other platforms) so i’d try a different browser on desktop
if search still works, chris has given hints in this chat about where his next projects have been focused. i may be able to dig them up if required
w
@Garth Goldwater I'm on desktop (Chrome), and it doesn't work.
w
@Garth Goldwater Sure, I’d be interested to see the hints about what direction he’s been going in next. Would I just search for his handle in slack?
i
were firm on that being a good underlying programming model
@Wil Chung Honestly, I'm not sure I'd say that. It's definitely an interesting model, I don't know if it's a good one. For example, we came to the conclusion that you really want to compile away the "database" stuff. Towards the end of Eve, I worked on a really crazy compiler based on abstract interpretation that tried to do exactly that (in Eve actually!). In terms of the semantics, the 0.2-0.4 versions of Eve were quite powerful, but did have a downside - it was easy to lose the forest for the trees. Nothing gave the blocks a concrete structure and it was difficult to understand the behavior that emerged from them. This was particularly evident in anything workflow-y or process-y.
I think it's probably a dead-end to have a system that is either only declarative (Eve) or only imperative. You need to be able to flow between the two so that things that are most easily expressed in one or the other can live together.
❤️ 1
At several points throughout Eve, we talked about introducing something statemachine-like to help with that and we actually implemented them in Eve itself, but it never really felt right.
After we shut things down, I worked on a language that was based on dataflow with embedded statemachines which was very promising. Since then we've flipped it around and had the focus on statemachines with dataflow computations embedded in them, which is looking very cool. 🙂
w
@ibdknox interesting, would love to hear where that goes..
i
The intent is to share more as we learn 🙂
w
@ibdknox What does “compile away the database” mean? Do you mean that programming languages should have a built in database that helps handle state in a consistent manner? I thought the reason you had blocks for Eve 0.2-0.4 was because people had a hard time with scope. I can see how just blocks makes structure hard, because there didn’t seem to be a way to compose them together. I would have thought you can use the iterative nature of eve to build workflows, where each stage are the rules, and the result of one stage are just new facts in the database that feeds into the next stage. Does that not work well in practice? So in the other computational model, you introduced a state machine to help track state, and all you have to do is state which actions should transition to what other state? In my imagination, it sounds a little like how Elm has the action/reducers that tell the program how to map the state machine from one state to another. Why invert it, so statemachines have dataflow embeded in them? Unless the dataflow has a loop/iteration in it, to help track complex state, I’m not able to make the leap why. What does that design buy you?
d
> I think it's probably a dead-end to have a system that is either only declarative (Eve) or only > imperative. You need to be able to flow between the two so that things that are most easily expressed in one or the other can live together. I agree. This is something I've tried to do in Curv, and I'm actually writing a paper on this exact topic.
w
@Doug Moen Are you saying that you tried to make a system that was a mix of imperative and declarative? I’d be interested in reading the paper once you’re done with it.
c
@Wil Chung Sorry to get back to you so late, I hadn't been paying attention to slack for a while due to the end of the semester... The docs are working again mostly, but I'm adding a module system so some programs are not working fully. I'm prepping for a 0.1 release after modules are done, at which time I'll make sure things don't break anymore on the web. Mech has a lot of the same flavor as Eve but it's really different in terms of the execution model and its intended use case.
w
@Corey No problem, lemme know when it’s done, and I’ll check it out again. What’s different about the execution model? I didn’t see it in the web page. How come you picked robotics as the use case?
c
@Wil Chung I've updated the programs so they are working again. The Eve 0.2-0.4 execution model was centered around relational algebra, and the heart of Eve was a generic join algorithm. Performance was always an issue with this model. We highlighted this here: http://incidentalcomplexity.com/2017/08/14/July/ We moved to rust from JS to solve some of this, but there were still lingering concerns. There's nothing really relational about Mech. You lose some of the expressiveness power of Eve, but you gain in performance. The core data structure is a table, and all operations are done on tables of columnar data, so I can get better performance this way. I studied robotics in grad school which is how I got involved in PL in the first place. I was mostly using MATLAB and was unsatisfied with ROS and C++, so I wanted to make my own language to make robotics development easier. I want it so easy middle and high school students can get involved. I started working on Mech and then found my way to Eve, and now I'm working on Mech again with the lessons learned through working on Eve with Chris and Josh and Rob. My end goal with Mech is to use it as part of a nonprofit outreach program I'm getting off the ground at Lehigh U. I talk a little about my rationale for the language here if you'd like to take a read: http://docs.mech-lang.org/#/live2019.mec
w
@Corey Hey there! Thanks for getting back to me. It’s been a busy holiday season. I remember reading that post, and it sounded like there were significant speed improvements just by getting the low hanging fruit, and there were probably more to squeeze out? Admittedly, a little surprised about removing relational aspect. I would have thought it’s an advantage of the central store to have path independent access to data, especially if you don’t know how you’re going to access it in an app you’re sketching. If there are no joins, how does someone get all the comments of a blog post? Is it more like a document store then? Ah, so you’ve swung back full circle. I get the sense that most people work on things that rhyme with their previous work. 👍 When reading your docs, I’m reminded of when I first started looking at Eve. Since the programming model was so foreign, it was hard to make sense of it. It was only after I found out about Datalog, that it clicked. 1/ There are facts. they’re stored in the db. 2/ There are rules that add more facts. Every block is selecting facts, and using rules to transform those facts into new facts. those new facts affect the change you want to see, like text on a screen, or ball rendered. If your students have no programming experience at all, that might be a problem, but like your post says, if they’re coming from Java, then they might have already have a mental bias you need to break through.