What about strong typedefs just for "primitives" like timestamps where
implicit conversion is more of a concern than absolute optimization?

On Mon, Sep 16, 2019 at 12:59 PM Kenton Varda <[email protected]> wrote:

> Hi Vitali,
>
> What you propose looks pretty similar to what I've had in mind for a while
> for "inline structs".
>
> I might do it more like:
>
>     struct Vector3f inlineable {
>       // `inlineable` keyword generates code that uses dynamic field
> offsets
>       // from a table at runtime, thereby enabling inlining with varying
> layouts.
>
>       x @0 :Float32;
>       y @1 :Float32;
>       z @2 :Float32;
>     }
>
>     struct MyAwesomeStruct {
>       foo @[2..4] :Vector3f;
>       // typical use: layout is like a group, but the type is Vector3f
>
>       bar @[0..1,5] :Vector3f;
>       // split use; useful when the inlined struct adds new fields.
>
>       baz @[6] :Vector3f;
>       // incomplete use; produces compiler warning like:
>       //     Vector3f has been extended with two new fields; to use them
> you must assign two more numbers.
>
>       qux @[7..9] :List(Float32);
>       // inline list, always has 3 elements.
>     }
>
> Unfortunately I don't have any timeline for implementing this feature, and
> I do worry that it will be overcomplicated...
>
> -Kenton
>
> On Wed, Sep 11, 2019 at 2:47 PM <[email protected]> wrote:
>
>> Is there any support for strong type aliasing? I see it on the roadmap
>> but I'm guessing no progress has been done on that front?
>>
>> The specific use-case I'm dealing with is time & wanting to ensure the
>> correct units and epoch can be used (e.g. define a function taking a
>> monotonic_clock::timepoint and return a strongly typed 64-bit integer
>> nanoseconds that's typed to represent network time so that when the other
>> side reads it it needs to reverse convert.
>>
>> More advanced would be to be able to define a Vector3f data type that I
>> know will only ever have 3 floats that I can reuse in a bunch of places
>> without paying for the cost of it being a separate struct (.e.g it would
>> take an "offset" field number & use up offset + N). So something like:
>>
>> group@N Vector3f {
>>    x @N[0] :float;
>>    y @N[1] :float;
>>    z @N[2] :float;
>> }
>>
>> struct MyAwesomeStruct {
>>     ...
>>     vec3 @10 :Vector3f@10;
>>     vec3 @12 :Vector3f@12;
>> }
>>
>> The actual syntax that would make sense I have no opinion on. This is
>> intended to just communicate what I would like the behaviour to look like.
>> It would ideally actually be typed in C++ too rather than purely a
>> convenience schema syntax.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Cap'n Proto" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>
>
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/capnproto/4e2ff46a-449c-4d45-916d-7edcd25362f7%40googlegroups.com
>> <https://groups.google.com/d/msgid/capnproto/4e2ff46a-449c-4d45-916d-7edcd25362f7%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/CAF8PYMimja_tJ5%3DwpM8p%3DLy8D0M%2B9c5D%3Ds_EC39_wZcaUz8vOA%40mail.gmail.com.

Reply via email to