6 ms·
Enso: Hybrid visual and textual functional programming
- mjburgess 4y agoMy initial reaction, from an SEng POV, is that visualising code in this way is pointless: the text of the code is the graph of the code. And if you really really value an identity here, use lisp. So visual coding, for SEng, I think just is pointless. The text isnt the hard part, the hard part the is mental model -- and visuals often impair the quick exploration (etc.) needed to build the mental model. Likewise, in the YT video introducing this, the creator distinguishes between "code" and your mental model of its execution, as if the latter can and should be ditched. This, of course, is a fallacy as far as SEng is concerned. The whole point is the mental model. Nevertheless, after watching for longer, the sales pitch here seems directed towards data science (, + DEng perhaps) where applications are often trivial amounts of code. Coupled with interactive visualisations, this is at least a more plausible use-case. There the creator's distinction between "how the machine runs your code" and "the problem you're trying to solve" makes more sense. Since practitioners arent building automation systems, apps, etc. they're using code instrumentally to arrive at an outcome. Also, cf. https://enso.org/docs/developer/enso/enso-philosophy.html https://enso.org/docs/developer/enso/enso-philosophy.html
- kitd 4y agoGraphical representations tend to be better than 2D text when dealing with concurrent streams of execution. You can do it in plain text, but either it is difficult to follow or it becomes a mess of text alignments. IME.
- mjburgess 4y agoPerhaps, but how much of that it just an imperative phrasing? I think the visual capabilities of horizontal and vertical spacing are, certainly, vastly under-used. We could easily divide regions of files into two 60chr lines, or many 20char lines, GetWater . Boil(Water) | | GetCoffee, GetMilk, GetCup . Grind(Coffee) | | Pour(Milk) . Brew(Coffee, Water) . Pour(Coffee) .
- blondin 4y agothis sounds good for pure concurrent processes. but synchronization will be harder to represent using vertical bars.
- kitd 4y agoBut you quickly come up against problems of text alignment, trying to show 2+ theoretical streams of text on one 2D page, and it's a pig to get the DX right. A specialist editor would help, but then you could ask, why not just use a structured doc in eg JSON and represent it graphically. For background, I wrote a tool that would convert an ASCII art diagram in comments describing the state flow of a class into a set of method declarations in the class. Even using online diagramming tools, it's not easy.
- WillAdams 4y agoThis is the route I've been going w/ my work on 3D --- I program in BlockSCAD and make modules for each component, or aspect of a component, and then the design can be visualized as the options/logic which arrive at a particular iteration.
- worldsayshi 4y ago>visuals often impair the quick exploration (etc.) needed to build the mental model. If that was true why do we use whiteboards do much?
- awinter-py 4y agotheir image processing example on the github readme is compelling I sort of agree that they're conflating a few things: - resumable processes - text graph description format - using graph descriptions to lint or generate code - UX / visualization for graphs But I could be convinced that these are things that go better together
- osener 4y agoI remember hearing about this language at Curry On conf in Amsterdam back then when it was called Luna. Happy to see that it's still going strong and finding its market fit!
- BenoitP 4y agoThis seems like a great endeavor. I've always wondered why visual languages have not thrived. Is it because the spaghetti gets unmanageable? Can't you have boxes (modules/class/namespace etc) to neatly arrange things? > GraalVM, Performance meets polyglot > Import any library from Enso, Java, JavaScript, R, or Python A use of GraalVM in the wild! Seems like a perfect fit for this project. Can it use the C-accelerated libs from Python like numpy? I always thought it was up to the programmer to make libs go through Sulong, then bind things later on.
- hutzlibu 4y ago"I've always wondered why visual languages have not thrived. Is it because the spaghetti gets unmanageable?" Clicking is way slower than coding. Allowing both requires some sophisticated compilers and frameworks. "Can't you have boxes (modules/class/namespace etc) to neatly arrange things?" But yes you can, which is my approach. It was kind of hard, though and took a little longer than expected, but hopefully you can see the result soon.
- WillAdams 4y ago>Clicking is way slower than coding. I think w/ a suitable UI it doesn't need to be. Things which need to be addressed: - it should be easy to instantiate new objects - minimize scrolling/present lists of choices efficiently --- when using the Blockly version of OpenSCAD, BlockSCAD I often wish that the variable list could be made hierarchical so that the variables from a particular module could easily be identified or limited to - being able to collapse blocks of code and expand them is very powerful Trying to get over my aversion to Electron wrappers to try this out.
- hutzlibu 4y ago"I think w/ a suitable UI it doesn't need to be." Trust me, I tried. You can definitely reach a fast workflow, but typing + shortcuts will be way faster. But you can combine both.
- 4y ago
- carterschonwald 4y agoA long time friend of mine is their advisor I believe. So I am pretty confident that the engineering is outstanding
- 0x445442 4y agoAlso the name of dmenu, Quicksilver like application. https://alternativeto.net/software/enso/about/ https://alternativeto.net/software/enso/about/
- forgotpwd16 4y agoFirst thing that name brings to my mind. That said it's a very niche long-dead (unfortunately) product.
- samsquire 4y agoThis looks awesome. I find the problem with visual programming is that often there is multiple representations or diagrams that would be useful to combine and render into a program. * A box and line diagram with arrows is enough for representing event handlers and event dispatchers and message queues automatically. * There's multiple approaches or methods to think of a computation: pipeline, communication, mathematic operations, projection. Each of these can be visualised. * Behaviour composition - how do you combine behaviours together visually? Too many things on the screen and the underlying insight to the problem becomes hard to see or notice. I'm working on a representation of code that is visual but it's not traditional. https://github.com/samsquire/structural-visualization https://github.com/samsquire/structural-visualization
- dang 4y agoThis is one of the systems discussed in a recent talk that had a couple of threads on HN: Stop Writing Dead Programs - https://news.ycombinator.com/item?id=33270235 https://news.ycombinator.com/item?id=33270235 - Oct 2022 (60 comments) Stop Writing Dead Programs [video] - https://news.ycombinator.com/item?id=33251799 https://news.ycombinator.com/item?id=33251799 - Oct 2022 (230 comments)
- nerpderp82 4y agocrosslinking to relavent subreddits https://old.reddit.com/r/futureofprogramming https://old.reddit.com/r/futureofprogramming https://old.reddit.com/r/nosyntax https://old.reddit.com/r/nosyntax
- kmoser 4y agoNarrator at 0:25 in video: "All of these things can be done without writing a single line of code" Demo at 2:10: [Narrator begins writing many lines of code in a proprietary language] Not saying this is a bad tool, but the breathless "no code!" hype is a bit much.
- ranger_danger 4y agoModern FPGA designs actually work very similarly. You have a high level graphical representation of all the different modules and IP cores you use, and connect their inputs and outputs together using the GUI, but then the actual "code" (VHDL/Verilog/etc.) inside those modules is still written in text form like normal programming languages.