[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Assigning to a constant variable with function definition syntax doesn't error
- From: Francisco Olarte <folarte@...>
- Date: Fri, 18 Jun 2021 13:21:50 +0200
On Fri, Jun 18, 2021 at 12:27 PM Andrew Gierth
<andrew@tao11.riddles.org.uk> wrote:
> Arguably the best thing to do here would be to make "local function"
> imply <const> automatically; if you want the name to be a mutable local
> var, then you can use
>
> local x
> x = function() end
That breaks some code ( mine ) ( Normally my local functions are
(logically) const, but I've just checked at least two of my modules
use a strategy function inside the module which gets changed when the
module changes state, it can be trivially fixed for that, but it has
to be )
( would not matter too much for me as I track changes and I would
preemptively change the affected code, but it may have nasty side
effects elsewhere, I use local function a lot, and only pinpointed
those two this fast because I worked on the module last week, I would
need to scan all the code or just do 'perl -I.bak -s
/local\s+function\s*(\w+)/local $1; $1 = function /' )
I also would dislike having explicit <const> in "local x" and default
in "local function". And having "local function a" be const and "local
a = function" be non const. I would much prefer to have a "local
<const> function" cosntruct in the case I need a self-referential
const function.
Also, original report ( local x const + function x overwriting it )is
has nothing to do about making local functions const, IIRC it is a bug
which seems reasonable easy to fix ( probably a missing const check in
some code path ).
One thing I've noticed is that, contrary to other languages, lua
syntax allow uninitialized const declarations ( local x <const>;,
treated as =nil the same as when no const used ). Things will get
complicated but using that as a forward declaration could make some
things easier ( like mutually recursive const functions, do "local
f<const>; local function g<const> something_using_f; local function
f<const> something using g". But this would be a complicated and
complicating change not to be attacked lightly, and only after more
experience with const usage is gained, it is in its infance as proved
by the original bug. I nearly prefer juggling functions manually for
the couple of places where I could "benefit" from it ).
Francisco Olarte.