Fw: [ruby-core:23371] Re: Ruby/DL Documentation

i guess this thread is more appropriate in ruby-talk rather than polluting ruby-core

···

----- Forwarded Message ----
From: Aston <blackapache512-ticket@yahoo.com>
To: ruby-core@ruby-lang.org
Sent: Wednesday, 6 May, 2009 11:34:36 PM
Subject: [ruby-core:23371] Re: Ruby/DL Documentation

thanks a lot tad.bochan@bnpparibas.com and sh@sheepman.sakura.ne.jp

tad seems to be using 1.8.x, i am using ruby19 on FreeBSD7.2

[diesalunix@raptor ~]$ uname -a
FreeBSD raptor 7.2-PRERELEASE FreeBSD 7.2-PRERELEASE #1: Sun Mar 29
19:18:27 UTC 2009 root@raptor:/usr/obj/usr/src/sys/ARGON18 amd64
[diesalunix@raptor ~]$ ruby19 -v
ruby 1.9.2dev (2009-05-02 trunk 23326) [x86_64-freebsd7.2]

as suggested by sh@ test/dl/test_*.rb are good (not gr8!) source for learning, but given the fact there exists no other code using dl elsewhere I am very happy I found them. thanks sh@

While googling around I discovered ruby-ffi (http://kenai.com/projects/ruby-ffi/pages/Home\), and it seems to be much more clean and complete solution. It is supported by other VMs as well. I would have prefered to be with dl since it is part of standard ruby C implementation but it is very difficult to use(u got to have lot of time and little black magic), code using it is almost non-existent and /dev/null documentation

when reading about ruby-ffi elsewhere it appears very promising, what is its future in regard to ruby's C implementation ? will it ever be part of stdlib ? it appears it is still taking shape but by and large stable

Aston

________________________________
From: "sh@sheepman.sakura.ne.jp" <sh@sheepman.sakura.ne.jp>
To: ruby-core@ruby-lang.org
Sent: Tuesday, 5 May, 2009 2:06:09 PM
Subject: [ruby-core:23359] Re: Ruby/DL Documentation

Hi,

It is helpful to read test/dl/test_*.rb in ruby-1.9.tar.gz.
You have to master pack and unpack anyway.
The following is an example.

$ cat sum.c
double sum(double *arry, int len)
{
  double ret = 0;
  int i;
  for(i = 0; i < len; i++){
    ret = ret + arry[i];
  }
  return ret;
}

$ gcc -shared sum.c -o libsum.so

$ cat d.rb
require 'dl/import'
module M
  extend DL::Importer
  dlload './libsum.so'
  extern 'double sum(double*, int)'
end
p M.sum([2.0, 3.0, 4.0].pack("d*"), 3)

$ ruby-1.9 -v d.rb
ruby 1.9.2dev (2009-05-02 trunk 23326) [i686-linux]
9.0

2009/5/4 Aston <blackapache512-ticket@yahoo.com>:

Hello,

recently i have been trying to learn and use dl library. while searching i
found this excellent link
http://www.jbrowse.com/text/rdl_en.html

unfortunately it is specific to 1.8.x

i wonder how people here use DL, since it is very scarcely documented. i
have been trying to
hack around ./ext/dl/*.c files but i have gained very little usable
information.

ok, my question is about passing an array from ruby to some native libraries
(IPP(Intel® Integrated Performance Primitives) to be specific)
on windows. yes i about other alternatives, i could embed ruby in my app and
do whatever, there is gr8 support there
but this is about quickly loading and using native libraries via dynamic
loader.

consider code below
some_fast_math_function( float* array, int len);

then how to pass 'array' argument from ruby ?
i tried this

require 'dl'

module NativeLibs
# do the job for accessing some_fast_math_function
end

array = DL.malloc(size)
NativeLibs.some_fast_math_function( array, size) # crashes :frowning:

some how sucess is elusive for me, this crashes(core dumps) for me, i am
sure this is due to my inexperienced stunts with DL

Aston

________________________________
Now surf faster and smarter ! Check out the new Firefox 3 - Yahoo! Edition *
Click here!

________________________________
Explore your hobbies and interests. Click here to begin.

      Cricket on your mind? Visit the ultimate cricket website. Enter http://beta.cricket.yahoo.com