Some days ago I've created a topic about using libffi for an enhanced native 
call interface.
I've changed my mind all the way about how to build a native call interface for 
VIM, right
now I'm changing VIM sources to implement it as I'm thinking, some comments at 
this stage
would be good.

Goals:
    Make VIM able to call and be called, efficiently, from native libraries 
built as VIM plugins.

Non Goals:
    Make VIM able to call any native function.
    Make VIM automatically marshal VIM types to C types.

I started thinking of using libffi to do something as python ctypes for VIM but 
I thought it was not
a good idea because:

    Too much complexity for marshaling VIM types to C equivalents.
    Marshaling is not efficient.
    If there going be limitations at which functions are able to be called from 
VIM, why expend time on this.
    What I, myself, really want is build efficient plugins for VIM in C, not 
being able to call any function.

So this is about a interface to call VIM crafted plugins, exporting specific 
prototypes to be called from VIM
with not overhead.

How I'm building this:

    libload
        function to load a library from path/name and return a Libhandle.
    libfunc
        function to get a Libfunc from a Libhandle and function name.
    libcall / libcallex / call (not decided yet which one to use)
        function to call a Libfunc passing a raw VIM List of raw VIM types as 
arguments and returning a raw
        VIM type.
    libinit
        function initialize a VIM library from a Libhandle. This function will 
try to call an exported initialization
        function from the library:
            void vim( void *(*vim_get)(char *name) )
        If the function exist, the library should use the given vim_get 
function to ask for VIM functions and settings
        by name.
        The functions exposed by this function should be an API to allow the 
library to deal with raw VIM types
        without overhead and without internal implementation knowledge. Beyond 
dealing with VIM types
        it should export functions for VIM evaluation from strings and maybe 
other stuff.
        This API should be documented and may be extended over time.

To have libload and libfunc, I needed a way to represent library handles and 
function pointers. No VIM type
can represent that well, so I started by extending VIM variables to become yet 
more two types, Libhandle and
Libfunc. These types only show up in the context of these functions. Variables 
of these types can only be assigned,
compared (==, !=) and used in the empty function to check for nullity.

Right now I've extend VIM variables, I'm implementing the functions, the hard 
part will be to define and implement
what the vim_get callback will return.

Any comments please?

Regards

---

Francisco Lopes




-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui