RDF-raptor FFI benchmarks

> PS. RDF::Raptor 0.2.0, released yesterday, included an initial set of
> FFI bindings to Raptor, as well as RDF::Reader implementations based

cool!

my tools use tripleStreams :: URIString,URIString,(Resource URIString,Graph)|URIString so ive got unwrappers [1] and [2]

parsing all the ttl files in git clone git://git.librdf.org/repositories/{bindings,librdf,raptor,rasqal}.git 

3 runs:
Benchmark.bm{|a| a.report{E('/').take.select{|e| e if e.ext=='ttl'}.map{|f| f.redland('turtle'){|s,p,o|nil}}}}
      user     system      total        real
  7.320000   0.040000   7.360000 (  7.396536)
  7.290000   0.040000   7.330000 (  7.364663)
  7.170000   0.030000   7.200000 (  7.235484)
Benchmark.bm{|a| a.report{E('/').take.select{|e| e if e.ext=='ttl'}.map{|f| f.raptor{|s,p,o|nil}}}}
  8.660000   0.040000   8.700000 (  8.791330)
  8.600000   0.030000   8.630000 (  8.634474)
  8.530000   0.040000   8.570000 (  8.671485)

looking good.. worked out of the box too :)

in order to get redland-bindings working (ruby 1.9.2dev) i did:

add to bindings/ruby/redland_wrap.c:
#define STR2CSTR(s) StringValuePtr(s)

bindings/ruby default autohell failed, had to construct/run this:
gcc -DHAVE_CONFIG_H  -I. -DREDLAND_PRE_I -DREDLAND_TYPES_I   -I/usr/include/rasqal    -I  -g -O2  -I/usr/include/rasqal    -g -O2 -fPIC -DPIC -I/usr/include/ruby-1.9.1 -I/usr/include/ruby-1.9.1/ruby -I /usr/include/ruby-1.9.1/x86_64-linux/ -c redland_wrap.c  -o redland_wrap.o

bindings/ruby/lib/rdf/redland/:
delete all explicit finalizer stuff in all .rb files (SWIG does this automagically now?) otherwise double-free errors right away.

[1]
  def raptor
    ::RDF::Raptor::Turtle::Reader.open(d){|r|r.each_triple{|t|
        yield t[0].to_s,
        t[1].to_s,
        ((t[2].class==::RDF::Node||t[2].class==::RDF::URI) ?
         (E t[2].to_s) :
         t[2].value)
      }}; self
  end
[2]
  def redland f
    e=->n{n.node_type=='NODE_TYPE_BLANK' ? n.to_s[1..-2] : n.uri.to_s}
    Redland::Parser.new(f,'').parse_as_stream(Redland::Uri.new(uri.match(/^(file|http)/) ? uri : 'file:'+d)){|s|
      yield e.(s.subject),
      e.(s.predicate),
      s.object.class==Redland::Literal ? s.object.do{|o| o.value.send (
        E::XSDs[(dt=Redland.librdf_node_get_literal_value_datatype_uri o.node) && Redland.librdf_uri_to_string(dt)
                            ]|| :to_s )
      } : E(e.(s.object))}
  end

Received on Monday, 5 April 2010 09:16:56 UTC