From: Marko Rauhamaa <marko@pacujo.net>
To: Barry Fishman <barry@ecubist.org>
Cc: guile-user@gnu.org, guile-devel@gnu.org
Subject: Re: anyone define port types?
Date: Thu, 31 Mar 2016 22:28:01 +0300 [thread overview]
Message-ID: <87y48ysb0e.fsf@elektro.pacujo.net> (raw)
In-Reply-To: <m360w2sk4j.fsf@ecube.ecubist.org> (Barry Fishman's message of "Thu, 31 Mar 2016 12:11:08 -0400")
Barry Fishman <barry@ecubist.org>:
> On 2016-03-30 22:57:25 +0300, Marko Rauhamaa wrote:
>> All you can serialize is information. Objects are living things we
>> experience through interactions alone.
>
> Do we really want our computers to behave like organic black boxes?
I'll say yes.
> In Guile you can export, at the module level, what interface you like
> and hide any raw "get-x" style assessors.
You mean GOOPS. Guile can do a lot better.
> True you can get at raw state through the slot interface, but Guile is
> built around observably, not security, and you could get at the
> contents of closures if you really wanted to.
I don't care about security. I care about the approach. To me, objects
are thingies that interact with their surroundings. GOOPS' model is the
opposite: objects are conceptually mere dead records, structs.
> The fact that objects represent state doe not force the
> exact implementation of that state be considered outside of a single
> module.
The accessor (get-x) evokes the idea that there's a piece of information
guarded by the object that the object is willing to divulge through the
accessor, however implicitly that piece of information is encoded
internally.
I don't usually think of objects as containing information. I don't like
Java's and Python's properties because they also make objects seem like
records.
> Serialization does not have to be lost.
You serialize data, you don't serialize objects. You can serialize
configuration information. You can serialize messages. You can serialize
collected data. But objects exist, live, breathe and interact.
> I used to do large scale development in C++. Books like "Design
> Patterns" are really just series of hacks to get somewhat around the
> fact that objects built around a fixed, rigidly defined set of methods
> becomes difficult to adapt and maintain as projects grow over time.
I have some development on my belt as well. I don't know what trauma
design patterns might have inflicted on you on your career.
> I found that Common Lisp's CLOS style way of looking at objects would
> have made thing far easier to develop and maintain and produce a more
> stable code base. I really got to dislike C++'s and Java's object
> model.
So you haven't personally experienced the blessings of CLOS?
> I don't mean this to be construed as trying to make Guile a purely
> functional language. I like choices.
GOOPS is the antithesis of functional programming, I think.
>> You mean you can't associate new methods to an object. That's true
>> and can be annoying sometimes. However, GOOPS' cure is worse than the
>> disease: it exposes the slots of the object.
>
> What is exposed or not exposed seems to be something better handled by
> what modules export, and not be intrinsic to objects themselves. This
> allows methods, defined outside the module, that uses just the module
> interface to the object (or several objects) to be easily defined and
> somewhat separately manged. This becomes crucial as systems grow and
> change. Especially allowing for the idea of multi-methods.
External, derived functionality is possible at that level with the
classic rigid methods as well. If the external methods depend on the
methods the module chooses to expose, you are back with the classic
model you are trying to avoid.
Marko
next prev parent reply other threads:[~2016-03-31 19:28 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-28 19:04 anyone define port types? Andy Wingo
2016-03-28 23:53 ` Matt Wette
2016-04-05 14:06 ` Mark H Weaver
2016-04-05 23:55 ` Matt Wette
2016-06-11 16:50 ` Andy Wingo
2016-03-29 7:58 ` tomas
2016-03-29 8:52 ` Nala Ginrut
2016-03-30 6:29 ` Panicz Maciej Godek
2016-03-30 11:18 ` Jan Nieuwenhuizen
2016-03-30 17:17 ` Panicz Maciej Godek
2016-03-30 17:53 ` Marko Rauhamaa
2016-03-30 19:02 ` Panicz Maciej Godek
2016-03-30 19:57 ` Marko Rauhamaa
2016-03-31 16:11 ` Barry Fishman
2016-03-31 19:28 ` Marko Rauhamaa [this message]
2016-03-30 19:43 ` Jan Wedekind
2016-03-30 20:07 ` Marko Rauhamaa
2016-03-30 21:01 ` Jan Wedekind
2016-03-30 22:44 ` Marko Rauhamaa
2016-03-31 20:42 ` Jan Wedekind
2016-03-31 22:28 ` Marko Rauhamaa
2016-06-11 16:53 ` Andy Wingo
2016-04-01 14:38 ` Ludovic Courtès
2016-06-11 16:57 ` Andy Wingo
2016-04-14 14:08 ` Ludovic Courtès
2016-06-11 17:02 ` Andy Wingo
2016-06-12 8:25 ` Chris Vine
2016-06-19 9:13 ` Andy Wingo
2016-06-19 9:55 ` Marko Rauhamaa
2016-06-19 15:27 ` Andy Wingo
2016-06-19 15:33 ` Chris Vine
2016-06-19 17:48 ` Andy Wingo
2016-06-19 20:09 ` Chris Vine
2016-06-20 3:38 ` William ML Leslie
2016-06-20 6:45 ` Chris Vine
2016-06-20 7:34 ` Andy Wingo
2016-06-20 9:01 ` Chris Vine
2016-06-22 22:44 ` Chris Vine
2016-06-23 7:36 ` Andy Wingo
2016-06-23 8:56 ` Andy Wingo
2016-06-23 9:24 ` Chris Vine
2016-06-23 9:50 ` Marko Rauhamaa
2016-06-23 10:43 ` Andy Wingo
2016-06-23 11:49 ` William ML Leslie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y48ysb0e.fsf@elektro.pacujo.net \
--to=marko@pacujo.net \
--cc=barry@ecubist.org \
--cc=guile-devel@gnu.org \
--cc=guile-user@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).