What is even a compiler for spreadsheets? In spreadsheets you still have an AST, or is it a different structure? Is there any fundamental property of spreadsheet code that enables specific optimizations?
It's more that it necessitates certain optimizations, rather than enabling them.
You need to figure out how and when to merge expressions, when it's worth it to extract a loop where the same expression needs to be compiled as two or three variants, because there are invariants between all but two or three of the invocations. You also must decide which collections you want to create out of the reference soup, when you can alias/discard collections and values, how to hoist predicates (for IF and SWITCH), when you can avoid type coercion. For small workbooks, just using tagged unions in a 2D array, plus a string pool, will suffice, but our sheets are so big that we can't afford that.
Why are you using DCGs for turing_//2? Genuine question, because I implemented a TM interpreter in Prolog, using "normal" predicates, and I can't see where they help you in this case
PS: I learnt how to use DCGs thanks to your website, thank you!
That's a justified question! I'm using DCG (semicontext) notation here analogously to monads, mostly to benefit from having to keep track of fewer explicit arguments that need to be passed around.
In this concrete case, using them explicitly is certainly not bad and may even be preferable. However, suppose I now introduce a new argument in order to implement iterative deepening:
Then this notation, in my opinion, already makes it a bit easier to think about the rule, since it only uses 3 arguments instead of 5 or more, and the tape is simply passed along implicitly.
An iterative deepening version of the machine provides the important benefit that infinite branches of the computation cannot block others that lead to (nondeterministic) succcess. For example, suppose I add the indefinitely looping machine:
tm(loop_or_plus1_or_id, Q0, S0, Q, S, A) :- tm(loop, Q0, S0, Q, S, A).
tm(loop_or_plus1_or_id, Q0, S0, Q, S, A) :- tm(plus1, Q0, S0, Q, S, A).
tm(loop_or_plus1_or_id, Q0, S0, Q, S, A) :- tm(id, Q0, S0, Q, S, A).
then we now get solutions via iterative deepening, whereas the original machine loops without reporting any solution:
Was only arrested at home, for 10 years (but wrongly convicted)
> Once they identified the heliocentric model to be against their dogma they supressed and punished anyone who advocated heliocentric notions
I recommend reading [0], particularly:
> as in astrology the theory of eccentrics and epicycles is considered as established, because thereby the sensible appearances of the heavenly movements can be explained; not, however, as if this proof were sufficient, forasmuch as some other theory might explain them.
So, the Ptolemaic model was used because it fit the observations well enough.
On the other hand, the Copernicus work was (indirectly) used in the construction of the Gregorian calendar.
Furthermore, when Copernicus introduced is theory in 1543, the book was dedicated to the Pope.
The Galileo affair was made by enemies of Galileo who used the Inquisition to prosecute him. That was wrong, but it was certainly not the whole Catholic Church.
> Was only arrested at home, for 10 years (but wrongly convicted)
My mistake obviously. I was trying to say “Galileo was tried by the Inquisition. The point was that the Church had jurisdiction over academia and had the power to enforce its dogmas by force if necessary.
What the parent is saying is that it is useless to buy a new iPad, because he already has a Chromebook. If iOS 11 brought XCode, then he would buy a new one, because it would have one more important feature (XCode).
>Actually, banning encryption apps may be good for privacy, because you never know if the app maker made some backdoors in their encryption method and he already sells your information to somebody.
IMHO, the answer to this lies in Open Source + reproducible builds/compilation. Not in banning/not using apps that promise privacy.
If what you're trying to achieve is awareness about the possible false sense of security (when not appropriate), then the answer is educating people about it.
In fact, ChromeOs acts as a Window Manager, because it deals with how each application is organized in the screen/ shown to the user; in this setup, no Chrome Apps are used (only programs from chroot are used)
tl;dr: It can be thought as a WM, although it isn't one
I'd interpret to mean that borrow checking for example can to be explicitly demanded in rust code, whereas in assembly a lot of the safety is manually assured and often enough only implicitly in the code.
> > Think of RollerCoaster Tycoon being written almost entirely in assembly in '99 by a single programmer. You'd have plenty of incentive for implicit standards
On the other hand you could say that it's the rust compiler source that is rather explicit about the mechanics and the game code would be explicit only by extension.
One of the issues that is never talked about when dealing with substitutes of well-stablished interfaces is if the new standard covers all the other use cases.
In particular, I doubt of the usefulness of the Touch Bar in a low level environment, e.g. if you are dropped to bootloader.
>We have an optimizing compiler for spreadsheets
What is even a compiler for spreadsheets? In spreadsheets you still have an AST, or is it a different structure? Is there any fundamental property of spreadsheet code that enables specific optimizations?