top | item 13010396

How Eve unifies your entire programming stack

188 points| tbatchelli | 9 years ago |hackernoon.com

106 comments

order
[+] dicedog|9 years ago|reply
I'm excited for Eve and next-gen programming languages but as details emerge, it seems like it could easily have been a few libraries and an architecture pattern in most other functional programming languages. When I first learn about things like the continuation monad or CQRS, I have similar reinvent-the-world fantasies but it's often sufficient to expand my toolkit and change my style (in full disclojure ;-), my default language is clojure/script)
[+] Liron|9 years ago|reply
I think your point is valid in general, but Eve's semantics are deeply rooted in Logic Programming. IMO that's a more fundamental change than what we can hope to get from layering a pattern/library/architecture on top of an existing database or programming language.
[+] 0x01|9 years ago|reply
I was keeping a close eye on Eve until it changed direction from programming for everyone to yet another lisp. Is there any writeup/discussion on why this happened?

I do like learning about mind-expanding languages, and something resonated with me when the CardWiki interface was revealed. I get that this language is very 'human readable' but at the end of the day if I want to read or write it I will actually have to put a lot of time into learning it.

I'm already suffering decision paralysis with my current language shortlist and this language doesn't make the cut. The card wiki was innovative, like LightTable. To me, this is 'just a language'. I realised you moved away from the wiki idea for a reason but is putting a GUI on the language still on the roadmap?

[+] tom_mellior|9 years ago|reply
> I get that this language is very 'human readable'

I wonder why people say/think that. The language uses sigils like @ and #. Sigils automatically make a language non-"human readable" since they have no "human meaning". And no, "you just have to learn the meaning of the language constructs and then you can read it" is not "human readable" in a useful sense. From what I gather, in Eve the @ sign refers to databases. That's fine, but "database foo" is human readable in a sense that "@foo" certainly isn't.

Or look at this example from http://play.witheve.com/#/examples/todomvc.eve

    search
      [#app filter]
    
      all-checked = if not([#todo completed: false]) then true
                    else false
    
      none-checked = if [#todo completed: true] then false
                      else true
    
      todo-count = if c = count[given: [#todo completed: false]] then c
                    else 0
Why aren't these just

    all-checked = [#todo completed: true]
    none-checked = [#todo completed: false]
? Is the triple negation relevant? What is #todo? Is there some sort of implicit iteration over the database where #todo is bound to successive entries? If so, how are the individual flags combined to really arrive at an "all checked" or "none checked" value?

I know plenty of languages that are more "human readable" than this.

It might still be a nice language once you learned it. But this, too, won't be the holy grail of "programming for non-programmers".

[+] cmontella|9 years ago|reply
I just wanted to respond to your comment, even though I see you posted later in this thread that you re-read Chris' post in a different light.

In developing Eve, we faced a problem of getting involved in too many research projects. How do you make a new language and a new interface to that language at the same time? It was very hard, and in the end we realized it was a mistake to take this route. For instance, how do you version control and make unit tests for a card wiki UI?

Instead, we are developing the language first, getting that to a point where it's stable, well defined, and actually used by people. In order to do this, we needed an interface that was also well understood and defined, and the only choice there really is a textual syntax. This has several benefits:

1: we know how to make a textual interface. We've made many, and there really aren't too many questions there.

2: people know how to use textual interfaces and there are tons of tools out there to work with them

3: developers in particular, the people who will be using our language first, are comfortable with textual interfaces

4: we can still provide some innovation here, and make Eve exciting to work with for the people who want to use it this way.

The obvious drawback is that we're not making a huge leap in programming interfaces this way. But that's okay, since we're making progress in another direction that really is a prerequisite to bringing computation to everyone. When Eve the platform is better understood, we'll tackle the even bigger hurdle of an interface that appeals to more than just developers.

[+] jononor|9 years ago|reply
Its less the direction changing than the plan for how to get there. The major pieces to the roadmap is now: 1. Eve: Programming designed for humans (current) 2. Eve: Computation for all 3. Eve: The world scale computer

http://www.chris-granger.com/2016/07/21/two-years-of-eve/ has some information on why. Selected quotes: "We learned with Light Table that we can't just slap a UI onto Javascript and expect it to work; the platform has to allow for the representation." "Another reason the platform is necessary is really counterintuitive: we need developers to like it before end users will. Technology diffuses from technical people to non-technical people over time."

[+] erichocean|9 years ago|reply
Can Eve call into C without any overhead?

If it can't, then "your entire programming stack" is excluding the kernel and a lot of existing libraries/code.

[+] lj3|9 years ago|reply
The whole thing is written in javascript and typescript, so my guess is no.
[+] GavinMcG|9 years ago|reply
Why does it need to be without overhead in order to be accurate that it unifies the entire stack?
[+] dansingerman|9 years ago|reply
Not convinced either way whether having the same interface for all of the stack is a good idea or not, but it did remind me of Joel Spolsky's blog post on leaky abstractions http://www.joelonsoftware.com/articles/LeakyAbstractions.htm...
[+] Liron|9 years ago|reply
Man, if Joel were blogging today he'd be dominating the HN front page...

The thing is, Eve isn't an abstraction layer over your existing layers, it's a set of choices you can make layer-by-layer to swap out the old "unique" way of doing things with Eve's more uniform way of doing things. The unique way was arbitrary anyway.

Like, if the whole world all decided to start speaking Esperanto, that wouldn't create too much of a leaky-abstraction issue.

The one issue I can see is how to scale when you use it as your database layer and make fancy queries. But every database's query engine has its own implementation challenges and I don't think Eve is special in that sense.

[+] skybrian|9 years ago|reply
The part I'm most skeptical of is Eve's universal use of set-based semantics, whether it's needed or not. It seems like making sets and single values look different in the code would be more understandable than making everything look the same. Treating them as different types might be a good way to catch errors, too.

But SQL is very successful so maybe they'll do okay anyway.

[+] velox_io|9 years ago|reply
My startup Velox.io (https://velox.io, which is looking to go live in the next couple of months) is working on the same issue. Right now writing code is overly verbose (and often brittle). The author does make some good points around unifying API, Database and Application code. Most code is centred about moving data from A-B, with some logic applied to it.

Eve done some interesting stuff, as has Linq from .net, AWS's Lambda's, even Kx's Q in the way it handles temporal data.

My hypothesis that writing software can be greatly improved; There is a lack of programmers, yet most people are capable of creating spreadsheets (and writing formulas). Using spreadsheet is similar to programming, what makes programming much more complex is the different systems involved and lack of rapid feedback.

People have been trying to make programming easier/ accessible since the days of Hypercard, but no one has really cracked yet.

Edit: Downvote if you will (I've spent years on this), at least write a comment to say why.

[+] Liron|9 years ago|reply
You can kinda roll your own "single value type":

  search
    a = [#singleton]  
    b = [#singleton]  
    a != b

  commit @error
    [#error #description: "Multiple values for singleton!"]
I'm sure that's not the actual pattern you'll be using. My point is only that Eve provides a solid low-level foundation to implement higher-level patterns like a single-value type.
[+] miguelrochefort|9 years ago|reply
This is actually the most elegant aspect of Eve.

You're always working with an abstract/fuzzy value that represents all possible values given some constraints, and only have to resolve a concrete instance when you absolutely need to. More often than not, were working with ordered sets, not single elements.

[+] miguelrochefort|9 years ago|reply
I've been looking for the holy-grail for years (TodoMVC being my benchmark), and Eve takes the cake.

I'm looking forward to compatibility with semantic Web technologies.

[+] sua_3000|9 years ago|reply
I feel like reconciling the divide between the client/server relationship is the next major opportunity for abstraction
[+] Liron|9 years ago|reply
Eve helps do that - not in the current version (0.2), but soon your application will be able to interface with a remote server the same way it interfaces with its in-memory data and functions.
[+] tonyjstark|9 years ago|reply
After all these promising presentations and blog entries about what thoughts went into Eve, I'm a bit dissapointed by the result. Or I'm ignorant and don't get it (yet?). Sure, it utilizes literate programming and it abstracts a lot away but it does not seem as revolutionary as the communication around it suggested. Maybe the next articles in this series will enlighten me.
[+] miguelrochefort|9 years ago|reply
The big takeaway is not literal programming but logic programming and pattern matching.
[+] z3t4|9 years ago|reply
I'm glad there are people rethinking how we develop programs. But as a web developer, the examples in Eve looks more complex then a naive implementation using vanilla CSS, HTML and JavaScript would look like, for example, how do you make something 10 pixels wider in Eve ?
[+] jononor|9 years ago|reply
Click the inspector wand on the UI element you want to change, this will move the editor to the Eve block which created it. In TodoMVC the styling is handled with a CSS file, so you go to change it there. Or you add an inline override. The @browser database is a very thin wrapper around DOM/HTML, ala React/JSX.
[+] quantumpotato_|9 years ago|reply
I'm impressed with the abstractions! What are recommended "Learn Eve" tutorials?
[+] cmontella|9 years ago|reply
Not too many tutorials out yet, since Eve is a brand new language, but we have a quick start tutorial and lots of examples at play.witheve.com
[+] tharibo|9 years ago|reply
Title : "your entire programming stack".

I feel sad when I find that web programmers think there are only web stacks and "programming" refers only to web programming.

It is not entirely the case here, but the description of "a core system" as :

- Database layer

- Remote API layer

- Application layer

made me tick.

[+] pjmlp|9 years ago|reply
Same here when they refer to front-end as a synonym for Web UIs, as if there wasn't quite a few of us doing 100% native UIs.
[+] vardump|9 years ago|reply
Always watch out for using word always.

Never say never.

[+] Liron|9 years ago|reply
Yeah, this concern crossed my mind when writing the post.

Did you have a specific alternate "core system" you'd prefer I had written about?

[+] dkarapetyan|9 years ago|reply
How does one package and deploy an Eve application to some cloud infrastructure for example?
[+] cmontella|9 years ago|reply
[Eve member]

That's in the PR pipeline right now, you can track it here: https://github.com/witheve/Eve/pull/571

Although I should mention, Eve is super early Alpha right now, so don't deploy anything you will be depending on!

[+] tedajax|9 years ago|reply
Yeah until I really see some practical applications written in Eve I don't think I'm ever going to really get it. It's nothing against Eve, it might be great, but nothing I've seen about it so far as really captured my imagination and I'm wondering if I'm just missing something.
[+] ibdknox|9 years ago|reply
[Eve member]

Out of curiosity, what would you classify as a practical application? We're looking for some interesting examples to build to help show Eve to folks.

EDIT:

For instance, one of the examples we're throwing together now is an app that a food truck owner could use to put up their menu, manage a queue of orders (in person and online), alert people when their order is ready, accept payments, and post to social media. We picked this because it's an app trucks could actually use and it has lots of "real" functionality in it - from stripe integration to social media posting. Also, who doesn't love food trucks? :)

[+] Liron|9 years ago|reply
Author here. I certainly understand that seeing progressively more sophisticated practical applications will help people "get" Eve. I look forward to that myself.

In the meantime, I hope I can show a "plausibility argument" for Eve's potential by pointing to areas where the status quo of mainstream programming is visibly less than ideal. Uniformity of data formats and operations across the programming stack is one such area.

[+] Cozumel|9 years ago|reply
Another 'solution' to non-existent problems.
[+] klibertp|9 years ago|reply
> Eve is the culmination of years of research and development by the visionary team who previously founded Light Table.

...and then abandoned it after getting me excited about a possible Emacs replacement...

[+] worldsayshi|9 years ago|reply
Didn't it influence atom and sublime text 2 quite a bit though?