The seemingly simple edge cases often bedevil us the most, bringing complexity, race conditions, and that unsavory sensation we might dub "designer's remorse." I submit that even the most elegant application needs to share *some* data between asynchronous processes and that this predicament is a main driver of complexity in otherwise well-designed software. As LabVIEW developers or architects, we know what NOT to use (globals, yuck!) and often reach right into our standard toolkit of complexity-shifting design patterns. Having spent an unhealthy amount of time pondering and tinkering with this problem, I propose an alternative: share and mutate these special data safely, free of race conditions, using graphical syntax that looks exactly like the deterministic, readable, dataflow that all professional LabVIEW developers know and love. In this presentation I will provide the solution and some rationale that helped me get there. The concepts come (almost) straight from Clojure, a first-class functional programming language; they just required some thought and a good deal of elbow grease to bring to LabVIEW. Introducing: the LabVIEW Atom!
Ethan Stern is a CLA and Manager at Composed Systems. With an education in Mechanical Engineering and a cynical attitude, he begrudgingly entered the workforce about 20 years ago, forming an immediate and lasting fascination with graphical programming in LabVIEW. He got the NI certs, taught the LV classes, and now co-manages Composed Systems, a Massachusetts-based NI Alliance Partner, focusing on excellence in all aspects of software design.