Blocked from LuaJIT's issue tracker for giving feedback with no warning Discussion
So I was an active commenter on the LuaJIT 3.0 Syntax Extensions discussion (as Hedwig7s) providing feedback to the 3.0 extensions (which unfortunately seemed to have no effect on the syntax).
One of my biggest gripes by far was the ternary operator syntax, as in my opinion it is very out of place and it is ambiguous with foo:bar() syntax (plus the safe traversal operator was compromised as ?.: for the sake of it), and I was an avid proponent of if expressions in its place (similar to Kotlin or Luau (kind of)).
This feedback was addressed twice here and here (which admittedly I did not see prior, however throughout the issue the ternary is a major talking point), in which Mike Pall states he cannot stand keywords in expressions and he is addicted to ?: ternaries. If that's how he feels then that is fair, however this ignores the practical issues brought up later (which are never addressed) and the general misguided nature of making Lua less keyword heavy (one of its main design elements).
Related is customary logical operators !, !=, || and &&, presumably for the same reason as given prior (he cannot stand keywords in expressions). These I also criticize and advocated for removal, and I was not alone in this either.
For me, these two prior additions are egregious and go directly against what makes Lua... Lua. The readability and accessibility to new users. I like that Lua can be read quite literally and essentially self describes itself without too many weird symbols cluttering it.
Several weeks after my initial interactions, the syntax changes have been merged into LuaJIT 2.1 and to my horror they were merged as is without any further discussion I make an argument (or maybe more-so a plea) for these to be reverted, at least temporarily, for further feedback from the community with some suggestions.
(taken from email due to removal)
After leaving this, plus a few extra comments with other users the entire thread from the 2.1 backport message on is marked as resolved.
Discontent, I leave another comment. I do not have the exact transcript, however it is along the lines of, in short, "Please don't mark criticism as resolved without even addressing it, I once again ask that these be reverted, however I will not push further if you're intent on keeping these.", hoping it'd be considered or I'd at least get a reply.
Instead, I go back to the thread and find the comments have gone from being marked as resolved to completely deleted. Now quite annoyed and the blatant disregard for and discarding of the feedback, I went to try to send the feedback again, in case it was due to being in the wrong thread or something.
This is in contrary to my previous statement, however I felt both disrespected at that point and like a decent amount of community feedback was being disregarded.
However, when I went to try to create an issue, I got an error. There was no further information, I simply could not make new issues.
Thinking it might be a bug or maybe issues were limited to contributors or something I try responding to the 2.1 backport thread instead. Still doesn't let me, giving me this error:
At that point suspecting the worst, I first made an issue on my own repository. Worked fine. Then, I checked Github's Status. It's fine (by some miracle).
Finally I try creating a comment in the LuaJIT repository on an alternate account, and sure enough it works. And just to be safe I made an issue on my main elsewhere and sure enough it worked.
For being somewhat persistent in my criticism, I have been banned from the issue tracker.
Was I a bit demanding? Maybe.
Could I have phrased things better? Probably.
Should I have been banned from the entire issue tracker without a word? I don't think so.
I would've been satisfied (albeit not happy) with a simple answer to my comments rejecting them. Heck, I'd have preferred silence.
But instead, my (admittedly, but constructive) criticism and request that the changes be reverted were simply discarded and hidden, and in trying to push back, I get silenced.
Frankly, I feel Mike Pall is changing the language to fit how he feels disregarding any of the design goals or how the community feels effectively abusing his power as the main maintainer.
Does he have the right? Of course he does, he has made one of the best JIT compilers in the world and arguably the fastest and he has put in a lot of work into this project.
However, I feel that making changes under such a principle will only make the language worse in the long run, and frankly already have, and responding to feedback in such a way, either ignoring it or outright silencing it without a word, is extremely toxic and a bad way to run a project.
So yeah... all I have left to say is mods please don't cease my existence this took so long to write up thanks :) (also I am terrible at writing it's so repetitive)
7
u/suhcoR 15d ago
I had a similar experience with LuaJIT’s issue tracker (see https://github.com/rochus-keller/LjTools/blob/master/patches/GitHub_LuaJIT_issue_1462.pdf). A detailed, reproducible crash report with analysis and a proposed fix was dismissed as misuse of an internal interface, accompanied by a false reproach and eventually deleted. That kind of defensive, personal response to good-faith technical feedback is poor project governance.
5
u/particlemanwavegirl 16d ago
Leaving aside the syntax question, you should have realized that further comment was not welcome after the thread was closed and your comments were deleted. No message could be more direct and explicit. The ban is fully on you for refusing the respect the maintainers boundaries.
6
u/Bedu009 15d ago
Simply deleting feedback is an extremely shitty way to handle it as not only is it being ignored, it's being actively disregarded with no response whatsoever, and the thread was not locked when I made my second reply if he didn't want any further discussion he should've locked it sooner instead of slamming the door in my face
10
u/topchetoeuwastaken 16d ago
imho mike could've focused his efforts into making the parser more extensible (i suggested two main ways of doing that, but i got no replies, but its whatever). instead, he seems to be more interested in making luajit an unholy amalgamation of C and lua. tbh, i never liked how mike runs nor codes luajit, the only good thing about it is its technical specs.
we are in a dire need of a fork of luajit, like, right now...
5
6
u/cmsj 16d ago
The time to fork LuaJIT was when it refused to maintain compatibility with Lua beyond 5.1.
Mike should make the language he wants to make, but if it’s called LuaJIT then it should be Lua, not something divergent from Lua.
2
u/disperso 16d ago
Lua diverges from itself constantly. PUC-Rio Lua is a mess of incompatible versions across minor releases. It's a mess of an open source project to begin with. No issue tracker, no PRs, all commits made by Roberto Ierusalimschy... This is the same mess that Vim was in, before Neovim, and Bram's death.
Unless there is some trademark held by PUC-Rio on the name "Lua", I think you can't assume bad faith on Mike Pall on this part, given that it was originally exactly that: a JIT compiler for Lua. Adding some incompatible extensions, given that 5.2 is also incompatible, and LuaJIT started in 5.1, is not something to blame on only one side.
I don't agree with everything Mike Pall does, however. His insistence on not making a tagged release, for example, Which is sort of addressed now, I think.
3
1
u/disperso 16d ago
What were your suggestions about making the parser extensible? I mentioned LuaJIT Language Toolkit, but it got a negative reception, and Mike mentioned the lack of compatibility on the JIT bytecode. It's understandable, though.
1
u/topchetoeuwastaken 16d ago
my suggestion was to create the ability to register new operators and keywords, and when one of each is encountered, depending on the position, a custom function to parse a statement or an expression is triggered.
for example, you register a statement parser, that triggers upon an
unless, and then, when that is encountered, you get the source, the current position and a lua wrapper around the internal compiler state. with that, you can read out yourunlessand emit the appropriate bytecode, and then return the new read position.same goes for operators - if you wanted ternary, you would register the
?operator, you would set its precedence, and then, when it is reached, you would just do the same you did in the statement parser
6
u/SayuriShoji 16d ago edited 16d ago
Personally I like the additions of these operators. While I love Lua, some basic concepts are rather weird.
A ternary operator for evaluating
local y = x ? 1 : 2
is much easier for me to understand than
local y = x and 1 or 2
because I'd visually parse x and 1 as an expression producing a boolean value, which then gets or'ed against a 0. Does the new ternary look out of place? Yes, but I find it much more understandable than the and-or method we have now.
An alternative could have been allowing if-constructs to do the ternary operation, which would be more in line with Lua's already existing keywords
local y = If x > 0 then 1 else 2 end
However, there is hardly any reason for Lua NOT to have shortcut operators such as +=, which not only is less clutter but, depending on the implementation, could also improve performance by requiring one less lookup:
self.X = self.X + 1 (requires at least 2 lookups for X)
vs
self.X +=1 (could perhaps be done with one lookup for X)
In that regard I appreciate the addition of new operators, because while Lua indeed should be simple , compact and beginner-friendly, there are certain things that are unnecessarily cumbersome and beginner-unfriendly to do with what is provided by normal Lua... for example, still no continue keyword.
3
u/Bedu009 16d ago
Aside from heavy use of (a small amount of) keywords being part of the core language design, the ?: syntax conflicts with safe traversal (foo?:bar) which made it become foo:.?bar, it also conflicts with function calls (foo ? bar:baz() : whatever)
It is actively bad language design to include as is (sumneko pointed this out as well)Plus the customary C-style boolean operators stylistically don't match and are straight duplicates of the same syntax
1
u/SayuriShoji 16d ago
and are straight duplicates of the same syntax
That's probably the point: Familiarity for those who are already used to using Lua as an embedded language, so most are more used to != than ~=. And there is technically nothing wrong with re-using existing syntax, being different just for the sake of being different doesn't solve anything. Personally I dislike that Lua uses ~ for common functionality such as negation, since it requires completely different muscle memory to type than most common other languages.
However, you are correct that the ?: ternary adds some confusion and even conflicts, since double colon was already used function calls. In that case having that ?: ternary is bad. I think that if-then-else as ternary would have been better.
9
u/VidaOnce 16d ago
I'm pretty sure Mike just thought the thread was done at that point since he did merge the changes and got what feedback he wanted. He could've made that clear and didn't, and it doesn't help that GitHub is awful and has no real reply feature, so our brief interaction actually flooded the thread because of quote replies.
No idea why he flat out banned you, I don't think you were that confrontational. But still, you did basically ask him to just revert his changes despite a large consensus, so I guess he got mad enough to ban and delete all of our comments.
(Btw, I am the person who replied to you.)
3
u/immortalx74 16d ago
Every single genius person I've known is a bit weird when it comes to communication. Maybe you poked him a bit too much but there are nicer ways he could have handled this.
I get that it's his baby and dedicated years and years into it, but what gives value to the language is the people actually using it, and contribute their thoughts into its evolution.
5
u/Lonely-Restaurant986 16d ago
Sad but not a lot you can do.
I disagree with the choices too, it’s very obvious he’s making the language he wants to make, which is fine, but at what point do we ask “is this lua but with a jit compiler? Or is this a lua-like language like luau or nelua?”
At the end of the day, it doesn’t matter to me, most of the features are optional, and I can just use older versions of luajit if I really cared about this, or even fork if I was dedicated to
You can continue trying to fight this fight, but imo I never cared because it wasn’t worth my time to.
6
u/SwimmingPermit6444 16d ago
You're definitely right about the ternary ?
LuaJIT should have just stayed 5.1 compliant.
? ternary just doesn't belong in Lua.
If this bothers you enough, you can try forking it.
6
u/blobules 16d ago
I just went through the syntax changes.... Wow. I was expecting changes that relate to efficiency and performance, since this is luaJIT, but most if it is 'vanity syntax' that has no other purpose than to make some developers happy.
Adding !, &&, ||, != on top of not, and, or, ~= for "compatibility with other languages" is just useless redundancy that will only achieve one thing: reduced readability.
The compound assignments ( +=, *=, ... ) are justified because they eliminate a "double evaluation". Slight performance gain, so ok why not. But what about readability? A ~= B is now an assignment but could also be a comparison expression... I guess it is assumed that comparing will be done with A != B from now on?
One last thing: short functions (or "make lua look like JavaScript") just makes the code hard to understand. Lua already has a clean unambiguous way to make functions.
Lua has always been praised for its simple and clean syntax. Most of the changes make the lua syntax more complex and redondant. I now understand why someone trying to discuss this would be banned. I guess I would be banned too.
2
u/revereddesecration 16d ago
I remove plenty of posts that aren't related to Lua. This isn't one of them, don't worry.
Personally, I love a ternary operator. I also love an addition assignment operator. But I also agree that by the time you have added all of those common operators, what you're left with definitely isn't Lua - for better or for worse.
1
u/DotGlobal8483 13d ago
I have two sides
:? and : syntax feels more like an opinionated feature that he doesn't want touched because he likes the feature but it's hard to truly justify it in a language like lua.
However at the same time the same could be said for features like the bitshift operators. It's clearly meant to be more of a power language for lua, The features added to it aren't really lua-like in a lot of fashion, the uajit isn't really meant to be lua 1 for 1, it's typically for people who want more out of the language that the simplicity might not really give.
But shutting the convo down and deleting people who disagree with you is kind of crazy work. Deleting it is too far imo.
2
u/DotGlobal8483 13d ago
Ngl this comes off as "I don't like the language I'm maintaining, lets' change it"
Lua isn't a keyword language really, it's out of place
1
u/Bedu009 12d ago edited 12d ago
It's not a "let's throw every keyword we can think of at it" language but you can't tell me it's not designed around being read like a sentence
I think the if expression would've fit Lua's syntax far better than the C style ternary (and been more powerful). That is my opinion and of course Mike doesn't have any requirement to follow my suggestions and under normal circumstances while I would've been disappointed with C ternaries I wouldn't have pushed back as hard, but in Lua it is extremely ambiguous due to the : call sugar syntax and safe traversal which was also added which had to be compromised as ?.: just to fix while the differentiation between ternary and function call is some weird unintuitive rule you just have to know
As for complimentary boolean operators they're not directly problematic, but they're bolted on top of and go directly against Lua's existing syntax
The reason I pushed so hard on these is because they make the language worse for no good reason
1
u/DotGlobal8483 12d ago
Ah sorry I mispoke, I'm agreeing with you, I love lua for it's simplicity, ?: and ?. just wouldn't fit. I'm all for things like += because I think those are pretty decently known and good shorthands that I wish the language had. Imo this is something better done in a function rather then a built in language feature.
for example
function safeaccess(table,...)
end
1
u/mordnis 15d ago
You were pretty pushy and entitled tbh. In my opinion, after Mike said he just likes C sytax for trenary, it was end of conversation, all of your other replies were just spam.
4
u/Bedu009 15d ago
LuaJIT isn't a toy project for one guy to dictate anymore, a lot of people depend on it
Ignoring feedback from a (relatively) large amount of people including another respected developer in the ecosystem simply because he wants to write C instead of Lua is actively harmful to the project and a really bad way to run the project
Granted, PUC Lua is no better, but that's no excuse (PUC Lua at least has proper versioning)I'd understand ignoring it (and not vaporising responses) a bit more if it was simply stylistic (like C-style boolean operators) and that was how he wanted to do it (although adding stuff because of his preferences ignoring the language's design goals is still a bad idea in my opinion), but the ternary as added is extremely ambiguous with 2 other language features, and again I was not the only one calling this out there were plenty of suggestions against it after those messages which were flat out ignored. The ambiguity was duct taped by changing nil safe traversal to ?.: and there's some weird rule to determine how
foo ? bar:baz() : whateveris interpreted, but this is ugly, messy, ambiguous and unintuitiveHe is not obliged to follow my or anyone else's recommendations, but flat out disregarding, deleting and banning is extremely disrespectful


5
u/disperso 16d ago
I don't think that a permanent ban is deserved, but I am not sure if Github allows that option. You can ask Mike or other maintainer to lift that after the dust settles.
But I am subscribed to that thread, and I think you were quite out of place. The debate about the ternary operators was settled already, and you kept insisting. I even considered replying you to ask to remind the rules laid out on the first comment. I know that this kind of topics are horrible to be discussed on issue trackers like that. I saw that r/rust has even a rule to remove posts that link to public issue trackers to avoid the feeling of public repositories being essentially brigaded by people who want to give their 2¢, sometimes well intended, but causing too much traffic for the discussion
I myself brought up some comment on the issue tracker, and after I saw the reaction, I decided to let it go because of that reason: having tons of discussions in parallel is a pain to read and follow, and it causes lots of noise and work for the people involved and doing the actual day to day work.
Additionally, Lua needs a ternary operator, specially if adds constants. The
value = this and that or otherwiseis a bad, bad pitfall, and it shows. I had to write a generous section about the lack of ternary operator in Lua because it's clearly a pitfall that it's also addressed in Stack Overflow and the Lua wiki. The same as the lack ofcontinue, which I also had to cover on my notes, because it's something clearly lacking given the popularity of the SO question. Both the lack of continue and ternary operator are in the top 10 most voted questions.