128 karma · joined December 16, 2021
The trucks are all designed to be driven for the legally mandated maximum of 4.5 hours at highway speeds and to be recharged sufficiently in a 45 minute break to be able to do that again for another 4.5 hours. In particularly adverse conditions a little less driving time before recharging is possible but for an average load the currently available tech works just fine and it is mostly the charging infrastructure that limits adoption.
I have only used proper macros in Common Lisp, but at least there they are developed and debugged just like any other function. You call `macroexpand` in the repl to see the output of the macro and if there's an error you automatically get thrown in the same debugger that you use to debug other functions.
Of course, another approach would be to use the new wasm GC interface. But that requires defining a new ABI for garbage collected C, writing a new backend for LLVM, etc. So that would also be a lot of work to implement. Right now, there just is no efficient way to run programs that depend on bdwgc on wasm.
Why would that be the case? There are many much larger universities all around the globe and also in the US that manage to provide quality education to their students.
To me, the statements that colleges make about their admission procedures always seem hypocritical to me. The colleges claim that the goal is to advance gender equality and provide education to underrepresented groups (which would not require a small student body) when their main goal seems to be in fact to create a small in-group of people who have made the right connections during their studies (which absolutely does require a small student body).
If Caltech, Harvard, MIT or wherever really were committed about advancing gender inequality, why not just raise the numbers of students and admit more people? The number of students is mainly limited artificially and there's no reason they can't educate both men and women who apply.
I can't even begin to describe how overjoyed I am to finally have found a fellow campaigner for implementing the glorious techniques of Maoist China in dealing with free thought.
The wormhole solutions from the paper are semi-classical: they are obtained by taking the expectations value of the energy configuration of a quantum theory and feeding that into the classical Einstein equations. Therefore, no string theory or AdS/CFT is needed for the construction.
> y = 10; > Module[{y}, 1+y]
Yes that is precisely the point: because of Mathematicas weird evaluation model, you cannot have ordinary lexical scope as in every other programming language, but the only sensible thing to do is to rename variables under the hood. It is then very easy to leak those renamed variables accidentally in the global scope where you cannot do anything useful with them, because the symbols `y` in the global scope and in the subscope are different.
Another point that the example was meant to illustrate is that once you assign some value to a variable, you can no longer do symbolic manipulation with it (note that in the example, we have replaced 1 by 10 in the end).
f[x]
and the function `f` is not defined, Mathematica will not give me an error but instead just assume that I meant to create a symbolic expression. If you know some Lisp, just imagine that everything came with an implicit `quote` which would automatically get invoked whenever a unbound variable or function would we encountered.That issue alone has caused me so many errors simply from mistyping some function or variable name. For simple expressions, such bugs are pretty obvious to spot but if the same occurs deep inside a chain of function calls, this often lead to completely wrong results because the bug got masked by some other manipulations I did on the result of the function call.
Of course, there are tons of hacks and ad-hoc workarounds in Mathematica to get around this (imho fundamentally broken) behaviour to the tune of "just stick another `Evaluate` here" or "just change the function definition from `g[x_]` to `g[x_?NumericQ]` to call the function only when the argument is numeric and otherwise leave it unevaluated".
The situation with the scoping rules is not much better. Consider for instance the following code:
y = 1;
expression = Module[{y},1+y]; (* Module creates a new scope in which y is unbound *)
Can you guess what happens if I print out `expression` now? Print[expression]
1+y$4066
Yes, Mathematica has just renamed our variable. If now we wanted to set `y` in our expression to some concrete value, of course the obvious thing to try doesn't work, but just gives me some bullshit: Print[ReplaceAll[expression, y->10]]
10+y$4066
These are all only some simple examples of why doing any kind of metaprogramming in Mathematica just sucks.Having used Mathematica quite a bit for doing symbolic computation, my opinion on it is pretty much opposite to yours. While the extensive standard library is certainly nice, I think that the programming language used to access it is one of the worst programming languages in the world - certainly the worst I have ever used. I have never seen any other programming language where the basic scoping and evaluation rules are so badly designed and error-prone as in Mathematica.