From: Eli Zaretskii <eliz@gnu.org>
To: "Aurélien Aptel" <aurelien.aptel+emacs@gmail.com>
Cc: joakim@verona.se, emacs-devel@gnu.org
Subject: Re: FFI in Emacs
Date: Tue, 12 Mar 2013 23:50:46 +0200 [thread overview]
Message-ID: <83d2v4jnih.fsf@gnu.org> (raw)
In-Reply-To: <CA+5B0FP1Czi+U_Hmp9qpzPsaqpctqzD9tYq=OUsMmtOQ=C+MOw@mail.gmail.com>
> Date: Tue, 12 Mar 2013 20:16:42 +0100
> From: Aurélien Aptel <aurelien.aptel+emacs@gmail.com>
> Cc: emacs-devel@gnu.org
>
> a) load the shared library dynamically
> b) get the address of any symbol in it (be it a global var or a function).
>
> Then, to call a function:
> c) load the argument according to user-provided type and ABI
> d) make the call
> e) retrieve eventual return value (also depends on ABI)
>
> Steps a and b can be done portably using libltdl [1]; c,d and e with
> libffi [2] or libffcall [3].
Do we really need these libraries? If the Posix hosts can do with
dlopen, dlsym, dlclose, and dlerror, then it's very easy to emulate
that on platforms that don't have these in the system libraries. What
else is needed, and why?
> a) a function can allocate memory that has to be freed
At least on Windows, this cannot be done safely, so please don't
design the interface based on the assumption this is doable. If a
shared object allocates memory, it should be responsible for freeing
it, or provide an API for telling it to free it.
Likewise with file descriptors -- they cannot be safely shared across
the interface, because the shared library could have used a different
runtime for opening files.
next prev parent reply other threads:[~2013-03-12 21:50 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-27 23:36 FFI in Emacs Aurélien Aptel
2012-06-27 23:47 ` Glenn Morris
2012-06-28 0:03 ` John Wiegley
2012-06-28 2:12 ` Glenn Morris
2012-06-28 3:43 ` Stefan Monnier
2012-06-28 4:51 ` John Wiegley
2012-06-28 15:27 ` Nix
2012-07-11 5:24 ` John Wiegley
2012-07-11 5:53 ` Helmut Eller
2012-07-11 6:43 ` Michael Albinus
2012-07-11 14:04 ` Burton Samograd
2012-07-11 14:07 ` Burton Samograd
2012-07-11 7:14 ` Stephen J. Turnbull
2012-07-11 7:44 ` Michael Albinus
2012-07-11 16:11 ` Eli Zaretskii
2012-07-11 17:08 ` Samuel Bronson
2012-07-11 17:49 ` Eli Zaretskii
2012-07-11 18:23 ` Stephen J. Turnbull
2012-07-11 18:30 ` Eli Zaretskii
2012-07-11 16:05 ` Eli Zaretskii
2012-07-12 13:55 ` Stefan Monnier
2012-07-12 17:01 ` Samuel Bronson
2012-07-12 18:54 ` John Wiegley
2012-07-12 23:19 ` Sam Steingold
2012-07-13 2:20 ` Óscar Fuentes
2012-07-13 3:21 ` Stephen J. Turnbull
2012-06-28 6:20 ` joakim
2012-07-11 9:40 ` joakim
2012-08-25 17:25 ` Aurélien Aptel
2012-08-25 18:20 ` joakim
2012-08-26 8:57 ` Ivan Kanis
2012-08-26 13:11 ` joakim
2013-03-12 19:16 ` Aurélien Aptel
2013-03-12 21:50 ` Eli Zaretskii [this message]
2013-03-12 22:40 ` Pascal J. Bourguignon
2013-03-13 7:41 ` Andreas Schwab
2013-03-12 22:53 ` Aurélien Aptel
2013-03-13 0:31 ` Daniel Colascione
2013-03-13 3:55 ` Eli Zaretskii
2013-03-22 19:44 ` BT Templeton
2013-03-23 1:51 ` Leo Liu
2013-03-23 2:04 ` Noah Lavine
2013-03-23 16:07 ` Stefan Monnier
2013-03-23 18:33 ` Yagnesh Raghava Yakkala
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/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83d2v4jnih.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=aurelien.aptel+emacs@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=joakim@verona.se \
/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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).