<Some big expression here> // Column
Useful where the function in question is an "afterthought".
570 karma · joined June 25, 2012
<Some big expression here> // Column
Useful where the function in question is an "afterthought".
The concern here is if the worse-case scenario turns out to be true: that the mRNA-based vaccines, and especially the boosters, end up training the immune system to tolerate the infection rather than clear it. That would mean a significant fraction of the population are at risk of outcomes ranging from persistent COVID to death, and becoming breeding grounds for more variants in the process.
Hopefully further research rules out that scenario.
This is incorrect. According to the KataGo paper [2], KataGo is trained using modified Tromp-Taylor rules (as pointed out by [3]):
"Self play games used Tromp-Taylor rules modified to not require capturing stones within pass-aliveterritory [...] In Go, a version of Benson's algorithm [1] can prove areas safe even given unboundedly many consecutive opponent moves ("pass-alive"), enabling this minor optimization."
It would be more interesting if they beat KataGo using the rules it was trained on. You could write a bot to beat KataGo in chess, but KataGo wasn't trained on chess...
[1] https://twitter.com/ARGleave/status/1587875104578359296 [2] https://arxiv.org/pdf/1902.10565.pdf [3] https://www.reddit.com/r/baduk/comments/yl2mpr/ai_can_beat_s...
With allocating as dead, you're basically turning it into a tracing collector for the young generation.
Data structures: you have special syntax for lists and "associations" (dictionaries/maps/hashtables). Those are immutable objects, but in at least some cases the implementation has an optimization where it'll directly mutate the object if there is only one reference to it. There are other data structures with no special syntax in the language, for example numeric and sparse arrays. A number of mutable data structures have also been recently introduced: https://reference.wolfram.com/language/guide/DataStructures....
One thing that you might expect to be a special data structure but actually isn't are "pure functions" (anonymous functions). There are actually just the unevaluated expression, so you could programmatically inspect the body if you so wanted to.
Deferred values: You can apply the HoldFirst/HoldRest/HoldAll/HoldAllComplete attributes so during evaluation they receive the corresponding arguments unevaluated. You might think this would make metaprogramming be easy, but it's actually tricky because of the "infinite evaluation" (it keeps evaluating until a fixed point is reached) of the language.
Derivatives: It's a term rewriting language, so you just provide the rewrite rules like you would with any other user function. f /: D[f[x_]] := x^2 will define the derivative of f(x) to be x^2, and associates that definition with f so that rule won't have to be checked for all usages of D (this also saves you from having to unprotect D to add the rule).
Capital costs is why Hawaii has traditionally imported oil versus having an undersea power connection to the continental US.
"Don't underestimate the bandwidth of a station wagon filled with tapes" also applies here. The amount of energy you can deliver by transporting fuel rods by truck/train/ship is immense.
For long term (like seasonal) variations in wind/solar output, you're probably not going to be building enough batteries to bridge that gap, so to stick with just wind/solar you would need to either overbuild (perhaps massively) your generation capacity, or build a global grid.
A global grid introduces geopolitical risks (your neighbor becomes not-so friendly and cuts the link when you don't have sufficient generation), whereas massive overbuilding would be expensive. Having some nuclear plants may be cheaper route.
The older Compile function also does the same thing when there's an error.
Given the difficulties of doing something fancier, I think it's a reasonable strategy. Mutating state that doesn't originate in a function isn't too common, and less so with the kinds of functions you'd compile. If the compiled function fails, you probably have some other bug in your code anyways.
When you give it a non-negative argument, the counter increases by one; when you give it a negative argument you get the message of it reverting to the uncompiled evaluation and the counter increases by two.
Since Wolfram Language uses referencing counting instead, it doesn't need all of that complexity; it just has to insert MemoryAcquire/MemoryRelease at the appropriate spots in the IR.
In terms of tests, I get the impression that this compiler doesn't (yet) have to deal with much of the complexity a modern JavaScript one has to (OSR, GC info, inline caches, probably even most ISA-level details), so there are whole classes of tests that just don't need to exist.