[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Idiomatic C API
- From: Sean Conner <sean@...>
- Date: Sun, 25 Feb 2018 00:34:50 -0500
It was thus said that the Great Coda Highland once stated:
> On Sat, Feb 24, 2018 at 9:33 PM, Soni "They/Them" L. <fakedme@gmail.com> wrote:
> > Lua's C API is not idiomatic. I don't see setjmp/longjmp used by things like
> > POSIX (as far as I know nothing in POSIX says you have to use setjmp/longjmp
> > to handle errors) or libuv.
> >
> > It would be more idiomatic to return error codes, and have the caller
> > propagate errors. (Using setjmp/longjmp internally is fine tho.)
> >
> > This would also increase compatibility with some libraries and programming
> > languages.
>
> It is, as is the case with so many things, a tradeoff.
>
> setjmp/longjmp is faster at runtime and simpler to code. It does of
> course have a lot of limitations you have to be careful with, but
> error codes also have a lot of things you have to be careful with --
> among other things, using error codes implies using out parameters,
> which is pretty smelly in its own right.
True. I've only used setjmp()/longjmp() once [1] in over 25 years of C
coding and it saved a ton of code and simplified the design (otherwise, it
was over 500 instances of "rc = internalfunction(); if (rc != 0) return rc;"
and a more complex design). I even turned it into a Lua module and the use
of setjmp()/longjmp() in both my code and Lua never caused an issue.
> Certainly the compatibility note is, well, noteworthy. But it doesn't
> seem to be worth the cost of refactoring the entire Lua codebase and
> API (thereby breaking literally every single C extension ever written)
> to accomplish that when you can write API wrappers to adapt Lua to
> work in the other environments (possibly using C++ mode).
Well, Soni is certainly free to do the work and see how well it goes.
-spc
[1] https://github.com/spc476/mc6809
It's an MC6809 CPU emulator as a library.