Announcing Dryverl: an Erlang-to-C binding compiler

Serge Aleynikov serge@REDACTED
Fri May 26 13:21:56 CEST 2006


If one merely looks at the XML schema definition, it does look too 
verbose.  However, if you have prior experience with EDTK, you would 
discover that many EDTK limitations have been overcome by this project, 
just to name a few:

1. Use of ei instead of erl_interface way of coding.
2. Ability to return "out" C-call parameters to Erlang
     Example:
        Erlang:  get_value_from_some_api_call() -> Value::integer()

                     invokes

        C:       int some_api_call(int* value);
                 Returns: 0    - ok,
                         -1    - error
                         value - this is something useful to be returned
                                 to Erlang

    with EDTK it would be necessary to write a C-wrapper for the
    some_api_call() that would look like this, as it doesn't understand
    returning parameters by reference:

        int some_api_call_wrapper(struct EdtkInternalState* State)
        Returns:  Integer value to be returned to Erlang
                  The ok/error code is stored in the EDTK's internal
                  State structure

2. Ability to define a partial set of parameters in a C function call to 
be returned to Erlang:

     Erlang: call_c_function(A, B, C, D, E) -> Result
          C: c_function(F, G) -> result

    The XML binding defines parameter marchaling rules.

4. Automatic selection of erlang:port_command/2 and erlang:port_call/3 
depending on the presence of binary parameters passed to/from Erlang to 
gain speed, and avoid unnecessary copying of binaries.

5. Use of hash tables for fast access to internal variables by name/id.

6. Support of XSLT-based code generators (instead of iMatrix's codegen 
with proprietary syntax).

7. Support for edoc tags.

etc.

To summarize this, I believe Dryverl is a very good leap towards making 
a flexible definition of Erlang/C binings using open source code 
generation tools based on XSLT.  Yes, it is verbose, but that 
verboseness gives the programmer very good control of every aspect of 
data marshaling between Erlang & C.  Its main merit in taking the best 
of EDTK's experience and creating a more flexible marshaling language.

Could it be done in Erlang?

It consists of three types of XML/XSLT documents:

1. XML schema that defines XML elements and constraints
2. XSLT templates used to transform a user's XML document
    into Erlang & C code compilable into an C linked-in or port driver.
3. An XML document that a user needs to write in order to
    define interface to some API library in C.

Of course these could be done in Erlang, but what value could Erlang's 
syntax or tools add to this approach to make it less verbose?

Overall, if you have a need for implementing a C driver for Erlang, I 
suggest you to try this tool, as in the long run it will save you quite 
a bit of coding/debugging time.

Regards,

Serge

Richard A. O'Keefe wrote:
> bryan rasmussen asked
>         > Why are the bindings specified in an XML Schema?
> 
> and
> Romain Lenglet <rlenglet@REDACTED> replied
> 	The *language* that is used to specify bindings is specified in 
> 	an XML Schema.
> 	
> Yes, but why specify the bindings in XML?
> This is for an Erlang interface, so surely an Erlang data structure
> would have been a lot more readable?
> 
> XML really wasn't designed to be human-readable (and by and large, it isn't)
> or human-writable (and by and large, it isn't).
> 
> Let's face it, XML is just an over-hyped and absurdly bulky way to write
> trees, and Erlang has better ways.
> 
> So what am I missing here?




More information about the erlang-questions mailing list