From: taylanbayirli@gmail.com (Taylan Ulrich Bayırlı/Kammer)
To: Marko Rauhamaa <marko@pacujo.net>
Cc: "Ludovic Courtès" <ludo@gnu.org>, guile-user@gnu.org
Subject: Re: Guile bugs
Date: Thu, 20 Jul 2017 20:26:58 +0200 [thread overview]
Message-ID: <87k2333qx9.fsf@gmail.com> (raw)
In-Reply-To: <877ez384eu.fsf@elektro.pacujo.net> (Marko Rauhamaa's message of "Thu, 20 Jul 2017 19:22:01 +0300")
Marko Rauhamaa <marko@pacujo.net> writes:
> ludo@gnu.org (Ludovic Courtès):
>
>> I’m very skeptical about this use case (I’d use ‘mmap’ and get a
>> bytevector.)
>
> Please elaborate.
>
> 1. Does Guile offer mmap to Scheme code?
It's pretty easy to call C functions from Scheme. Here's a trivial
example.
$ cat map_file.c
#include <stddef.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
void *map_file(char *file) {
int fd = open(file, O_RDONLY);
off_t size = lseek(fd, 0, SEEK_END);
return mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
}
$ gcc -shared -o map_file.so -fPIC map_file.c
$ guile
)> ,use (system foreign)
)> (define map-file
(pointer->procedure
'*
(dynamic-func "map_file"
(dynamic-link "./map_file"))
(list '*)))
)> (define file-ptr (map-file (string->pointer "/home/taylan/todo")))
)> (define file-bv (pointer->bytevector file-ptr 100)) ;see note below
)> file-bv
$3 = #vu8(45 42 45 32 111 114 103 32 45 42 45 10 10 ...)
That's ASCII for "-*- org -*-\n\n", which is what my todo file begins
with. :-)
(It's a file mode marker for Emacs, for those who don't know.)
Note: The second argument to pointer->bytevector defines the size of the
bytevector. I passed 100 because I was too lazy to get the size of the
file. You should pass the size of the file in bytes.
> 2. What would prevent Guile's GC from scanning the mmapped area for
> pointers?
I don't know the details but AFAIK this is no problem with Boehm GC.
> 3. How do I efficiently encode information in a bytevector in Scheme
> code?
What sort of data?
I have a library called bytestructures that imitates the C type system
within Scheme, to be used on bytevectors that contain data structures
generated by C code, though the library is built upon a generic core
with which other structures can be declared as well. Not sure if this
helps you:
https://github.com/TaylanUB/scheme-bytestructures/
> Marko
Hope I could help,
Taylan
next prev parent reply other threads:[~2017-07-20 18:26 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-12 23:56 How to make GNU Guile more successful Amirouche
2017-02-13 0:21 ` Amirouche
2017-02-13 11:06 ` Arne Babenhauserheide
2017-02-13 12:14 ` Arne Babenhauserheide
2017-02-13 20:20 ` Amirouche
2017-02-13 23:08 ` Arne Babenhauserheide
2017-02-13 20:28 ` Panicz Maciej Godek
2017-02-13 20:42 ` Amirouche
2017-02-13 22:34 ` Marko Rauhamaa
2017-02-13 23:56 ` Arne Babenhauserheide
2017-02-14 0:18 ` David Kastrup
2017-02-14 22:21 ` Arne Babenhauserheide
2017-02-15 17:03 ` Christopher Allan Webber
2017-02-16 19:18 ` sirgazil
2017-02-16 20:26 ` Amirouche
2017-02-14 5:59 ` Marko Rauhamaa
2017-02-14 19:36 ` Linas Vepstas
2017-02-14 20:54 ` Marko Rauhamaa
2017-02-14 22:20 ` Arne Babenhauserheide
2017-02-13 22:54 ` Arne Babenhauserheide
2017-02-14 9:54 ` Panicz Maciej Godek
2017-02-14 21:35 ` Arne Babenhauserheide
2017-03-01 19:21 ` Amirouche
2017-03-10 20:23 ` Amirouche
2017-07-14 21:54 ` Linas Vepstas
2017-07-14 21:59 ` Marko Rauhamaa
2017-07-15 10:10 ` Jan Wedekind
2017-07-15 12:55 ` Nala Ginrut
2017-07-15 12:58 ` Nala Ginrut
2017-07-15 22:17 ` Jan Wedekind
2017-07-16 9:54 ` Nala Ginrut
2017-07-17 18:52 ` Arun Isaac
2017-07-18 11:22 ` Ernest Adrogué
2017-07-16 8:30 ` Freja Nordsiek
2017-07-16 9:18 ` Marko Rauhamaa
2017-07-16 10:11 ` Freja Nordsiek
2017-07-16 10:31 ` Marko Rauhamaa
2017-07-16 10:39 ` Freja Nordsiek
2017-07-16 10:45 ` Freja Nordsiek
2017-07-20 15:28 ` Guile bugs Ludovic Courtès
2017-07-20 16:22 ` Marko Rauhamaa
2017-07-20 18:26 ` Taylan Ulrich Bayırlı/Kammer [this message]
2017-07-20 18:35 ` Marko Rauhamaa
2017-07-20 20:41 ` Ludovic Courtès
2017-07-20 22:23 ` Marko Rauhamaa
2017-07-21 4:05 ` Mark H Weaver
2017-07-21 6:15 ` Marko Rauhamaa
2017-07-21 8:16 ` Chris Vine
2017-07-21 8:27 ` Marko Rauhamaa
2017-07-21 9:17 ` Mark H Weaver
2017-07-21 10:08 ` Marko Rauhamaa
2017-07-21 10:22 ` David Kastrup
2017-09-09 21:14 ` Linas Vepstas
2017-09-09 22:31 ` Marko Rauhamaa
2017-09-09 23:02 ` Linas Vepstas
2017-07-21 16:33 ` Taylan Ulrich Bayırlı/Kammer
2017-07-21 17:12 ` Marko Rauhamaa
2017-07-21 14:19 ` Matt Wette
2017-09-09 20:30 ` Linas Vepstas
2017-09-10 13:11 ` Ludovic Courtès
2017-09-10 19:56 ` Linas Vepstas
2017-09-11 7:26 ` Ludovic Courtès
2017-09-11 8:10 ` Marko Rauhamaa
2017-09-11 11:34 ` Ludovic Courtès
2017-09-14 17:54 ` Linas Vepstas
2017-09-15 7:56 ` Ludovic Courtès
2017-09-19 11:04 ` Linas Vepstas
2017-09-19 20:18 ` Chris Vine
2017-09-19 20:21 ` Chris Vine
2017-09-19 23:39 ` Nala Ginrut
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/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k2333qx9.fsf@gmail.com \
--to=taylanbayirli@gmail.com \
--cc=guile-user@gnu.org \
--cc=ludo@gnu.org \
--cc=marko@pacujo.net \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).