Two completely different stories. One is public data scraping, another is private conversation scraping (where they're a first-party to the conversation). The key difference is that in the former case, no one made any promises, in the latter an explicit promise was made that data is not used for training (assuming opt-out).
If utilitarianisms only interest is the consequence of the action and whether it resulted in a positive outlook. the consequence that we care about is "your body" and if "sorry" is uttered in time, then we can receive the reward, If in the relationship you say sorry and there is an expectation of all actions being forgiven, then, this is the ultimate get out of jail free card. it is infinite because you can always use it, therefore although there is recognition of wrongdoing (at first), there is no need for a preventative measure to take place, because the recognition only looks at the consequence of reverting the status of "wronged" to "righted", not about the causes of the status "wronged" to have happened. This leads to an infinite loop of wrongful actions. What would happen if we constantly said "sorry" unnecessarily at a set interval, which we'll call the canadian way, there would always be our desired consequence and no wrongdoing to ever take place!
Without the recognition and admittance of wrongdoing, the wrong action itself will repeat forever in the relationship because its tolerable. making it an infinite get out of jail free card. If this was a system, fault tolerance would be at 100%, the error rate is probably the highest in any system that could exist, if it was code, then there wouldn't even be such a thing as bugfixes, the only recourse is "have you tried rebooting it?" method of recovery systems. Of course if the fault tolerance was not 100% then everything would be different.
Knowing and enacting are two distinct things, "you should do what I want you to do" means you're already doing the wrong thing, and yes, there is an agreement on what the right thing is, its what is ethical, that is, what non profits and archivists are forced to do.
I can’t believe that in the multipolar world of 2026, where hundreds of conflicting world views coexist, where universalism is being disproven on a daily basis, it’s still possible to read things like “there is agreement on what the right thing is”.
This is as blatantly false as claiming that the Earth is flat, and the fact that there is no such agreement (descriptive moral relativism) has been firmly established in philosophy for well over a century.
If you think ethical arguments like "murder is bad" or "human knowledge should be preserved" and a demonstrable falsity like "the earth is flat" are equivalent arguments then you are so far gone you might as well be a flat earther.
Blind futurists and AI cheerleaders scare me on how cavalier and how many crimes against humanity they ignore.
They won't. No company will, I think the best quote I've heard this week is from the proton CEO on the Decoder podcast.
"No company is going to jail for you."
If vibe code is of questionable legality, then the best thing to do is to remain guarded until its legal standing is determined. It is simply an added bonus that it prevents slop that consumes data on servers for projects that nobody cares about enough to not have vibe coded.
Are you arguing a Codeberg member had a legitimate fear of being jailed for hosting others’ AI code? And GitHub/all other hosters should have the same legitimate fear of being jailed a long as they don’t ban the same? Or is this more of a straw man? Or were you bringing up that quote to point out that those trying to defend Codeberg are using completely fabricated arguments?
> Const keyword: changing const from `local a <const> = 42` to `const a = 42` is far better syntax. The bracketed syntax was never a good idea.
The bracketed syntax is an okay idea especially for <close>, adding close as a keyword would be a disaster given how common the word is. If anything, local should have been tossed away as a keyword and the bracketed syntax adopted completely
v <local const close>, v2 = io.open'file', false
g <global const> = 5
5.5 introduced global which makes better use of attributes as well. of course, I don't deny how great it would be to not type <> or local const since const would already imply a local
> string interpolation
Hisham already made this nice module https://github.com/hishamhm/f-strings Which I don't dare use, even if you don't have string interpolation. Of course, I don't care because I just have a table.format(tbl, "tbl.key is %{key}"), is it a little tedious? sure, but its just a gsub call.
> short form function syntax
I disagree with this, I've always wanted it and roll my eyes as I write/create a function, especially when you like to use lots of them like
str:gsub('%d+', (s){ tonumber(s)+1 })
> Named varargs: It may be nice, but there is no real reason to add this. If you wanted a name for your varargs you could do `local name = ...` or just use the `args` variable already available in every function.
You've made a mistake there
local name = ...
is
local name = ({...})[1]
In order to actually do this you need to
local name = table.pack(...)
If you will use a vararg, you will always have to do this, so why not just let it be handled in the parameter definition? its costless. AND lua5.5 already introduced this so it seems they liked it.
Quite frankly I would like the capability of treating ... as just an array like ...[1] but I haven't looked at the parser to see if its feasible or not.
> Switch/Match/Select Statements: An optimized if/else block works just as well and another expansion of a small language.
I don't disagree, but big table of functions is so ugly, switch statements would be nice
- Agreed on the bracketed attributes, the close attribute is very useful and devs would reach for the brackets more if they were like as you suggest.
- short form fns: you and another commenter have given me good examples. I’m still not sure they are worth the complexity but I understand the use better now.
- varargs true! Conceded!
I'd rather it use ?.() the . means getkey, () means expression using .(expr) should be the same as array[], throwing ? as a character should be very obvious what it does.
reply