[vlc-devel] [vlc-commits] Remove libvlc_free

Steve Lhomme robux4 at ycbcr.xyz
Fri May 24 10:50:28 CEST 2019


On 2019-05-24 10:02, Rémi Denis-Courmont wrote:
> No. In general, 'extern "C"' won't suffice to preserve the ABI as a 
> whole. It only ensures that the function uses the C calling convention 
> and namespace.

What else is there in an ABI ?

> If you run a LibVLC app with an STDC++ ABI that differs from that of 

I was talking specifically about the same ABI whether it's coded in C or 
C++ (or whatever language than can handle the C calling convention).

> dynamically linked VLC C++ plugins, it will crash even now on some 
> platforms. The C++ runtime version is part of the ABI even if none of 
> the function prototypes are C++.

In a C++ ABI yes, but that's what I'm talking about.

> Le 24 mai 2019 08:25:18 GMT+03:00, Steve Lhomme <robux4 at ycbcr.xyz> a écrit :
> 
>     On 2019-05-23 17:11, Rémi Denis-Courmont wrote:
> 
>         Le torstaina 23. toukokuuta 2019, 13.57.32 EEST Steve Lhomme a
>         écrit :
> 
>             Here's another one: we could decide to rewrite libvlc in C++
>             and keep
>             the same ABI. Does that mean we would have to forced libvlc
>             hosts to
>             call "delete psz-str" because we don't feel like keeping
>             libvlc_free() ?
> 
>         You would have to keep using malloc() otherwise you would break
>         the existing
>         ABI 3.0 or 4.0 anyway that says you can use free().
> 
> 
>     That's indeed a problem. I think the free() option should not have been
>     there in the first place. I would rather vote to remove this option.
> 
>     For example we could decide that for performance reasons we allocate
>     using aligned_alloc(). On some system that requires an aligned_free().
>     We cannot do that if we allow free() of a particular runtime.
> 
>         Not only that but delete
>         would bring rather interesting considerations with RTTI.
> 
>         If you want to abstract that away, you need case-specific
>         release functions
>         like Romain pointed out - not libvlc_free().
> 
> 
>     It turns out that in many cases it would not be libvlc_free().
> 
>             That would force every host app to embed a C++ runtime just
>             because
>             libvlc happens to be written in C++.
> 
>         That example is absurd. In general, just switching LibVLC to C++
>         breaks the
>         ABI.
> 
> 
>     The extern "C" ABI remains the same, even if it's coded in C++ underneath.
> 
>         Whether it requires the application to have a C++ runtime or not
>         would
>         depend on the platform. In many cases, it actually would indeed
>         need a C++
>         runtime regardless of libvlc_free().
> 
> 
>     Yes, running a C++ libvlc will require a C++ runtime. That doesn't mean
>     the libvlc host has to deal with it. Again, in Windows this is hidden
>     when loading the DLL (dunno how .so loading works). There is no reason
>     to force the host to call the C++ delete. Just like there is no reason
>     to force the host to call the C free().
>     ------------------------------------------------------------------------
>     vlc-devel mailing list
>     To unsubscribe or modify your subscription options:
>     https://mailman.videolan.org/listinfo/vlc-devel
> 
> 
> -- 
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser 
> ma brièveté.
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> 


More information about the vlc-devel mailing list