For what it's worth: While I have not tested this yet, it sounds like a very useful feature to me for certain Lua-intensive work. I will probably use it extensively myself in my AI development.

So I am all for this.  Thanks, Chris.

Cheers,
Matthias / mattsc


On 11/24/14, 23:58, chris beck wrote:
Hi List,

I'm writing to describe an optional feature which I added to master, and
an optional and very small dependency I added which supports it. There
was some minor controversy on irc whether I should have mailed the list
before doing this -- I think in this case it is small enough and
unimportant enough that it's okay but I have figured that I should mail
the list about it anyways.

Earlier last week I tried to create a "lua interpreter console" dialog
where you can interactively send commands to the in-game lua. I did this
because I felt we were missing something like the "gamestate inspector"
to help inspect the lua state as a debugging aid, and I am anticipating
that I will develop more lua-based stuff in the near future. It is
mostly working and so a few days ago I called it finished after adding
some bells and whistles.

One of the features which I added was a command history. I looked around
at what most programming language interpreters do and it turns out that
the majority of them use GNU Readline for many reasons. Besides those
written in C, Readline is also available as a popular python module.
Readline is GPL v2 and apparently is good enough that some projects have
switched to a GPL license to take advantage of it:
http://en.wikipedia.org/wiki/GNU_Readline#Implications_of_GNU_Readline.27s_GPL_license

In fact readline is also an optional dependency of lua -- if we compiled
the lua folder in current master with appropriate symbol definitions, we
could create a stand-alone lua interpreter backed up by readline.

GNU history is the small subset of readline which is related to command
line history. Besides search and recall, it supports automatically
saving and recalling the history session to a file, and bash-style
history expansions in strings. I decided that it would probably be
easier and more interesting to use GNU history rather than reimplement
something like this based on std::vector<std::string> or whatever,
surely a pretty menial task if you don't care about the persistence or
"expansions".

It took me about an hour or two read about it and implement it to my
satisfaction this way. It took me about another hour or two to
successfully cross-compile GNU history with mingw32 at gfgtdf's request.
Thanks also to gfgtdf for finding a bug in my implementation also.

Having done all this though, I'm not really about to argue or litigate
to add this as an official dependency -- frankly I don't really care.
Only a tiny fraction of users would actually use the lua console
anyways, only if they are developers or advanced UMC makers. Fewer still
would even notice or particularly care about a command line history
feature. And I'm certainly not willing to spend more time arguing about
the feature than I did implementing it, so I'm already pretty nearly
tapped out in that regard.

Why put this on master then. Well, the fact is that this library is
widely available, it's a dependency of bash, so for instance most of our
linux users already have it installed. I have set up scons to search for
the lib by default, but if it fails then proceed without it. So it works
like the optional dbus-1 dependency. It didn't occur to me at the time
that anyone would think this course of action would be unreasonable, or
would want to argue about it -- it adds some minor convenience for some
users without inconveniencing anyone else.

In a way this is a pretty awkward email, because I'm not really
interested in starting a discussion, and I'm also not interested in
rewriting or revisiting the feature for really any reason. Rather I just
don't want anyone to jump to conclusions, feel miffed and say I
inconvenienced them by adding a stealth dependency. If everyone wants it
to be removed, fine, I don't intend to post in the topic again, I will
just use the feature privately myself. If everyone would much rather
have a version of the feature without the dependency, you are of course
quite welcome to take advantage of the space between #else and #endif.

For what it's worth if any of you need to write an interpreter for a
programming language in some other context, I would recommend the use of
readline, it seems quite good.

Best Regards,
Chris Beck

P.S. For anyone interested, here is a link to my cross-compiled version
of GNU history v 6.2.0, tested to work with my mingw32-compiled wesnoth.
http://goo.gl/lFz44P?gdriveurl


_______________________________________________
Wesnoth-dev mailing list
Wesnoth-dev@gna.org
https://mail.gna.org/listinfo/wesnoth-dev


_______________________________________________
Wesnoth-dev mailing list
Wesnoth-dev@gna.org
https://mail.gna.org/listinfo/wesnoth-dev

Reply via email to