From: Robert Roessler <roessler@rftp.com>
To: Caml-list <caml-list@inria.fr>
Subject: A pair of "Interfacing with C" questions
Date: Wed, 20 Jul 2005 21:53:56 -0700 [thread overview]
Message-ID: <42DF2A64.4000600@rftp.com> (raw)
1) in wrapping a large widget with multiple interfaces using
"strings", I sometimes allow the widget to copy a C-string into a
Caml-allocated string - INCLUDING "overwriting" the terminating zero
byte with zero... I wanted to make sure this was not seen as a major
problem.
As I understand the Caml runtime's use of strings (at least one zero
byte always being present), this does not seem like a problem to me -
and until memory protection granularity practices change a lot, there
should not be any trouble there... :)
2) this is about "future-proofing" (at the source level) code which
interfaces with external [foreign] components and needs to store and
pass around "opaque pointers": what is the best base Caml data type to
use?
I currently use
type opaque_ptr = int32
I assume the other choices include int64, nativeint, or even int.
int64 - good if you know you are dealing with 64-bit values, obviously
not suitable in the general case.
nativeint - this looks promising, as long as you do not need to deal
with a 64-bit-int/32-bit-pointer model... would it be safe to assume
that in any 64-bit Caml implementation, ints/pointers/"values" will
ALL be 64-bit?
int - there clearly is a restriction on using only pointers with the
low bit set to zero; if you can stipulate that this is a non-issue,
then you can just SET/CLEAR the low bit at the Caml/C boundary and
then be able to safely store to and retrieve from Caml "value" fields
(I think).
So... is the winner int or nativeint? Or ? And yes, I know that
using int will avoid an extra allocation... but are there other
considerations not represented here?
Any relevant insights will be appreciated. :)
Robert Roessler
roessler@rftp.com
http://www.rftp.com
next reply other threads:[~2005-07-21 4:53 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-21 4:53 Robert Roessler [this message]
[not found] ` <8210502975.20050721082753@moldavcable.com>
2005-07-21 5:44 ` [Caml-list] " Robert Roessler
2005-07-21 10:21 ` Jacques Garrigue
2005-07-21 10:29 ` malc
2005-07-21 11:51 ` Jacques Garrigue
2005-07-22 5:26 ` Robert Roessler
2005-07-22 9:31 ` Alexander S. Usov
2005-07-23 12:14 ` Xavier Leroy
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=42DF2A64.4000600@rftp.com \
--to=roessler@rftp.com \
--cc=caml-list@inria.fr \
/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