News for hackers. Stuff that matters.
Re:Don't tell me what my browser can't do by kazinator on Saturday January 16, 2016 @02:13PM (#10916386)
Okay, I won't tell you that your browser can't calculate, for every possible Javascript function, and every possible input to that function, the Boolean value indicating whether or not that function will halt. Don't mind me at all!

> HTML and CSS both are fault tolerant. If something goes wrong in HTML, browsers either display the content of the element or try to fix minor issues like unclosed elements for you. CSS skips lines of code it can’t understand and merrily goes on its way to show the rest of it. JavaScript breaks on errors and tells you that something went wrong. It will not execute the rest of the script, but throws in the towel and tells you to get your house in order first.

HTML (or rather, processing thereof) being fault tolerant is a complete misfeature. It's the result of browser in the 1990's trying to out-do each other in handling broken web pages in order to look more functional. Broken HTML should be loudly rejected (at least in pages which declare strict conformance to a modern dialect).

CSS skipping stuff it doesn't understand is harmless because a declarative language for assigning style properties. It doesn't have permanent effects, like making a call to a server to update a database record.

A program in a general purpose language cannot reliably continue after an error (without logic to handle that situation). Later steps depend on the earlier ones having executed correctly in every detail.

Re:Don't tell me what my browser can't do by rileymat2 on Saturday January 16, 2016 @04:12PM (#10916857)
>A program in a general purpose language cannot reliably continue after an error (without logic to handle that situation). Later steps depend on the earlier ones having executed correctly in every detail.

I don't understand this statement. Obviously, the program cannot preform correctly, but that may not matter. For example, if a web page caches content on disk for the future, but there is an error. It may not matter that the particular disk write failed without any additional logic. The error would just cause a slightly longer load time next time.

Re:Don't tell me what my browser can't do by kazinator on Saturday January 16, 2016 @06:32PM (#10917392)
> It may not matter that the particular disk write failed without any additional logic.

Only if the disk write completely failed, leaving no traces of a half-broken cache entry.

If you have a half-written cache entry and don't deal with that situation somehow, you end up serving the user broken content from the cache.

It usually behooves us to have our code react to write errors.

Re:Don't tell me what my browser can't do by sp332 on Saturday January 16, 2016 @02:24PM (#10916439)
The halting problem is only a problem with an infinite amount of RAM. If you limit the amount of state, it's relatively easy (although still exponentially long) to solve.
Re:Don't tell me what my browser can't do by kazinator on Saturday January 16, 2016 @02:31PM (#10916460)
Well, it's easy to solve then for those instances that fit in your RAM. It remains unsolved for the others!
Re:Don't tell me what my browser can't do by ckuehne on Wednesday January 20, 2016 @04:19AM (#10936861)
It is not "relatively easy" to solve. It is exponentially hard. For example, 16 GB RAM means you have about 10^(3*10^10) possible states. That is a 1 followed by 30 million zeroes.

So I guess I'll pick you up in about 10^10^9 years and you tell me how it goes. That is of course assuming that your program does not load new functions from your hard disk at some point which would add more state to you program thus stretching the waiting time even longer.

Re:Don't tell me what my browser can't do by sp332 on Wednesday January 20, 2016 @11:28AM (#10939187)
It is relatively easy, because it's relative to uncomputable numbers. The most famous of which is the Busy Beaver problem which grows much, much faster than 2^x https://en.wikipedia.org/wiki/Busy_beaver#Exact_values_and_l... For example, 2^5 = 16, but BB(5) has never been computed and has a lower bound of 1.9 × 10^704. You can see that BB(16,000,000,000) is relatively difficult to compute compared to 10^(3*10^10).
Re:Don't tell me what my browser can't do by ckuehne on Wednesday January 20, 2016 @01:02PM (#10939997)
I think you are confusing things.

The problem is not to compute S=10^(3 * 10^10). In fact, we have already computed it. The problem that you originally discussed was waiting (at most) S steps until we can be sure that the finite state-machine either stops or runs forever. I assumed 10^9 steps per second. Thus, the waiting time would be approx. 10^10^9 years.

Wikipedia has a nice discussion on the topic with a quote by Marvin Minsky [1]:

"Minsky warns us, however, that machines such as computers with e.g., a million small parts, each with two states, will have at least 2^1,000,000 possible states: 'This is a 1 followed by about three hundred thousand zeroes ... Even if such a machine were to operate at the frequencies of cosmic rays, the aeons of galactic evolution would be as nothing compared to the time of a journey through such a cycle'"

[1] https://en.wikipedia.org/wiki/Halting_problem#Common_pitfall...

Re:Don't tell me what my browser can't do by sp332 on Wednesday January 20, 2016 @01:41PM (#10940295)
Yes, it will take a very long time. But it will take much less time than solving the halting problem!
Re:Don't tell me what my browser can't do by sp332 on Saturday January 16, 2016 @02:38PM (#10916490)
I mean if the program requires too much RAM then it will either crash & stop or glitch and run forever, but you can always tell which way it will break :)
Re:Don't tell me what my browser can't do by paulddraper on Sunday January 17, 2016 @10:44AM (#10919750)
And how do you tell (without running forever)?
Re:Don't tell me what my browser can't do by sp332 on Sunday January 17, 2016 @03:23PM (#10920870)
You run the program for 2^(bits of state) steps. If it's still running, it will never stop because it must have repeated a state at least once. That means it's in a loop. So it takes a long time, but not an uncomputably long time.

By bits of state, I only mean the bits that the program is allowed to change. It doesn't necessarily include OS code or initialization code, as long as they are immutable while the program is running.

Re:Don't tell me what my browser can't do by paulddraper on Monday January 18, 2016 @05:54PM (#10927621)
Ah, yep, you're right.

Finite state -> solved halting problem