Funciton – A graphical programming language
esolangs.org
esolangs.org
It's great as a first attempt to delve into the strengths and shortcomings; you can't learn what won't work until you try. The author should explain the motivations after this design, and could get hints from other similar languages to improve the language.
IMHO the notation has several shortcomings that would make it very hard to use in practice, and not the best strategy for working with functions.
Maybe it's my fault for not seeing the purpose of this approach; but in my experience, free-form graph-based language work best when they emphasize working on collections and data streams, rather than on scalar function parameters. For the kind of example problems expressed in the article, a tree-based notation would work better.
Timwi does have some other useful projects though (take a look at his github), all of which are basically centered around parsing. (an IL debugger, a C# parser, generic regular expressions...)
No need for speculation. Go ahead and say it: 124 points on HN's front page objectively proves it was successful in being interesting [to more than a handful of people]. Exploration into minimalist languages sometimes leads to interesting, practical constructions as well like seen with LISP's, Forth, and Lambda Calculus. Far as time wasters go, such experimentation has a higher chance of going somewhere than some others.
The deal breaker for me (having worked on a large LabView program that controls machinery for a wind energy system) is the lack of reasonable source control systems and the fact that it is very hard to structure a large program in a comprehensive manner.
But that's exactly the problem. Handling that complexity is the reason we invented textual programming languages.
The typical strongest point of visual languages is that you can represent relations by proximity. This way, you can directly indicate the connection between a caller and its calles with an anonymous connector line, whereas in text you would need to declare a variable name, pass it as a parameter and assign it to a local variable. This makes moving data between components much more verbose in text than in graphs.
Textual programs try to approximate this relations-by-proximity with indentation levels, but the expressive possibilities in a visual language are stronger. This makes them also more difficult to lay out and organize, though. But I foresee than in the future, better support in IDEs will make it easier to mix visual and textual languages.
Visual has some large advantages as well as drawbacks. It uses a different part of the brain for reading that works more in parallel, and can actually augment your short term memory. However, making visual work requires taking advantage of its concreteness, which textual language styles can't do very well.
I'd also add that line between a simple project which reasonable men might agree that was well suited for LabView and a large project which is destined to eventually become 'a complete and utter mess of tangled wires and hierarchical blocks' is not at all obvious or delineated... and that's when the suffering really begins.
What I mean is, if the devs had to dogfood their own product, if labview was self hosting, it could become a lot better. But in the background it's all just lowered to an intermediate programming language, the front-end is just grafted on.
It's a marketing tool, just look at the camel case name. I hate it with a passion every time it comes up.
Edit: I said "just" a lot, although, apparently it's quite good for it's intended purposes so take that with a spoon of salt.
Edit: This thread repeatedly features screenshots of visual demo tools, for scenegraph and asset creation, e.g. werkkzeug 3: http://www.pouet.net/topic.php?which=8787&page=127
I missed the point about the camel case name. In any case, it's marketed as LabVIEW (VIEW standing for Virtual Instrument Engineering Workbench), not LabView.
The name just strikes me as unprofessional, or at least not very serious, just like the programming environment that it is, and I guess that's not even a bad thing if that's intended, considering the target group (of technically inclined but uninitiated or at least slow with a key board kind of lab rats).
Anyhow agree. Large LabView constructions are extremely difficult to grasp, modify, and test.
Citation needed. A graphical language can "obviously" represent anything a text-based language can.
You can compile any lambda calculus expression down to S and K and "run" them as a graph.
Doing this on real calculation probably wins a prize for non clarity though...
Text has been part of graphical representations for milennia.
The cool part is that you get to decide WHAT text you get to see -- you're not just left with seeing the lower level code.
It could be that, but it can also be boxes representing objects or functions, program modules, interacting programs, at any level of abstraction one likes.
By allowing arbitrary text in so-called graphical languages, you have turned your original statement into a vacuous truth - an empty tautology - as all text can be diagrammed.
They are not about that.
Movies are fundamentally photography too.
Or the other way around: When you write a tangled mess of code you can still navigate it with /bin/grep, this gets much harder when your code is a picture (though, when stored in SVG, it should be trivial to write a /bin/svg-code-grep). BUT: If you follow pure functional design principles, you rarely have to keep more than one screenful of diagrams in your head.
I think we have to differentiate between "general purpose visual programming languages" and "visual programming languages actually used".
Drakon, respectively its visual aspect, for example was, afaik, developed initially to allow physicists and chemists to model their domain specific knowledge in a much more intuitive way and I think it overall succeeded there. The few snippets I saw were very convincing demos[1].
Of all the attempts at purely visual, general purpose programming languages I cannot remember one that did not fall into any of these 2 camps:
* academic exploration of visual programming languages - nobody expected tangible results but we got squeak, etoys and drakon
* attempts to make programming easier by people who know just enough of programming to understand it is hard[2] - they usually promise tangible results by yesterday but never deliver anything that could count as a practically usable language
[2] Excluding all environments created specifically to teach children to code - they might be turing complete but I'd not call them "general purpose".
So, you are right that visual programming doesn't represent how a computer software works.. But it's exactly how computer hardware works.
In fact, my sentiment extends to hardware design, which is why I've been toying (and building real stuff for work) with SKiDL lately, a Python extension that allows for text based schematic capture for printed circuit board design.
Of course, the actual routing of the traces still must be done by hand. However, during schematic capture, instead of drawing the same Zener diode input protection 100 times with a mouse, I just call the code that builds it in a loop.
There are physical and spatial constraints in efficient implementation on FPGA's. Although I don't use them, I saw plenty of examples in my research of people looking at them visually and changing representations to make them more compact or something. Modifying the physical layout outperformed whatever the initial synthesis was.
Yes, visual tools for manipulating physical aspects of the design are used, but there is little to no abstraction there like a language provides.
for labview, i feel large programs benefit tremendously from its dataflow nature. every labview project i have worked on has exceeded 1,000 VIs, and it's often very easy to componentize things such that local changes stay local.
labview works fine with source-code control. the diff and merge story could definitely be better, but they are at least usable, particularly the diff.
My first impression, from the factorial function example, is disappointment - it does not seem to promise any improvement in clarity, though that may be due to its unfamiliarity.
For example, can these diagrams "blow up exponentially" like deterministic finite automata do w.r.t. their source regular expressions?
http://scrambledeggsontoast.github.io/2014/09/28/needle-anno...
But I get your point, you probably meant "fixed width text characters" instead of ascii. I'm just being pedantic :)
I often thought that languages shouldn't need any OO keywords if those features are visual, ie. boxes and arrows.
As someone not familiar with this, why not? Can't you just draw a line from output to input?
Generally the kind of software you develop in structured text doesn't need recursion anyway.
We detached this subthread from https://news.ycombinator.com/item?id=14498855 and marked it off-topic.
[X] Boxes and arrows
[ ] Spreadsheet-like
[ ] Control flow block primitives
[ ] Grid world simulation
approach to visual programming. Your approach won't work because it gets poor scores in the following cognitive dimensions (https://en.wikipedia.org/wiki/Cognitive_dimensions_of_notati...):
[ ] Abstraction gradient
[x] Closeness of mapping
[ ] Consistency
[x] Terseness
[x] Error-proneness
[x] Hard mental operations
[ ] Hidden dependencies
[ ] Juxtaposability
[x] Premature commitment
[ ] Progressive evaluation
[x] Role-expressiveness
[ ] Secondary notation and escape from formalism
[x] Viscosity
[ ] Visibility
and the following philosophical objections may also apply:
[ ] Any schema based on undeclared program state is unacceptable
[x] Complex dependencies will get intermingled and make a mess
[ ] You can't have more than 50 visual primitives on the screen at the same time
[x] Function application is the wrong abstraction for flow graphs
[x] Similar proposals have been tried in the past, and failed
[x] It requires seeing the whole thing at once
[ ] It doesn't allow for in-place comments
[x] Evaluating program state is hard
Furthermore, this is what I think about your solution:
[x] Sorry dude, but I don't think it would work.
[ ] This is a stupid idea, and you're a stupid person for suggesting it.
[ ] Nice try, assh0le! I'm going to find out where you live and burn your house down!
https://it.slashdot.org/comments.pl?sid=4366081&cid=45208069
In other words, you could post such a takedown for plenty of visual programming languages that have very satisfied users who are made very productive by their use. Does that mean they “won’t work”? Clearly not.
These text templates are very easy to post - all it required of you was to skim the page, add an X to the lines where it felt like there was sort of a match even if you don’t really know, and click “post” - but they provide little to no value.
I chose the "flame form" format as a tribute to usenet, and for being eye-catching. It's an easy way to digest the cognitive dimensions framework applied to a practical case, which I wanted to spread. Hacker News is a good place to divulge relevant concepts to people interested in visual languages.