unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* packed structures usefulness
@ 2007-11-02  8:12 Marco Maggi
  2007-11-02 10:42 ` Ludovic Courtès
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Marco Maggi @ 2007-11-02  8:12 UTC (permalink / raw)
  To: guile-user

Ciao,
  I am in the position to add, with relatively
little effort, a module to GEE to handle
packed data structures. This means that,
as example of a still unimplemented API, doing:

(define *triplet*
  (make-gstruct-type '((one . int)
	       (two . double)
	       (three . (int64 . 3)))))

(define S (make-gstruct *triplet*))

(set! (one S) 123)
(set! (two S) 1.2)
(set! (three S 2) 44)

one can define a SMOB whose internal
representation is equivalent to the C language
type:

struct triplet {
  int one;
  double two;
  int64_t three[3];
};

and then access its fields.

Remembering that, IMHO, there is no way to
mimic the C structure fields alignment from a
Scheme level inteface, I wonder if such a module
would be useful or not.

The conversion between Scheme level values and
C level values takes time, so I am not sure about
the value of the reduced memory usage.

Notice that I have already written a module
to implement variable-length vectors of C language
types, so that way of saving memory is already
available to me.

--
Marco Maggi

"Now feel the funk blast!"
Rage Against the Machine - "Calm like a bomb"




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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: packed structures usefulness
  2007-11-02  8:12 Marco Maggi
@ 2007-11-02 10:42 ` Ludovic Courtès
  2007-11-02 12:18 ` Thien-Thi Nguyen
  2007-11-03 10:43 ` Neil Jerram
  2 siblings, 0 replies; 6+ messages in thread
From: Ludovic Courtès @ 2007-11-02 10:42 UTC (permalink / raw)
  To: guile-user

Hi,

"Marco Maggi" <marco.maggi-ipsu@poste.it> writes:

>   I am in the position to add, with relatively
> little effort, a module to GEE to handle
> packed data structures. This means that,
> as example of a still unimplemented API, doing:
>
> (define *triplet*
>   (make-gstruct-type '((one . int)
> 	       (two . double)
> 	       (three . (int64 . 3)))))
>
> (define S (make-gstruct *triplet*))
>
> (set! (one S) 123)
> (set! (two S) 1.2)
> (set! (three S 2) 44)
>
> one can define a SMOB whose internal
> representation is equivalent to the C language
> type:
>
> struct triplet {
>   int one;
>   double two;
>   int64_t three[3];
> }; 
>
> and then access its fields.
>
> Remembering that, IMHO, there is no way to
> mimic the C structure fields alignment from a
> Scheme level inteface, I wonder if such a module
> would be useful or not.

I'm not convinced.  :-)

Most "modern" C libraries use opaque types, typically pointers to
structs, so you rarely get to access the fields directly.

(BTW, note that Guile's structs have a specified C layout in terms of
`SCM' fields, though.)

Thanks,
Ludovic.



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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: packed structures usefulness
  2007-11-02  8:12 Marco Maggi
  2007-11-02 10:42 ` Ludovic Courtès
@ 2007-11-02 12:18 ` Thien-Thi Nguyen
  2007-11-03 10:43 ` Neil Jerram
  2 siblings, 0 replies; 6+ messages in thread
From: Thien-Thi Nguyen @ 2007-11-02 12:18 UTC (permalink / raw)
  To: Marco Maggi; +Cc: guile-user

() "Marco Maggi" <marco.maggi-ipsu@poste.it>
() Fri,  2 Nov 2007 09:12:05 +0100

   I wonder if such a module would be useful or not.

i think so, if it can handle char, short, and bitfields.
presuming it has length and signedness checks, it would
be nice to have those configurable, as well (ie., error
vs warn vs auto-normalize).

thi


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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: packed structures usefulness
  2007-11-02  8:12 Marco Maggi
  2007-11-02 10:42 ` Ludovic Courtès
  2007-11-02 12:18 ` Thien-Thi Nguyen
@ 2007-11-03 10:43 ` Neil Jerram
  2 siblings, 0 replies; 6+ messages in thread
From: Neil Jerram @ 2007-11-03 10:43 UTC (permalink / raw)
  To: Marco Maggi; +Cc: guile-user

"Marco Maggi" <marco.maggi-ipsu@poste.it> writes:

> one can define a SMOB whose internal
> representation is equivalent to the C language
> type:
>
> struct triplet {
>   int one;
>   double two;
>   int64_t three[3];
> }; 

I implemented something like this for an application whose basic
control mechanism is message passing using flat C structures ("flat"
=> no pointers), because I wanted to be able to build and manipulate
the structures from Scheme.

I handled the padding issue by autogenerating structure definitions
like this (from the header files that define the structures):

struct struct_desc triplet_desc[] =
{
  { "one", offsetof(struct triplet, one), sizeof(one) },
  { "two", offsetof(struct triplet, two), sizeof(two) },
  ...
};

(It was more complex than shown here, to handle embedded structures,
array fields, etc., but I'm sure you get the idea.)

Then writing C code to read these definitions and export them to the
Scheme level.

I didn't use SMOBs.  On the Scheme level the structure is just a
uniform byte array, and there are procedures for reading and writing
fields (identified by name), using the structure definition
information.

So to answer your actual question: yes, I think this is useful, but
only in a rather specific kind of application context.

(One could also consider using this approach for reading and writing
binary network protocols, but that feels less robust to me than the
traditional approach of reading and writing a sequential byte stream.)

Regards,
        Neil



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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: packed structures usefulness
@ 2007-11-06 20:53 Marco Maggi
  2007-11-07 13:16 ` Thien-Thi Nguyen
  0 siblings, 1 reply; 6+ messages in thread
From: Marco Maggi @ 2007-11-06 20:53 UTC (permalink / raw)
  To: guile-user

"ludo@gnu.org" wrote:
> "Marco Maggi" writes:
>> Remembering that, IMHO, there is no way to
>> mimic the C structure fields alignment from a
>> Scheme level inteface, I wonder if such a module
>> would be useful or not.
>
>I'm not convinced.  :-)
>
>Most  "modern"  C   libraries  use  opaque  types,
>typically pointers  to structs, so  you rarely get
>to access the fields directly.


"Thien-Thi Nguyen" wrote:
>> I wonder if such a module would be useful or not.
>
>i  think so,  if it  can handle  char,  short, and
>bitfields.  presuming it has length and signedness
>checks,   it   would  be   nice   to  have   those
>configurable,  as  well  (ie.,  error vs  warn  vs
>auto-normalize).


"Neil Jerram" wrote:
>I   implemented  something   like   this  for   an
>application  whose   basic  control  mechanism  is
>message passing using flat C structures ("flat" =>
>no pointers), because I wanted to be able to build
>and manipulate the structures from Scheme.
>[...]
>So to  answer your  actual question: yes,  I think
>this is useful, but only in a rather specific kind
>of application context.


(Thanks (expt 10 3)). I have decided to enqueue it
in  my  to  do  list.   I  will  write  it  as  an
independent module, but  with the specific purpose
of  having a tool  to write  an interface  to Ralf
Engelschall's OSSP MM: a library for shared memory
usage [1].

It is a small project  that I started one year ago
and then  put aside, because  I had no  clear idea
about  how  to  define  a "mask"  of  data  fields
through  which  "look"  at  the  allocated  shared
memory.

I will use (sub)SMOBs and define the struct format
from the Scheme level only,  I do not want to make
it  a way  to "see"  a foreign  C struct  from the
Scheme  level.  There  should  be  no  problem  to
register   an  assertion   function   and  set/get
conversion functions.

But...  ahem...  bitfields?  These are *boring* to
code... ;-)


[1] <http://www.ossp.org/pkg/lib/mm/>

--
Marco Maggi

"Now feel the funk blast!"
Rage Against the Machine - "Calm like a bomb"




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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: packed structures usefulness
  2007-11-06 20:53 packed structures usefulness Marco Maggi
@ 2007-11-07 13:16 ` Thien-Thi Nguyen
  0 siblings, 0 replies; 6+ messages in thread
From: Thien-Thi Nguyen @ 2007-11-07 13:16 UTC (permalink / raw)
  To: Marco Maggi; +Cc: guile-user

[-- Attachment #1: Type: text/plain, Size: 278 bytes --]

() "Marco Maggi" <marco.maggi-ipsu@poste.it>
() Tue,  6 Nov 2007 21:53:31 +0100

   But...  ahem...  bitfields?  These are *boring* to
   code... ;-)

you're right.  forget i mentioned it.
i now[0] think byte-granularity is enough.

thi

_______________________________________

[-- Attachment #2: work in progress X-ok-C-no --]
[-- Type: application/x-tar, Size: 94365 bytes --]

[-- Attachment #3: Type: text/plain, Size: 140 bytes --]

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-11-07 13:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-06 20:53 packed structures usefulness Marco Maggi
2007-11-07 13:16 ` Thien-Thi Nguyen
  -- strict thread matches above, loose matches on Subject: below --
2007-11-02  8:12 Marco Maggi
2007-11-02 10:42 ` Ludovic Courtès
2007-11-02 12:18 ` Thien-Thi Nguyen
2007-11-03 10:43 ` Neil Jerram

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).