View Single Post
  #25   Spotlight this post!  
Unread 16-07-2012, 23:51
Greg McKaskle Greg McKaskle is offline
Registered User
FRC #2468 (Team NI & Appreciate)
 
Join Date: Apr 2008
Rookie Year: 2008
Location: Austin, TX
Posts: 4,756
Greg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond reputeGreg McKaskle has a reputation beyond repute
Re: Team with beginner programmers?

Quote:
Labview can't natively be used in an OO style, by the way, as it has no concept of state. You'd have to pass around the state of the object to each method you want to call.
First off, I wanted to say that you did a good job on the language analysis. Kudos for getting deep into language features.

I thought I'd offer a few clarifications about LV. First off, LV really isn't purely functional, nor is it purely data flow. Pure data flow tends to use fork and join operators in order to make conditions and repetition, and in the end it is tedious and practically like using gotos. The authors intentionally merged the control structures with the more pure data flow expressions to create what they believe to be a more usable hybrid.

As for OO, it is true that initially LV didn't have objects or classes. About fifteen years ago an external Swedish company started adding OO to LV. They called it GOOP. There were a few others, and it was very interesting to see how each approached the extensions.

Ultimately, the LV team felt that in order to do it in a way that was more true to the language, we would need to do it internally. So perhaps 8 or ten years ago, the OO features started being integrated.

One of the more unique things you'll notice is that objects use by-value-semantics -- meaning that wires contain the value, rather than a reference to the value of the object. This is similar to how stack objects are done in C++. Anyway, this matches how LV does arrays, strings, and obviously scalars. It makes some OO algorithms trivial and complicates others a bit where the goal was really to create a topology of objects. In that case the user can define a reference type whose value copy can choose between a deep, shallow, counted, or other copy semantics. At this point, very little of the libraries that ship with LV are OO, but a good number of external professional SW development libs adopt it quite heavily.

Greg McKaskle