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)
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.
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?
> 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.
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
? 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".
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.
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."
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.
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.
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.
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.
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.
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.
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.
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 ?
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.
Eve aims to be a general purpose language [1] to really replace your "entire programming stack" except for high performance, real-time applications. So, don't be sad :)
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.
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? :)
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.
[+] [-] dicedog|9 years ago|reply
[+] [-] Liron|9 years ago|reply
[+] [-] 0x01|9 years ago|reply
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 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
Why aren't these just ? 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
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
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."
[+] [-] miguelrochefort|9 years ago|reply
[+] [-] erichocean|9 years ago|reply
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
[+] [-] GavinMcG|9 years ago|reply
[+] [-] dansingerman|9 years ago|reply
[+] [-] Liron|9 years ago|reply
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
But SQL is very successful so maybe they'll do okay anyway.
[+] [-] velox_io|9 years ago|reply
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
[+] [-] miguelrochefort|9 years ago|reply
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'm looking forward to compatibility with semantic Web technologies.
[+] [-] sua_3000|9 years ago|reply
[+] [-] Liron|9 years ago|reply
[+] [-] tonyjstark|9 years ago|reply
[+] [-] miguelrochefort|9 years ago|reply
[+] [-] z3t4|9 years ago|reply
[+] [-] jononor|9 years ago|reply
[+] [-] quantumpotato_|9 years ago|reply
[+] [-] zubairq|9 years ago|reply
[+] [-] cmontella|9 years ago|reply
[+] [-] zubairq|9 years ago|reply
https://www.youtube.com/watch?v=aJpBYow99Ag
[+] [-] tharibo|9 years ago|reply
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
[+] [-] bertan|9 years ago|reply
[1] http://witheve.com/deepdives/whateveis.html
[+] [-] vardump|9 years ago|reply
Never say never.
[+] [-] Liron|9 years ago|reply
Did you have a specific alternate "core system" you'd prefer I had written about?
[+] [-] dkarapetyan|9 years ago|reply
[+] [-] cmontella|9 years ago|reply
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
[+] [-] ibdknox|9 years ago|reply
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
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.
[+] [-] dajohnson89|9 years ago|reply
[+] [-] Cozumel|9 years ago|reply
[+] [-] klibertp|9 years ago|reply
...and then abandoned it after getting me excited about a possible Emacs replacement...
[+] [-] buovjaga|9 years ago|reply
[+] [-] worldsayshi|9 years ago|reply