Jump to content

DTaylor

Members
  • Content Count

    52
  • Joined

  • Last visited

  • Days Won

    10

DTaylor last won the day on February 28 2018

DTaylor had the most liked content!

Community Reputation

28

About DTaylor

  • Rank
    Very Active

LabVIEW Information

  • Version
    LabVIEW 2015
  • Since
    2011

Recent Profile Visitors

895 profile views
  1. I think it can be useful in cases where you don't need RMR protection and the DVR is part of some sort of data structure that you may have more than one of, making globals not an option or a poorly scaling option.
  2. There are lots of design decisions with C++, C#, and Java that in hindsight are poor, but I don't feel like the author focused on the problematic parts, and maybe confused/conflated encapsulation and abstraction. In my opinion, this style of OO can be best described by: the ability to bundle data (something like a struct or record) and operations on that data (methods, which are essentially functions with an implicit "this" argument) into classes the ability to extend classes via inheritance, and automatically and irrevocably get subtype polymorphism, which can be ad-hoc through overrides the ability to hide implementation details within a class (private fields & methods) Additional ad-hoc polymorphism via interfaces I don't think I have a problem with a language having any of those features. I don't know if bundling data and operations is helpful, but I certainly don't think having the option is harmful. I do appreciate that the <class instance>.<method>() syntax is ergonomic. This can also be achieved by "." being syntax sugar where <expression>.<function>(...args) is equivalent to function(expression, ...args). I do think it's a problem when developers shoehorn their data types into convoluted inheritance hierarchies, but this isn't an OO problem. It's equally problematic when developers shoehorn data types into any convoluted data representation. I acknowledge that there may be some times where the type extension along with the subtype polymorphism may be an elegant representation. Hiding implementation details is not something I see as problematic at all, and it's not unique to OO languages. Other languages allow private struct fields and other definitions that are only usable inside the module where they're defined. It's nice when languages have something more powerful than these style of interfaces like Rust's traits or Haskell's typeclasses, but I don't think that makes interfaces bad, maybe just less useful. The big problems with these languages are: null - Anywhere you expect a class instance you must also expect the possibility of null. Terrible! unchecked exceptions - effectively an implicit potential return type of every function you write. Terrible! lack of type-safe sum-types/discriminated unions/tagged unions. Abstract parent class and multiple concrete children, the OO equivalent, is comparatively clunky. Scala's case classes are a nice implementation with an OOish flavor. lack of robust treatment of functions as data (this is improving as functional concepts are making their way into other languages) inability to extend the functionality of classes without subtyping Unsoundness in Java's type system via inappropriate generic covariance C++ being enormous and complicated loads of safety issues in C++, but it should get a partial pass for being a lower level language C++'s lack of package manager - this is an ecosystem problem, not a language problem verbosity What are the alternatives? Maybe<T> instead of null (a generic sum type which is either T or nothing. It must be cased on) Result<T, Error> instead of exceptions (another generic sum type that is either T or an error. It must be cased on, and what an "error" is a different language decision) Give the option for sum-types! Please LabVIEW! Give facilities for functions as data, lambda functions, partial application, etc. Rust-style traits, typeclasses Appropriate generic covariance/contravariance (invariance if you can't be sound otherwise - restrictive is better than unsound) Good package managers & build systems type inference What languages do these things well that are easy to use? In my opinion: TypeScript, F#, and Scala, which all also support OO stuff. Rust is probably my favorite language, but it is not easy. Haskell is great as a learning experience, but is definitely difficult and is so high level that it makes it hard to reason about when your program will do what at runtime because of laziness.
  3. Did RegisterAddon.exe not run at all, or are you thinking it ran with incorrect privileges? I do see RegisterAddon.exe run every time I install.
  4. I think the included license is OK, we have a handful of users successfully using the trial, though you're the first to try it on Windows 10 (I don't see why that would matter). I did see the invalid status come up once when I was testing, though I don't remember the cause. If you uninstall the EM Control Refs package and re-install it, does it fix the issue? Would you be able to post a screenshot of what you're seeing? Thanks!
  5. Language-independent update just landed! For those curious, the node was creating some property nodes and setting the selected properties by the property's name, which varies from one language to another. We just needed to update it so that they were set by the property's unique ID.
  6. For right now, this node only support English LabVIEW installations. We are working on a language independent update.
  7. We have an internal tool at Erdos Miller that we've turned into a product. It's a node that outputs a cluster of references to all controls on the front panel. A free trial is available for download here: http://info.erdosmiller.com/node-control-references-software-download-v1 It replaces code like this: With a single node: It also lets you: Bind the output type to a typedef. Include a reference to the owning VI and/or the owning VI's front panel. Exclude references to controls above or to the left of the origin. Optionally exclude controls individually. Controls on tabs are organized into page clusters. Try it out and let us know what you think!
  8. Using this is almost assuredly a violation of license agreements: http://www.hmilch.net/h/labview
  9. Why stop there? It seems like there are a few nodes that disallow inlining even though it seems like it should be fine. Now we can just wrap them in an Error Ring.xnode!
  10. I think you can! It looks like the compiler exception doesn't check the fully qualified name. You can put your inline-safe XNodes inside libraries to namespace them, and name them all Error Ring.xnode.
  11. I think there is just a special case that LabVIEW knows the XNode named "Error Ring.xnode" can be inlined. If I rename an XNode to Error Ring.xnode, the aforementioned error goes away. I wonder if there is a way to whitelist other XNodes.
  12. There is a VI in the same directory as the Error Ring XNode named XSFP_ReplaceSelfWithGenCode.vi. I don't know if this has anything to do with this behavior. I've seen some private methods prefixed with XSFP - any idea what it stands for? That VI is not a member of the XNode, but I agree that none of the XNode's abilities or properties look like they have anything to do with the inlinability.
  13. I did , and the owning VI shows no error when it's replaced with it's generated code.
  14. Hmm Error Ring XNode does work for me, but others that I think should be inlinable are not, like the Butterworth Coefficients XNode.
  15. I'm also seeing this if the XNode contains only nodes that can be inlined. It appears that a VI that uses any XNode cannot be inlined, regardless of whether the generated code can be inlined or not.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.