I was on the team that developed VHDL. My task was to use it to build system simulation models, to see if it could be used as a system design language. I found it quite effective, although the semantics were somewhat tricky. Subsequent to that I was tasked with building the first VHDL “synthesis” compiler: input a behavioral program (e.g., a Fourier transform algorithm) and it would output a highly concurrent circuit design for performing that computation in deterministic time.
Years after that I encountered a language called ArchJava, developed by Jonathan Aldrich’s team at CMU. It was an amazing language, but since the IT profession generally ignores what is done in academia, it has not found use. It was a data flow language, in essence.
About four years ago I had some spare time and started developing a language that I call Flow, which attempts to be a data flow language usable for large-scale software engineering. But it is a spare time effort, while work on an analyzer (compiler front end) is well along, I have not touched it in a year).
The main feature of flow is that object references do not exist. To communicate, an object must be explicitly connected to another object. Also, there are built-in semantics for queueing messages between objects.