The DRAKON Language
drakonhub.com
drakonhub.com
From the start (ie: 1946-48) they conceptualized programming through the notional of 'logical schemas' or 'logical operators' which were a pseudo-textual notation for flow charts. They went so far as to develop entire theories for the analysis, and optimization of these logical schemas.
Another fascinating language was Analitik which was a language for CAS (like Matlab) developped by V. Glushkov in Ukraine.
There exists a fantastic website about programming languages in the ussr: http://www.compiler.su/ekskurs-v-istoriyu-razrabotok-yazykov...
There are also entire journals worth of these papers on PL design from the '50s which have been translated to english and sit rotting in university shelves.
edit: there's actually another post on the front page on my project to recreate the first of those languages: https://github.com/xldenis/besm, though unfortunately I have let it fall aside in recent years.
This site is like many of the other DRAKON tools written by Stepan Mitkin and is released to the public domain on GitHub [0].
The tool I am most familiar with is the DRAKON editor [1] also created by Mitkin and released to the public domain [2]. I feel in love with DRAKON about 10 years ago and have used it on and off for just writing out flows or some algorithms, I even wrote a optimistic database in Erlang with it some years ago which I found pretty interesting. More recently I have been looking at adding Rust support to the tool, but many of the things I want to do is blocked by various technical debt that have accumulated over the years, and the fact that I have never used TCL before.
[0]: https://github.com/stepan-mitkin/drakonhub
A
#if B
#if D
#if F
G
#else
H
#else
E
#else
C
#endI suspect a text-based serialization format that works well with diff would go over better.
The drakon widget by the same author uses a json based serialzation scheme as you can see here https://github.com/stepan-mitkin/drakonwidget/blob/main/js/e...
Does it mean more of a communicative "language" of shapes? I was hoping more for a Graphviz .dot format that would be used to generate such graphs. Mermaid seems to have become the defacto standard in OSS and I really dislike it (even though I've also contributed to it). A modern, sleek alternative like this would be great.
It is a kind of strict flowchart language that only allows you to do it in one way, which may be bad for some, but it helps how fast you can grok it when you understand the simple rules.
The same author have also recently made a JS widget that allows you to embed these diagrams on websites [2].
[0]: https://drakon-editor.sourceforge.net/DRAKON.pdf
I found it in the AUR on arch. Elsewhere on windows/mac/linux.
I'm not sure if I'll ever use this as an alternative to writing code, but I like the pretty diagrams.
Drakon editor is probably the most complicated piece of software written in it: https://github.com/stepan-mitkin/drakon.tech
I got mad at them, so I started digging.
I spoke with several people who worked on Buran (at that time, my parents were working at a factory that had designed Buran's instrument panel). Nobody there knew about Drakon. They apparently used a mix of Prolog (its Russian dialect, ПРОЛ), low-level assembly, some Modula-2, Fortran, etc.
It's questionable that the Soviet engieers would have been comfortable working with a graphical language, back when many of them still used punch cards to enter programs.
It could have been used in documentation or in specs, because Drakon indeed is a better graphical notation than the regular flow charts.
it was used with the Sea Launch program, Fregat - that's a space tug for Soyuz/Zenit, the modernized Proton-M, ДМ-SL-Б - that's a space tug used with the Zenit launcher.
However the article is a bit old, from 2009. It could have been used for later systems.
https://old.computerra.ru/readitorial/418507/
Wikipedia mentions hybrid variants of Drakon - like Drakon-C, here the they would put C code into each of the boxes of the flowchart (each square box would stand for a basic block, and each diamond box a boolean expression?). I think that would make more sense, this way you could actually write some more complex programs and the flowchart would not blow up in complexity.
https://ru.wikipedia.org/wiki/%D0%94%D0%A0%D0%90%D0%9A%D0%9E...
i guess that with Drakon-C a function call would be just a line in the basic block, would make more sense.
That article is written by the main DRAKON pusher: Владимир Паронджанов (Vladimir Paronjanov), so I'd take it with a grain of sand the size of the Great Salt Lake.
Somehow, all applications of DRAKON happened to be in areas like space and defense, that are heavily protected by the state secrecy laws. So nobody could really confirm it. And that was also an excuse for not having any public tools released.
> Wikipedia mentions hybrid variants of Drakon
The only real programs in DRAKON are written like this. The compiler simply generates the code from the graphical description by joining the sections together.
That said, in my experience, the Soviet tech industry workforce was separated into three very distinct categories since the ~70s: enthusiasts (people who came into it to actually build the tech; they delivered most of the result, and were the first to leave after the crash), opportunists (people who used it as a social elevator/welfare program and couldn't care less about the result), and crackpots (underperforming idealists who couldn't be fired, but still won't shut up about their wonderful idea, so they've been filtered into containment projects which were only meant to exist on paper). Drakon is giving off the strong vibes of something created by the last category.
Not all graphs are planar. Not even all DAGs. Which I assume can throw a wrench into things
My least favorite thing about all the common programming languages is that programs are represented as one dimensional byte arrays. You can talk about ASTs and whatever else to your heart’s content, but at the end of the day you’re editing a one dimensional character/rune array. It’s especially sad since existential graphs[1] are well over a century old.
Maybe one day I’ll manage to invent a properly two dimensional m-expression that works with any s-expressions.
> My least favorite thing about all the common programming languages is that programs are represented as one dimensional byte arrays
The reason why graphical notations never took off in programming (and never will), is simple: It's all neat and shiny when we represent small algorithms or small example programs as flowcharts.
And then, as soon as the program grows to a sizeable project, that has to deal with state, external state, user defined state, represent a GUI, talk to another system, or does anything even slightly more complex than the examples or single algorithms, the whole thing goes to hell. Try to represent a webserver with 50 different endpoints as a graph. Try representing a single page application for a webshop, including error handling and different ways of discovery. You'll need ALOT of screenspace, and those are not even complex examples.
And then there is the problem of editing, storing, versioning, compiling and transmitting the programs. All these are solved problems with code, none of them are universally solved for graphs. Sure, we could just define a textual representation of the graphs, but then we're right back to the "byte arrays", just with one added layer of complexity.
We already do some things to extract flowchart/state-diagram like topology information from collected system traces, but given how much of our customer workflows center around requirements & specifications, I think going the direction of communicating the underlying detailed specification more abstractly would be a big win.
Drakon: a visual language for specifications from the Russian space program - https://news.ycombinator.com/item?id=12638032 - Oct 2016 (39 comments)
Drakon – A visual language for specifications from the Russian space program - https://news.ycombinator.com/item?id=6429283 - Sept 2013 (28 comments)
Here is a video of Stepan Mitkin demoing Drakon at an Erlang conference from 2015.
I looked into some of their visual aspects when I was doing if this then that rules embedding, but I ended up deciding left to right was more appropriate for something likely to have many short separate flows that fit on a screen.
Other than that, it's just so many light hears beyond regular flowcharts in terms of aesthetics and readability.
I've had to design flow charts in the past and this looks like a rock solid way of designing some complex flows. It can easily turn into a spaghetti fest.
It has loops. Check out the examples here: https://drakonhub.com/drakon-examples