I’ve been using Data Output and Data Input for a week and believe it’s a huge step in the right direction for breaking up complex models into manageable pieces. It’s almost but not quite what has been common in the conventional programming world for ~50 years or so.
I’ll have more to say on this subject but for now will mention two quirks of the implementation and a very annoying yet obvious bug. I split a complex GH model into three pieces (files) that pass geometry from one to the next.
Quirk #1: If I change a parameter in Step 1 and then switch directly to Step 3, the results are a mix of Step 1 and Step 2 params, which is obviously wrong. So making a change in Step 1 requires a visit to the GH file for Step 2, which reads the data from Step 1 and outputs for Step 3, before moving to Step 3. This is a minor inconvenience given the benefits but ultimately would be nice to avoid.
Quirk #2: Much more serious and perhaps a fatal flaw for some models, it’s impossible in Step 3 to see (visualize and render) changes that are only possible in Step 1 or Step 2. In many cases, this doesn’t matter but for some things, it becomes literally impossible to produce a rendered animation of all the parts moving together because controls (parameter inputs) are in separate files. That’s a big problem.
=== BUG ===: This one suggests a flawed implementation to me, a mismatch of name/value pairs. I had eight “channels” on the Data Output component for Step 1 and decided to add three more. Instead of adding them all at the end, I used ‘+’ to insert each new one next to one of the eight existing inputs (outputs?). BEFORE (left) and AFTER (right) look like this:
!
In Step 2, Data Input shows three new “channels” as expected in the same sequence and relative positions as defined in Step 1. BUT HERE’S THE RUB: the wires in Step 2 remained attached at their old positions and didn’t shift for the new inputs, so all except the first one were connected to the wrong data and the model was corrupted. What a pain!!!
Name/value pairs are the backbone of web programming. They work very well when implemented correctly.
P.S. Step 2 uses a different file to pass different geometry to Step 3. It doesn’t modify or rewrite the data from Step 1. So both Step 2 and Step 3 (which reads Step 1 data) were messed up when the new “channels” were added in Step 1.