11 ms·
How Eve unifies your entire programming stack
- tedajax 10y agoYeah 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 10y ago[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? :)
- ilostmykeys 10y agoWhy don't you just make that app for iOS/Android and let food truck owners download it? I know that is a useless thing to suggest given your intent but I think it's equally useless for food truck owners to want to build their own app. There must be a better range of use cases.
- tonyg 10y agoDo you think that, generally, if someone needs an app to do something they've just thought of, that there should exist some way for them to build it themselves? If not, why not? We will know the age of "personal computing" has truly arrived when such things are possible. At the moment, our hypothetical food truck owner (and many, many more people I know personally) are at the mercy of others, frustrated and unable to achieve their computing goals unaided.
- fsloth 10y agoLess complex programming systems have existed for decades for PC. Excel, Matlab, Mathematica and so on. I don't think anyone denies they've brought tremendous value to professionals in need of some ad hoc programs.
- ibdknox 10y agoI probably did a poor job explaining, but that's what the example is: an app that a food truck owner could use to run their food truck. :) > There must be a better range of use cases. There are lots of businesses I'm sure we could build, but that's not really our goal. This one happens to be straightforward and real, so it seemed decent. Do you have any suggestions that you think would make for a better demonstration?
- dman 10y agoAnalyzing logs seems like a great demo, since the app largely needs to give people the ability to work with data - so the data oriented parts of Eve should have an excellent opportunity to stand out.
- erikpukinskis 10y agoYou were flagged but this is a great question. I think the more useful ability for the food truck operator is the ability to modify the software their business runs on, not the ability to build it from scratch. Imagine everything on everyone's desk was bolted to it, and you could only choose between a few desk packages. Someone comes along and says "people should be able to put together their own desk packages!" But everyone wonders: "huh? I'm not a furniture engineer. What would I do with a custom desk that I can't do with an off-the-shelf one?" But as we know people come up with all kinds of uses for desks when they are allowed to reconfigure them freely. That's what we're losing out on by not making software reconfigurable, at least a little bit at the top layer. What we have right now is a series of buttons that add or remove bolted down components from your desk. Eve is trying to imagine what it might look like to actually be able to move things around freely, add duct tape etc. I know it's a weak argument, because no one really knows what people would exactly do with the ability to modify their software. It just seems to me like the kind of thing that would pay off.
- cmontella 10y ago> I think the more useful ability for the food truck operator is the ability to modify the software their business runs on, not the ability to build it from scratch. Yes, I agree with this 100%, and this is one of the main goals for Eve, much further down the line (see some of our experiments with graphical interfaces to Eve: https://github.com/witheve/eve-experiments https://github.com/witheve/eve-experiments) But even today we're focused on making programs easier to read and modify. Let's say a food truck owner (with a little technical experience) does download our app written in Eve, and wants to modify a button. When he opens the program, he can see a table of contents, and code written in a literate programming style. So immediately there's a place to start. The user could read through the document and try to find the place where the button is drawn, but the program is running right there. The user can inspect the button in question, and the editor will point right to the code that draws it. The user can modify the code right there, and see changes to the app immediately. This workflow is similar to what we demoed in this video: https://www.youtube.com/watch?v=TWAMr72VaaU https://www.youtube.com/watch?v=TWAMr72VaaU Obviously given the current form of Eve, this scenario requires a food truck owner who is also a developer. But supporting simple workflows that make using a computer easier is central to what we're trying to do with this language.
- eropple 10y agoExample apps are great. But what those example apps are, and what they mean, can vary a lot. Some things that would help, for me: - Exhaustive inline documentation. Like, consider literate-programming as a model. I want to see thoughts, observations, etc. as I read through the code. I want to know how you think somebody should be thinking. I want notes around "well, because of the way the stdlib works this is O(n^3) when it could be O(n^2), but it's okay for our values of n, we can come back to this." Show me not just what's good, but what kinda isn't but is made up for by other stuff being awesome. Show me where the bodies are buried. Because otherwise, sticking to stacks where I already know and can risk-assess against is a better use of my time. - Deployment advice. This doesn't mean "throw it in a Docker container", because that's not showing a grasp of the tools around you, but rather, say, open-ended integration with AWS, or Google, or whatever. Show me best practices for configuring it, as I already can see with Rails. And, as above, explain the thinking, explain the value of it, discuss alternatives and why you didn't go that route. Ultimately, I want to see that whatever tools that I would move to next (I use Ruby for devops-type tasks and Dropwizard for the web) to demonstrate that the developers are intensely thoughtful about the people using their systems, rather than just technology. HTH.
- segmondy 10y agoThat's a good example that shows the capability, but complete apps like that have been built with scheme, haskell, lisp, prolog, smalltalk, etc. I think what the original poster is asking tho they most likely won't admit it, is for a runaway profitable app. Once you have an app built with this that get's popular with millions of users or makes tons of money then people take it serious. The app you plan on throwing together is more than enough. If this works as has been written, it would become the secret weapon of the smart programmers.
- wilde 10y agoA basic PDF reader?
- deleted 10y ago[deleted]
- gpsx 10y agoExample apps are great, but you could just use it for real software. That makes the best examples.
- fit2rule 10y ago>Also, who doesn't love food trucks? Europeans. Please add a Döner- or Würstel- stand model.
- MrQuincle 10y agoI would be interested in any application that crosses many layers. If you create an IoT device you need: + bootloader + radio stack + HAL + custom code layer, say Arduino + communication layer + mesh hub (+ mesh communication layer) + sink code on mobile (bridge, no access to encrypted data) + local communication on mobile (low latency) + cloud + remote access + interfaces, mobile/dashboards It has also a lot of crosscutting concerns: latency, scalability (keep it local stupid), bandwidth, security, safety. Till out in the field: how to remotely define if it is hardware or software to reduce number of devices that gets returned.
- nekopa 10y agoMy suggestion would be to implement TeX. It's non trivial, and the whole program is available in book form as a literate program.
- Liron 10y agoAuthor 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.
- bsaul 10y agoThis article got me curious about eve. Now i think you need to find your "killer use case". Ror had none, because it was doing what everything else was doing, just faster. But a successful business used it so people got interested. Node.js first demonstrated chat server Angular.js showed two way binding of dom to data using declarative syntax React had those crazy dom update benchmark. Golang showed various pattern for synchronizing using channels. The "hello world" of go was a chat server. Etc.. now all those tech had many other great feature. But you need to find one single killer concrete example for the tech, that it performs an order of magnitude better / simpler / faster / safer than any other. Also, never ever forget runtime speed benchmark. You don't need to be the best, just not catastrophicaly bad.
- skybrian 10y agoThe 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.
- Liron 10y agoYou 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.
- daveguy 10y ago"My point is only that Eve provides a solid low-level foundation to implement higher-level patterns like a single-value type." That's the problem. As long as single-value type is a higher level abstraction you are going in the opposite direction from "programming for everyone".
- Liron 10y agoI don't see the problem with having a beginner-oriented interface rest on an extra abstraction layer. Eve : Markdown :: Eve-based tools for everyone : a WYSIWYG editor
- miguelrochefort 10y agoThis 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.
- 10y ago
- dkarapetyan 10y agoHow does one package and deploy an Eve application to some cloud infrastructure for example?
- cmontella 10y ago[Eve member] That's in the PR pipeline right now, you can track it here: https://github.com/witheve/Eve/pull/571 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!
- dkarapetyan 10y agoCool. Good to know it is in the pipeline.
- dicedog 10y agoI'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 10y agoI 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.
- wruza 10y agoJust seems like it sells poor man's Prolog as a "fundamental change". Anyone to dismiss my confusion? I mean, you can throw HTML around cobol/io/cl/sql/sed with the same wow-effect?
- Liron 10y agoCheck out this 2009 research paper that Eve is based on; it's an important new extension to logic programming: https://databeta.wordpress.com/2010/01/05/introducing-dedalus/ https://databeta.wordpress.com/2010/01/05/introducing-dedalu... Also please let me know what you think about Part II (coming later this week). It's all about logic programming and CQRS.
- tom_mellior 10y agoI only skimmed this very quickly, but the difficult issues in that tech report seem to concern issues in distributed systems. Does Eve have a distributed "story"? My impression was that it was mostly a synchronous rule language that, at each time step, does vaguely Datalog-like stratified evaluation and then updates its state. That's a very nice model and indeed rooted in logic programming, but I have the impression that referring to the Dedalus tech report is overselling it.
- erichocean 10y agoCan 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.
- GavinMcG 10y agoWhy does it need to be without overhead in order to be accurate that it unifies the entire stack?
- erichocean 10y agoBecause to qualify as "the entire stack", you need to be able to talk to the kernel efficiently, which in practice means: call into C without overhead. I have no problem with what Eve is doing, but it's not "the entire stack" and with Eve's paradigm, never will be. And that's okay—just stop calling it "the entire stack".
- jholman 10y agoCan Eve modify CPU microcode without any overhead? If it can't, then "your entire programming stack" is excluding a lot of stuff I can't be bothered to enumerate. </satire> Also relevant: "To bake an apple pie from scratch, first one must blah blah universe blah" -- Sagan "Entire stack" is relative to the interests of the audience, not a description of the entire dependency chain. If you're claiming that YOU go around modifying the kernel, then yes, a language that doesn't do that won't replace YOUR entire stack. (And, conversely, some people have, as their "entire stack", less layers than in this post (for example, maybe their web-app uses no dynamic server-side routes/state/etc, and so it's just static assets plus super-heavy frontend JS). For such a webapp, there's less unifying possible to do, because there were less layers to start with.) But the stack they describe in TFA is a very common "entire stack" for a team to have to deal with. It's very common to just take all the C/C++ bits (kernel, libs, rdbms, probably some webserver, and so on) as given-and-immutable, and to work at the layers above that: DB-contents, backend, web-API, frontend, etc. I have no claim about whether or not Eve solves these problems. I do think that their linguistic use of "unifies your entire programming stack" is entirely justified, in context.
- miguelrochefort 10y agoI'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.
- klibertp 10y ago> 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...
- buovjaga 10y agoStill being developed, though: https://github.com/LightTable/LightTable https://github.com/LightTable/LightTable
- klibertp 10y agoThey had 2 Pull Requests last month, closed 6 tickets and created 4 new tickets. To quote the "Pulse" section: > Excluding merges, 2 authors have pushed 2 commits to master and 2 commits to all branches. On master, 4 files have changed and there have been 64 additions and 15 deletions. This is not the kind of activity I'd expect in the project under active development. Compare to Emacs[1]: > Excluding merges, 39 authors have pushed 227 commits to master and 260 commits to all branches. On master, 352 files have changed and there have been 6,143 additions and 3,732 deletions. ...and that's Emacs main repo, excluding all the development happening in plugins. But well, that's actually not that important; what matters is that LightTable badly needs a serious refactoring, because reportedly there is just one person who actually understands the codebase (and it's Chris). Such refactoring is not going to happen, though, because people who actually could do it abandoned the project. Perhaps it's not even a refactoring that's needed, but a rewrite. Even if using the same language - ClojureScript - the project would be supposedly written in a totally different way due to the changes in the ecosystem. Switching languages would require an immense amount of careful weighing of pros and cons, but it may be worth considering. Still, this is not going to happen, the code and effort that went into LT are essentially wasted now, possibly with the exception of the learning experience for the authors. I'm writing this much about it because I really hoped LT to be a modern incarnation of Emacs, as the latter was starting to show its age. Instead, however, LT is dead. On the other hand Emacs got embeddable xwidgets in the last release - which means that (in time, it's not very usable as-is) we will get the in-buffer, full web browser. [1] https://github.com/emacs-mirror/emacs/pulse/monthly https://github.com/emacs-mirror/emacs/pulse/monthly
- sua_3000 10y agoI feel like reconciling the divide between the client/server relationship is the next major opportunity for abstraction
- Liron 10y agoEve 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.
- quantumpotato_ 10y agoI'm impressed with the abstractions! What are recommended "Learn Eve" tutorials?
- cmontella 10y agoNot 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
- zubairq 10y agohttps://github.com/zubairq/Eve/tree/master/tutorial https://github.com/zubairq/Eve/tree/master/tutorial
- zubairq 10y agoYou could also try this Eve tutorial. A developer from Spotify made it: https://www.youtube.com/watch?v=aJpBYow99Ag https://www.youtube.com/watch?v=aJpBYow99Ag
- dajohnson89 10y agoSeems cool
- tharibo 10y agoTitle : "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 10y agoSame 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.
- k__ 10y agohow much percent of front-end devs do 'only' native UIs? I mean even most of the mobile people were web devs once...
- pjmlp 10y agoEveryone that does applications that require OS APIs, interaction with external devices, factories, embedded, air gaped desktops, care about the UI/UX of the user. Native UI isn't a synonym for mobiles.
- k__ 10y agoI know that. My point wasn't that it is a synonym for mobile. I just think there are much more web devs than regular ones AND that most of the mobile devs do (or did) web-dev (before).
- pjmlp 10y agoAnd your data source for it is?
- bitwize 10y agoBut those are niche applications. Web and mobile are driving the bulk of development these days, so development terms are going to reflect the concentration on Web and mobile.
- tonyjstark 10y agoAfter 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 10y agoThe big takeaway is not literal programming but logic programming and pattern matching.
- dansingerman 10y agoNot 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.html http://www.joelonsoftware.com/articles/LeakyAbstractions.htm...
- Liron 10y agoMan, 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.
- 0x01 10y agoI 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?
- jononor 10y agoIts 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/ 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."
- 0x01 10y agoThanks for this. I've read that post before, and back then I just took the explanation to mean we're dropping the UI. I can see now that was not the meaning. > we need developers to like it before end users will While I can see how there is some separation of concerns as mentioned in that post, I think the above quote doesn't have to be true in order for Eve to succeed. It has the potential to contradict the whole programming designed for humans line. Developers can be quite happy with some pretty funky syntax/abstractions which won't seem remotely obvious/intuitive to non-programmers. If developers' considerations are put before non-programmers, Eve might end up a language for developers, as opposed to the intended audience. Personally I think that means that you can't drop the UI even for now. It has to be the only interface. Otherwise you won't get the interest from non-programmers. What developers might like and grok, non-developers might not. Just one data point from somebody interested in this sort of thing.
- z3t4 10y agoI'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 10y agoClick 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.
- Cozumel 10y agoAnother 'solution' to non-existent problems.