Open
Description
There's a need to tag entities in the language to refer to them later, currently, that's done with strings so
const part001 = startSketchAt([-1.2, 4.83])
|> line([2.8, 0], %)
|> angledLine([45, 3.09], %)
might become
const part001 = startSketchAt([-1.2, 4.83])
|> line({ to: [2.8, 0], tag: 'seg01' }, %)
|> angledLine([45, segLen('seg01', %)], %)
There are a number of problems with this
- It's just an arbitrary sequence of characters, it can't really be part of static analysis, miss-spelling would cause
segLen('sEg01', %)
to fail. - Someone could put the string in a variable, but it would be outside the pipe and so very ugly with multiple tags and still nothing stopping two tags from conflicting (same string without the user realising)
- Maybe we make some easy way of accessing the tag off the pipe object
segLen(%$seg01, %)
.$
is arbitrary but also a bit weird, maybe..
might be a better convention?%..seg01
, maybe also weird that seg01 starts its life as what looks like a string and then changes to something that behaves more like a key. - Also with the transformation from
line([2.8, 0], %)
->line({ to: [2.8, 0], tag: 'seg01' }, %)
you can see that I'm trying to keep the line function to always taking two params, and adding in more optional params by changing the first param to a key-value pair, which in itself is kind of ugly.
With all of that said maybe attributes could work as a way of adding tags that's still compatible with pipeExpressions or not
const part001 = startSketchAt([-1.2, 4.83])
#[tag=seg01]
|> line([2.8, 0], %)
|> angledLine([45, segLen(%..seg01, %)], %)
And maybe there's a possibility of this having this part of the typing system i.e.
const part001 = startSketchAt([-1.2, 4.83])
|> line([2.8, 0], %)
|> angledLine([45, segLen(%..seg01, %)], %) // <- error trying to access a non-existant tag
It would know that the tag seg01 doesn't exist ahead of execution/calls to the engine?
This goes against something I said in #2, that attributes can be used for metadata not associated with modelling, but I think I can live with that.
Metadata
Metadata
Assignees
Labels
No labels