It has a lot to do with GraphQL the ecosystem, though, doesn't it?
SQL injection is a particularly bad problem because concatenating strings is the easy path to getting queries working, and parameterization takes (a tiny bit) more effort.
Similarly, a system such that "by default, there's no authorization, no authentication, and it even comes with introspection" is a system that makes it very easy to do the wrong thing. And the default settings of GraphQL generators tend to be even worse than that.
> SQL injection is a particularly bad problem because concatenating strings is the easy path to getting queries working, and parameterization takes (a tiny bit) more effort.
Also there was a rocky period in the 90s where support for parameters was shaky or slower, which meant entire communities (PHP, ASP, even Java) established a fair amount of shared practice not doing that. Like PHP’s decision to ignore errors and register variables globally, it took many years to get that fixed in tutorials, open source code, bad API design, etc.
Small note: people often (but don't always) assume that a ring is unital (has an identity element), and that an algebra over a field is unital and associative.
Also, the label "algebra" is vague here, and refers to an "algebra over a field", but sometimes it refers to an "algebra over a ring".
For example, I can see the use of commutativity (ab = ba) and anticommutativity (ab = -ba), but I'm not sure what I'd do with the negation of commutativity (ab ≠ ba).
Nope: the negation is "there is a couple a,b such that ab!=ba", which means just "strictly not commutative group": I do not think there is a relevant theory to be done about them (otherwise, I guess it would have been done).
• Sure, it could come under the umbrella of "declarative programming", but that's an enormous umbrella, so that doesn't really say much.
• I fail to see how differentiable programming (the idea of expressing the desired computation in terms of differentiable objective functions) is any less of a "paradigm" than logic programming (the idea of expressing the desired computation in terms of logical predicates).
• Depending on the expressiveness of your programming language, every paradigm can seem like it's "a great use case of a library, but hardly worthy of being called a new programming paradigm."
> These let you build all sorts of language constructs that you couldn't build in other programming languages.
Many languages (e.g. Rust[0]) let you write procedural macros, even if their grammar is much more complex than that of a Lisp.
Is there some technical advantage to Lisp macros over macro processors in other languages (ignoring string-based ones like the CPP), or do all the benefits lie in the massively improved ergonomics of writing macros?
(Note that Rust also has simpler hygienic macros, but they're not expressive enough for many things.)
You've pretty much covered it; lisps are better at macros than any language with complicated syntax.
Most of the flow control in a lisp (for, while, if, etc, etc) can be implemented with macros. It isn't often a program needs a new form of flow control but when you need it it is there as an option and a lisp will do it better than the competition. If Rust can do threading macros then it probably has enough of the power that it isn't missing out. Still going to be a bit cumbersome.
Lisps give you the option that flow control can be implemented in a library. None of the old-school popular languages manage that.
This whole thread is going in my "Humility" file, not only did I misinterpret the error this one time, I've been messing around at the Erlang REPL putting a space after each command for absolutely no reason <headdesk>.
I'm afraid Kaczynski is probably more famous than most of them among those not interested in mathematics. And he was an assistant professor of mathematics at UCB when he turned, after all.
Gödel's story is certainly a fascinating one. However, he did
have a paranoid fear of being poisoned most of his life and weighed 30kg when he died - of malnutrition.
It means that it's opaque to your ISP and other people on your network, which is at the very least useful for people using it at McDonald's or a university.
So, pretty much the opposite of all those people currently using it instead of going together to McDonald's or university?
On a more serious note, you would need to trust not one ISP if the video wasn't encrypted, but all the ISPs in the room simultaneously, and that is probably something even less trustworthy than Facebook.
SQL injection is a particularly bad problem because concatenating strings is the easy path to getting queries working, and parameterization takes (a tiny bit) more effort.
Similarly, a system such that "by default, there's no authorization, no authentication, and it even comes with introspection" is a system that makes it very easy to do the wrong thing. And the default settings of GraphQL generators tend to be even worse than that.