Moving the contract definition outside the module won't solve the problem
of naming, but at least it will allow redundant mappings of contracts to
names.

This is also true for the client side of the code. If you can't bind to an
implementation name directly you are at least required to bind to the name
of a contract. Assuming a default binding to an inferred structural type
the only reason to add a named contract to the sauce is to declare
non-structural properties. So in the end the only names we care about are
once denoting non-structural properties.

So now we have all our code bound only to names denoting non-structural
properties, and we have externalized the proofs of conformance to those
properties.

Following from the fact that we haven't reduced the visible area of our
modules we have left them completely exposed. Providers of contract
conformance declarations should then be able to use reflection and static
analysis to infer any properties that can be inferred and the remaining
once can perhaps, with some confidence, be assumed from test results.

So while still not automating much, most of the mechanics of connecting
modules has been moved into the "glue" code. Maybe a result is that more of
the glue can be shared between projects.

Also, with so much "glue"-code focused on declaring properties and how they
relate to clients and implementations maybe enough semantic information can
be inferred to enable automatic derivation of proofs, even when names has
to be guessed.

BR,

John
Den 20 apr 2013 16:52 skrev "Alan Kay" <[email protected]>:

> This is the essential benefit of a LINDA or some other kind of
> publish-subscribe approach. Each object has two billboards, one stating
> what they can do and the other what they need, etc.
>
> The catch is how are these described (especially given that local tags
> have only accidental global meaning). There are several obvious ways to get
> beyond this that have their own levels of difficulties. And as David has
> pointed out, getting people to make reasonable interfaces even for their
> own local needs has not succeeded well.
>
> But ...
>
> Cheers,
>
> Alan
>
>   ------------------------------
>  *From:* John Nilsson <[email protected]>
> *To:* Fundamentals of New Computing <[email protected]>
> *Sent:* Saturday, April 20, 2013 7:32 AM
> *Subject:* Re: [fonc] 90% glue code
>
> One approach I've been thinking about is to invert the "information
> hiding" principle.
>
> The problem with information hiding is that the interface and properties
> exposed by a module is determined by the module: "I am a..." And some line
> is drawn between which properties are implementation details, and which are
> the contract.
>
> So I was thinking, what if the roles were swapped. What if modules could
> not declare a public contract but instead just had to conform to any type,
> interface or property that a client depending on it would care to declare
> as a requirement. In effect changing the module description into a
> collection of "You are a..." statements. Kind of similar to how a
> structural type allow any module conforming to the interface without the
> module having to implement a particular nominal type.
>
> For one, declaring a contract for a dependency is rather easy as it is
> based on local reasoning: "What do I do, what do I need?" as compared to
> "What do I do, what do others need?"
>
> Another benefit would be that there is no arbitrary reduction of the
> modules full capabilities. For example a Java List only implementing
> Iterable couldn't be used by clients requiring an ordered and finite
> sequence.
>
> I would expect this to encourage module writers to declare the smallest
> set of properties possible to depend on so that there would be more focus
> on "information shielding", what information to expose one self to, rather
> than what information not to expose to others.
>
>
> The problem with this approach is that the proof of conformance can't come
> from the module, and it's hardly productive to require each client to
> provide one. I guess in some sense this is partly solved by a mechanism
> such as type classes as done in Scala or Haskell. One problem with this
> scheme though is that they do this by means of a static dispatch, making it
> impossible to specialize implementations by runtime polymorphism. While I
> haven't played with it, I do believe that Clojure has solved it while
> preserving runtime polymorphism.
>
>
> BR,
> John
>
>
> On Thu, Apr 18, 2013 at 3:13 AM, David Barbour <[email protected]>wrote:
>
> Sounds like you want stone soup 
> programming<http://awelonblue.wordpress.com/2012/09/12/stone-soup-programming/>.
> :D
>
> In retrospect, I've been disappointed with most techniques that involve
> providing "information about module capabilities" to some external
> "configurator" (e.g. linkers as constraint solvers). Developers are asked
> to grok at least two very different programming models. Hand annotations or
> hints become common practice because many properties cannot be inferred.
> The resulting system isn't elegantly metacircular, i.e. you need that
> 'configurator' in the loop and the metada with the inputs.
>
> An alternative I've been thinking about recently is to shift the link
> logic to the modules themselves. Instead of being passive bearers of
> information that some external linker glues together, the modules become
> active agents in a link environment that collaboratively construct the
> runtime behavior (which may afterwards be extracted). Developers would have
> some freedom to abstract and separate problem-specific link logic
> (including decision-making) rather than having a one-size-fits-all solution.
>
> Re: In my mind "powerful languages" thus means 98% requirements
>
> To me, "power" means something much more graduated: that I can get as much
> power as I need, that I can do so late in development without rewriting
> everything, that my language will grow with me and my projects.
>
>
> On Wed, Apr 17, 2013 at 2:04 PM, John Nilsson <[email protected]> wrote:
>
> Maybe not. If there is enough information about different modules'
> capabilities, suitability for solving various problems and requirements,
> such that the required "glue" can be generated or configured automatically
> at run time. Then what is left is the input to such a generator or
> configurator. At some level of abstraction the input should transition from
> being glue and better be described as design.
> Design could be seen as kind of a gray area if thought of mainly as
> picking what to glue together as it still involves a significant amount of
> gluing ;)
> But even design should be possible to formalize enough to minimize the
> amount of actual design decisions required to encode in the source and what
> decisions to leave to algorithms though. So what's left is to encode the
> requirements as input to the designer.
> In my mind "powerful languages" thus means 98% requirements, 2% design and
> 0% glue.
> BR
> John
> Den 17 apr 2013 05:04 skrev "Miles Fidelman" <[email protected]>:
>
>  So let's ask the obvious question, if we have powerful languages, and/or
> powerful libraries, is not an application comprised primarily of glue code
> that ties all the "piece parts" together in an application-specific way?
>
> David Barbour wrote:
>
>
> On Tue, Apr 16, 2013 at 2:25 PM, Steve Wart <[email protected] <mailto:
> [email protected]>> wrote:
>
>     > On Sun, Apr 14, 2013 at 1:44 PM, Gath-Gealaich
>     > In real systems, 90% of code (conservatively) is glue code.
>
>     What is the origin of this claim?
>
>
> I claimed it from observation and experience. But I'm sure there are other
> people who have claimed it, too. Do you doubt its veracity?
>
>
>
>     On Mon, Apr 15, 2013 at 12:15 PM, David Barbour
>     <[email protected] <mailto:[email protected]>> wrote:
>
>
>         On Mon, Apr 15, 2013 at 11:57 AM, David Barbour
>         <[email protected] <mailto:[email protected]>> wrote:
>
>
>             On Mon, Apr 15, 2013 at 10:40 AM, Loup Vaillant-David
>             <[email protected] <mailto:[email protected]>> wrote:
>
>                 On Sun, Apr 14, 2013 at 04:17:48PM -0700, David
>                 Barbour wrote:
>                 > On Sun, Apr 14, 2013 at 1:44 PM, Gath-Gealaich
>                 > In real systems, 90% of code (conservatively) is
>                 glue code.
>
>                 Does this *have* to be the case?  Real systems also
>                 use C++ (or
>                 Java).  Better languages may require less glue, (even
>                 if they require
>                 just as much core logic).
>
>
>             Yes.
>
>             The prevalence of glue code is a natural consequence of
>             combinatorial effects. E.g. there are many ways to
>             partition and summarize properties into data-structures.
>             Unless we uniformly make the same decisions - and we won't
>             (due to context-dependent variations in convenience or
>             performance) - then we will eventually have many
>             heterogeneous data models. Similarly can be said of event
>             models.
>
>             We can't avoid this problem. At best, we can delay it a
>             little.
>
>
>         I should clarify: a potential answer to the glue-code issue is
>         to *infer* much more of it, i.e. auto-wiring, constraint
>         models, searches. We could automatically build pipelines that
>         convert one type to another, given smaller steps (though this
>         does risk aggregate lossiness due to intermediate summaries or
>         subtle incompatibilities).  Machine-learning could be
>         leveraged to find correspondences between structures, perhaps
>         aiding humans. 90% or more of code will be glue-code, but it
>         doesn't all need to be hand-written. I am certainly pursuing
>         such techniques in my current language development.
>
>
>         ______________________________**_________________
>         fonc mailing list
>         [email protected] <mailto:[email protected]>
>         
> http://vpri.org/mailman/**listinfo/fonc<http://vpri.org/mailman/listinfo/fonc>
>
>
>
>     ______________________________**_________________
>     fonc mailing list
>     [email protected] <mailto:[email protected]>
>     
> http://vpri.org/mailman/**listinfo/fonc<http://vpri.org/mailman/listinfo/fonc>
>
>
>
>
> ______________________________**_________________
> fonc mailing list
> [email protected]
> http://vpri.org/mailman/**listinfo/fonc<http://vpri.org/mailman/listinfo/fonc>
>
>
>
> --
> In theory, there is no difference between theory and practice.
> In practice, there is.   .... Yogi Berra
>
> ______________________________**_________________
> fonc mailing list
> [email protected]
> http://vpri.org/mailman/**listinfo/fonc<http://vpri.org/mailman/listinfo/fonc>
>
>
> _______________________________________________
> fonc mailing list
> [email protected]
> http://vpri.org/mailman/listinfo/fonc
>
>
>
> _______________________________________________
> fonc mailing list
> [email protected]
> http://vpri.org/mailman/listinfo/fonc
>
>
>
> _______________________________________________
> fonc mailing list
> [email protected]
> http://vpri.org/mailman/listinfo/fonc
>
>
>
> _______________________________________________
> fonc mailing list
> [email protected]
> http://vpri.org/mailman/listinfo/fonc
>
>
_______________________________________________
fonc mailing list
[email protected]
http://vpri.org/mailman/listinfo/fonc

Reply via email to