"Marco Maggi":
3b. Death to  structs!  IMO they were "an  attempt", but the
    resulting code is awful (sorry, but can you disagree?).

Err..  but aren't  structs the  main  part of  how GOOPS  is
implemented?

IMO Guile's  structs do nothing  that cannot be  done better
with a good old C struct  wrapped by a SMOB.


I've mentioned this before, but In Snd there is a function to
automatically create C structs. You have to free
the underlying c object manually though, but adding a SMOB
wrapper around shouldn't be that hard.

Oh, and thats yet another "should" for HBGC:
You don't need to mess with SMOBs to garbage collect C
objects when using the HBGC.


(load "eval-c.scm")

(define-ec-struct <struct_name>
  <int> one
  <float-*> twos
  <char-*> three
  <SCM> scm)

(define test (<struct_name> :one 1
                            :twos '(2)
                            :three "three"))

(-> test one)
=> 1

(-> test one 90)
(-> test one)
=> 90

(-> test twos)
=> (2.0)

(-> test twos '(4 5 6))
(-> test twos)
=> (4.0 5.0 6.0)

(-> test three)
=> "three"

(-> test three "four")
(-> test three)
=> "four"

(-> test scm)
=> #f

(-> test scm (lambda (x) x)) ;; stored elsewhere too, so it won't be gc-ed.
(-> test scm)
=> #<procedure #f ((x) x)>

(-> test get-size)
=> 16

(-> test get-c-object)
=> ("A_POINTER" 147502592)


(-> test destructor) ;;free it



_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user

Reply via email to