unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
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



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