While LabVIEW is primarily focused on supporting measurement and test of hardware, it has a lot of advantages going for it as a general-purpose programming language:
- Effortless parallelism
- Low barrier-to-entry for non-software engineers
- Simple front-end development
- Cross-platform between Windows and Linux desktop environments
As a software engineer, I chose LabVIEW for many of my desktop applications because of these advantages. However, there are several key drawbacks to LabVIEW as a general-purpose language which have made my development experience difficult:
- Mandatory graphical programming:
- LabVIEW's graphical programming makes it a great choice for collaborating with fellow engineers whose background is in hardware rather than software, and it makes parallelism very simple to set up and understand.
- However, it does make developing and maintaining complex applications very difficult. Simple additions to a program take much longer than they would in a text-based programming language because it forces you to spend hours pointing and clicking tiny nodes.
- Connecting two nodes that don't fit in the window at the same time is a nightmare in LabVIEW. I have spent hours dragging wires across my block diagram just to add simple passthroughs in large case structures or shift registers in large loops. In a text-based programming language, this signal would just have a name I could type in both places in seconds.
- Compiled source code:
- .vi files are saved compiled with no option to save them in the text-based DFIR or the LLVM-IR. This makes version control with GIT a nightmare. No two developers can edit the same .vi at the same time to add or update functionality.
- In a text-based programming language, or even a graphical programming language which saved to a text-based intermediate representation, multiple changes would be on different lines of the file, and GIT would be able to merge changes with little issue. This is impossible in LabVIEW because it saves to bytecode.
- By default, compiled code is not separated from sources. There is an option to change this, but it doesn't seem to always work. Modifying a VI that calls another VI results in both VIs being recompiled on disk. The result is that you can overwrite changes another developer has made to a VI in your repo simply by opening a higher-level VI that calls it.
I would love it if LabVIEW had an option to save VIs in the DFIR or LLVM-IR. This way it would be possible to write text-based code in concert with the default graphical code, to maintain source file independence, and to enable precise version control. I believe LabVIEW has the potential to be a simultaneously high-performance and approachable general-purpose programming language, but withholding the option of text-based sources is holding it back from reaching its full potential.