1. 06 Dec, 2018 2 commits
    • Eric Myhre's avatar
      We should be able to compute anon type names. · 1cc1d2af
      Eric Myhre authored
      Signed-off-by: default avatarEric Myhre <hash@exultant.us>
      1cc1d2af
    • Eric Myhre's avatar
      Update type system draft. · f4bdf071
      Eric Myhre authored
      Giving a type to each, um, kind of type.
      
      Syntax draft changed.  Bigger examples elsewhere.  May need to start
      writing up more, but might not belong in this repo, either (it's not
      a detail of the golang implementation alone).  Anyway, it's only for
      eyecandy at present: I'm not going to start work on a parser for the
      DSL any time soon; it's just something to keep in mind so it can be
      evaluated against simplicity heuristics.
      
      Struct fields are in a slice now.
      
      Waffling on whether to call that kind "struct" vs "object".  Neither is
      very satisfying.  "Struct" is suggestive of something with concrete
      memory layout considerings; this is not that.  "Object" is suggestive
      of something with methods and behaviors attached; this is not that.
      
      Introduce an enum for different kinds of union.  Some of the terms here
      are developed from https://github.com/ipfs/unixfs-v2/issues/20 ; the
      term "keyed" is from https://github.com/polydawn/refmt/pull/30 ; and
      the style "kinded" is a concept I haven't written up much about before,
      but the TypeUnion.ValuesKinded field type should self-explain it.
      
      Flip terminology from "required" to "optional".  Struct fields that are
      mentioned in the schema default to being required; why else would you
      have mentioned them?  Previous draft of DSL which used question marks
      and exclamations points to denote these things dropped; the new hope is
      that *neither* nullable nor optional will be used with enough frequency
      that the sigil-heavy shorthand will turn out to be desirable.
      Signed-off-by: default avatarEric Myhre <hash@exultant.us>
      f4bdf071
  2. 31 Oct, 2018 1 commit
    • Eric Myhre's avatar
      Admit to a draft exploring type systems last week. · f7e93c59
      Eric Myhre authored
      The very first draft tried to get away with *one* "Kind" enumeration,
      but that quickly became odd and shakey; *two* separate "Kind" enums
      (one for the Data Model, one for the lower level Representation;
      working terms, and mine) fits a lot better.  The latter is what we're
      committing here.
      
      Also of interest here is a proposal for a distinction between whether
      fields are *required* vs *nullable*.  I'm not sure this has been done
      before in any of the other systems I've examined so far; it's a concept
      I think we'll want for dealing with the subtle distinction between
      whether some piece of data *matches* our schema vs whether it's *valid*
      within our schema.  But it's quite hypothetical; it's possible this
      whole concept of "matching" will turn out a lot more complex than that.
      
      There's a tossed out syntax for a schema DSL in a comment.  This is
      utterly unscrutinized and should not be taken too seriously yet.
      
      The example code at the bottom declaring some type system is code that
      *could* be used, but is mostly for demonstration and early dev
      purposes: in the long run, we *do* want to come up with a DSL, and all
      the relevant grammers, parsers, and so on for using that as an
      implementation-agnostic source of truth.  At that (far future) point,
      this kind of code would be used internally to represent what's been
      parsed out of the DSL; but users shouldn't really be writing it.
      (That's a long-winded way of saying "yes, some parts of that code are
      extremely not DRY and would be error prone if written manually"; and
      indeed, they would, and thus the point is not to.)
      Signed-off-by: default avatarEric Myhre <hash@exultant.us>
      f7e93c59