[lldb-dev] [RFC] Supporting Lua Scripting in LLDB

Kamil Rytarowski via lldb-dev lldb-dev at lists.llvm.org
Mon Dec 9 03:51:01 PST 2019

Python is in general a no-go for a BSD basesystem (micropython can be an
exception.. but Python is so large today that we can reevaluate this
statement at some point). This is why we need to either disable certain
features in LLDB or split LLDB between everything without Python in the
base and the rest (like data formatters) through 3rd party packaging system.

Once we will finish our goals for LLDB/NetBSD we will work on this
separation in order to include LLDB in the basesystem.

Lua is a part of the NetBSD and FreeBSD basesystem so all the scripting
issues can be gone. I cannot speak for Darwin or Windows basesystem, but
I can imagine that Lua is a smaller issue than Python.

Personally, I am interested in another [today] niche scripting language
(Tcl), but adding Lua support should make LLDB easier for scripting in
general. Switching Lua bindings to other language is simple, so this is
another benefit in my eyes, especially since Python bindings are machine
generated today.

On 09.12.2019 10:57, Pavel Labath via lldb-dev wrote:
> I think this would be a very interesting project, and would allow us to
> flesh out the details of the script interpreter interface.
> A lot of the complexity in our python code comes from the fact that
> python can be (a) embedded into lldb and (b) lldb can be embedded into
> python. It's been a while since I worked with lua, but from what I
> remember, lua was designed to make (a) easy., and I don't think (b) was
> ever a major goal (though it can always be done ways, of course)..
> Were you intending to implement both of these directions or just one of
> them ((a), I guess)?
> The reason I am asking this is because doing only (a) will definitely
> make lua support simpler than python, but it will also mean it won't be
> a "python-lite".
> Both of these options are fine -- I just want to understand where you're
> going with this. It also has some impact on the testing strategy, as our
> existing python tests are largely using mode (b).
> Another question I'm interested in is how deeply will this
> multi-interpreter thing go? Will it be a build time option, will it be
> selectable at runtime, but we'll have only one script interpreter per
> SBDebugger, or will we be able to freely mix'n'match scripting languages?
> I think the last option would be best because of data formatters
> (otherwise one would have a problem is some of his data formatters are
> written in python and others in lua), but it would also create a lot
> more of new api surface, as one would have to worry about consistency of
> the lua and python views of lldb, etc.
> On 09/12/2019 01:25, Jonas Devlieghere via lldb-dev wrote:
>> Hi everyone,
>> Earlier this year, when I was working on the Python script
>> interpreter, I thought it would be interesting to see what it would
>> take to support other scripting languages in LLDB. Lua, being designed
>> to be embedded, quickly came to mind. The idea remained in the back of
>> my head, but I never really got around to it, until now.
>> I was pleasantly surprised to see that it only took me a few hours to
>> create a basic but working prototype. It supports running single
>> commands as well as an interactive interpreter and has access to most
>> of the SB API through bindings generated by SWIG. Of course it's far
>> from complete.
>> Before I invest more time in this, I'm curious to hear what the
>> community thinks about adding support for another scripting language
>> to LLDB. Do we need both Lua and Python?
>> Here are some of the reasons off the top of my head as to why the
>> answer might be
>> "yes":
>>  - The cost for having another scripting language is pretty small. The
>> Lua script interpreter is very simple and SWIG can reuse the existing
>> interfaces to generate the bindings.
>>  - LLDB is designed to support multiple script interpreters, but in
>> reality we only have one. Actually exercising this property ensures
>> that we don't unintentionally break that design assumptions.
>>  - The Python script interpreter is complex. It's hard to figure out
>> what's really needed to support another language. The Lua script
>> interpreter on the other hand is pretty straightforward. Common code
>> can be shared by both.
>>  - Currently Python support is disabled for some targets, like Android
>> and iOS. Lua could enable scripting for these environments where
>> having all of Python is overkill or undesirable.
>> Reasons why the answer might be "no":
>>  - Are our users going to use this?
>>  - Supporting Python is an ongoing pain. Do we really want to risk
>> burdening ourselves with another scripting language?
>>  - The Python API is very well tested. We'd need to add test for the
>> Lua bindings as well. It's unlikely this will match the coverage of
>> Python, and probably even undesirable, because what's the point of
>> testing the same thing twice. Also, do we want to risk fragmenting
>> tests across two scripting languages?
>> There's probably a bunch more stuff that I didn't even think of. :-)
>> Personally I lean towards "yes" because I feel the benefits outweigh
>> the costs, but of course that remains to be seen. Please let me know
>> what you think!
>> If you're curious about what this looks like, you can find the patches
>> on my fork on GitHub:
>> https://github.com/JDevlieghere/llvm-project/tree/lua
>> Cheers,
>> Jonas
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> On 09/12/2019 09:33, Raphael “Teemperor” Isemann via lldb-dev wrote:
>> I think this is great, thanks for working on this! My only concern
>> is that I would prefer if we could limit the Lua tests to just the
>> Lua->C++ calling machinery (e.g., that we handle Lua strings
>> correctly and all that jazz) and not fragment our test suit.
>> Otherwise Lua seems to require far less maintenance work than
>> Python, so I am not worried about the technical debt this adds.
> I agree -- I think our position should be (at least until lua support is
> very mature) is that the primary api testing language should be python.
> I.e., every new api should have a python test, and a lua test can be
> added when there is something interesting lua-specific going on.
> pl
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20191209/8f4c4fbb/attachment.sig>

More information about the lldb-dev mailing list