We need to distinguish at least two aspects of this question: 

(1) structure instances are first-class values in most languages that offer 
structures. 
Even in the context of C++ you can program as if you were dealing with structure
instances as values. 

(2) structure type definitions, such as (struct posn (x y)) are pieces of 
syntax, so 
using the terminology 'first-class' with them is inappropriate. The very idea 
of 
first-class value means something that a program can deal with at run-time 
w/o (m)any restrictions. [You can also define 'first-class' with respect to 
other 
times when programs compute. Even then I have difficulties calling a definition
a first-class object.] 

The next part of your question is whether we should have inheritance 
(everything 
is a struct) and whether we should expose it in the teaching languages. The 
former
is a design decision that I have rarely exploited; my hunch is that a 
programmer 
can live without it and that a meta-/tool-programmer needs it. The latter is a 
flaw that we could probably fix easily now. 

-- Matthias









On Mar 13, 2014, at 6:30 AM, Yi D wrote:

> Hi,
> 
> The documentation says that struct creates structures that are treated as 
> first-class
> values. I can see the motivation for pursuing expressiveness. So what do we 
> achieve
> using first-class structures? On the down side, I see some problems. For 
> example, in
> the Beginning Student language, a posn is both a posn? and a struct?.
> 
> > (posn? (make-posn 1 2))
> #t
> > (struct? (make-posn 1 2))
> #t
> I guess this is because posn is declared to be #:transparent.
> 
> In my opinion, exposing the struct? nature of posn undermines abstraction and 
> breaks
> encapsulation. But without declaring it #:transparent, the printer could not 
> echo
> informative response. It seems to me the two aspects: exposing the struct? 
> nature and
> informative result are unnecessarily tangled. If they can be separated, we 
> may be able
> to give informative result and at the same time not to expose the struct? 
> nature of
> structure types.
> 
> Best,
> 
> Yi
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to