Enso language and IDE

Stumbled onto this: https://enso.org/

Seeing the website I was pretty impressed – only for my enthusiasm to be curbed upon watching the teaser video at Introducing Enso | Build your data workflows in minutes, not weeks. - YouTube

In my opinion, reading (and writing) a large code base in this manner would be a programmer’s version of hell as it would spread on a huge canvas and following the various branches would lead to unbearable cognitive load.

However, there do seem to be some interesting parts. It strikes me as a combination between eval-ing lines of Julia code in VSCode and running cells in a notebook like Pluto, so maybe it can give some ideas to the Julia VSCode or Pluto teams. For me the novelty is in the execution model, with Enso controlling the order of the execution of the lines of code/cells using connectors instead of the default top-to-bottom execution order – and in visually piping the output of a line/cell into another function.

Additionally, I can recognize the JuliaPro approach of bundling top curated packages coupled with multi language interop and making this a core feature.

It could be a viable option for a quick visual data exploration environment for Julia and/or a Julia beginners IDE.


Enso is an interesting language. I’ve been following them for a while now, but I haven’t actually played around with the new alpha release yet.

I believe you can collapse and expand sub-graphs of nodes that correspond to functions. Also, there is a 1-1 correspondence between the visual language and the textual language. Developers would probably spend the majority of their time editing the textual language in a normal editor like VS Code.

The Enso textual language was designed explicitly to have a 1-1 correspondence with the visual language. I believe it’s a (mostly) pure functional language, with a unique static/dynamic hybrid type system, and no mutability. I suspect that it would be difficult to do the same thing with Julia, since it was not designed with a visual language in mind.

Having access to the textual representation is pretty useful, I haven’t seen that in the demo.

I’m not sure there’s any inherent difficulty in applying the visual paradigm to Julia. The way I see it, in its simplest (and oversimplified) form, we’re talking about a Pluto notebook where instead of cells being in the form of a list, they are represented as a simple directed graph.

How do you represent the graph for this?

x = [1, 2, 3]
y = x
y[2] = 10
z = sum(x)

Maybe there’s a sensible way to do it, but it seems to me that mutability makes it a lot harder to represent the code as a DAG.


you need to be able to modularise it and say. Group these together into one cell.

In the exact same way that you represent them as cells in a notebook? 1 cell = 1 node?

Yep, I was thinking the same. The language needs to address the challenges of allowing modular code, handle code loading and referencing – and represent these visually in an efficient manner.