Skip to content
This repository has been archived by the owner on Jun 29, 2022. It is now read-only.

Iterate on requirements/cornerstones #148

Closed
wants to merge 1 commit into from

Conversation

warpfork
Copy link
Contributor

This is mostly addressing the huge batch of comments I left in the
vicinity of #146 (review) .

Some of this text might be good; some might need more iteration. In particular I also didn't yet make any thrust at addressing the "IPLD is about (Declarative) Data" key concept, which is absolutely one of our critical cornerstones that underlies all of these other points. I would still like to try to make this more explicit, though; help wanted.

@warpfork warpfork requested a review from Stebalien July 30, 2019 18:26
We definitely need these concise definitions of goals (and nongoals;
if anything, I think we might do well to have more of those!), but we
have indeed refined a few things in the last 8 months or so.

This is mostly addressing the huge batch of comments I left in the
vicinity of
#146 (review) .
Particularly tricky is that some of our most interesting and useful
ideas over the past few months *relax* some of the rules -- and so
we need to carefully come up with a way to describe that: it is
mostly recontextualizations consistent with the same underlying
philosophies... but boy is that hard to express in text sometimes!
Copy link
Member

@vmx vmx left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like where this is going, good work. Thanks @warpfork (and @Stebalien for the original doc).


**Motivation:** IPLD needs to be easy to reason about.
### Moving beyond local reasoning
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea making putting those things into a new section.

stability now requires more: holding the Schema declaration.

Note that regular, core Data Model still maintains stable pathing even in these
examples of higher level systems with alternative rules.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The original sections all have a "Motivation" which I quite like. Here the motivation could be about different views on the data like IPFS is doing it with UnixFS.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea. I should keep that up.

concepts, etc -- we can still have replication and hashing and DAG traversal
and all the rest of the important promises of the IPLD Data Model regardless of
that other context, meaning these systems are purely value-add and do not
compromise any of the other core promises of IPLD.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A possible "motivation" could be building higher level data structures (like HAMT) on top of the core IPLD Data Model.

* Path: A paths a human readable pointer to an IPLD Node.
Many nodes can exist encoded inside one Block.
* Link: A link is a kind of IPLD Node that points to another IPLD Node.
* Path: A path is composed of segments which each specify a step across an IPLD Node.
Copy link

@lanzafame lanzafame Aug 1, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am struggling to grok a step across an IPLD Node. How does one step across a point? Would it be more accurate to say step between IPLD Node(s)?

Copy link

@lanzafame lanzafame Aug 1, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, I think it just clicked.
A Node is:

(A)

A Link is:

(A) -> (B)
    ^
   Link

A Path of /A/B/C represents:

(A) -> (B) -> (C)
 |_____________^
        ^
(B) gets stepped over 

So maybe step over IPLD Node(s) is a better way of saying this. @warpfork?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I agree, this bit of text struggled. "between" might do better.

I'm not sure about that diagram, because it's not necessary that it be a link in-between; rememeber that a whole tree of Nodes can be in a Block.

Maybe I should also break this down into bullet points for "Path" and "Path Segment", and that might help? E.g. one Path Segment moves from one Node to the next (but only can describe movement of a single stride: e.g. looking up one map key, or stepping into an list by index). A Path is just a collection of Path Segments, which we often use to describe a walk of a specific, er, well, path down a Node tree.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made another shot at this in: #152 -- does that one seems clearer to you?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@warpfork Much better, made a note on a slight clarification.

@@ -31,54 +28,89 @@ IPLD but there needs to be an immutable layer at the bottom.
**Motivation:** *Having* an immutable layer is important for a lot of analysis,
memoization, type checking, etc.

## Multicodecs Are Not Types
## Multicodecs Are Not Meant to Act As Types
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great. Probably the most concise text I’ve read so far on “why you don’t need to write a new codec.”

Recently, I’ve run into some areas where I legitimately did need a new block format and codec for an application specific use case. Until I read this I didn’t have great language to distinguish why this case was different (it wasn’t about types, the motivation was compactness and limiting dependencies).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heh... Yeah, we could almost make a "## Multicodec nonproliferation treaty" and put this motivation hunk under that. "Multicodecs are not meant to act as types" could just have a "see above" for its motivation.

warpfork added a commit that referenced this pull request Aug 1, 2019
This extracts some content from #148, and regards earlier review in
#146 (comment) and
#146 (comment) .

The example is also substantially rewritten, to attempt to clarify
two things: that it's a *negative* example (!!), and also to make
it more obvious what we're proposing is a link (since the dag-json
syntax isn't introduced anywhere in this immediate vicinity, and it
can be a bit non-obvious what's going on if that wasn't in your mind's
eye already as you were reading).  This addresses
#146 (comment) .
@warpfork
Copy link
Contributor Author

warpfork commented Aug 5, 2019

Alright, closing this one -- It's stale, and it's been broken up into smaller PRs in... well, all the other PRs that can be seen referencing this one lately.

@warpfork warpfork closed this Aug 5, 2019
@warpfork warpfork deleted the renovate-requirements branch August 5, 2019 20:32
prataprc pushed a commit to iprs-dev/ipld-specs that referenced this pull request Oct 13, 2020
This extracts some content from ipld#148, and regards earlier review in
ipld#146 (comment) and
ipld#146 (comment) .

The example is also substantially rewritten, to attempt to clarify
two things: that it's a *negative* example (!!), and also to make
it more obvious what we're proposing is a link (since the dag-json
syntax isn't introduced anywhere in this immediate vicinity, and it
can be a bit non-obvious what's going on if that wasn't in your mind's
eye already as you were reading).  This addresses
ipld#146 (comment) .
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants