1,941 karma · joined March 30, 2011
Unemployed humans don't create supply. Incomeless humans don't create demand.
if (!fl4->daddr) {
fl4->daddr = fl4->saddr;
if (!fl4->daddr)
fl4->daddr = fl4->saddr = htonl(INADDR_LOOPBACK);
...1: https://unix.stackexchange.com/questions/99336/how-does-ping...
Yeah it's not that palatable, but we're talking about a survival strategy. It's biscuit or death.
1: https://med.stanford.edu/news/all-news/2020/06/handgun-owner...
1: https://www.scientificamerican.com/article/do-the-eyes-have-... 2: https://en.m.wikipedia.org/wiki/Mass_psychogenic_illness#In_... 3: https://en.m.wikipedia.org/wiki/Lenin_was_a_mushroom
It sounds like it can't tell the difference between water vapor and harmful pollutants. Not that it needs to for it to do its job, but the machine may not be a good indicator of actual pollution levels.
1: https://tvtropes.org/pmwiki/pmwiki.php/Main/TheWorfEffect
There is no interface for that information because at the level of abstraction at which userspace applications operate, that information has no meaning.
Doing the easy cases of type-checking at a different time doesn't allow you to worry about types less, because you are still doing that work; just at a different time. Making it necessary to pass type information between phases increases the amount of worrying about types.
> As a trivial case consider a language where `5 + ""` would fail typecheck. But why even get so far? Why does your parser accept `lit-term := lit '+' lit` and not `lit-term := [str '+' str] | [ num + num ]`, etc.
This approach increases the complexity of parsing so much that your trivial example is wrong. What good is `lit-term` in a language with different expression-trees for different value types? You need something like `maybe-str-expr := [maybe-str-expr '+' maybe-str-expr] | [function-call] | ...` -- where everything is `maybe-`, because enough type information is available to determine that certain things are wrong, but not enough is available to ensure everything is correctly-typed. We could strictly improve on this situation by increasing the scope of the parser, to include looking up the types of items so that it can fully type-check the tree and accept only validly-typed programs. We can further improve the situation by splitting the parser into two phases: one that just identifies the lexical structure of the input, and one that does the type-checking. Let's just not call that part a type-checker -- it's part of the "parser" now.
- the trivial language given doesn't solve anything
- dependent-typing is more type-checking, not less
- preferring internal iteration over indexing is several degrees removed from type-checking issue
- on E: dynamic typing requires type-checking at runtime
- DSLs are not at odds with static typing
I like this essay. It's a walk through a space of ideas guided by a what-looks-interesting greedy algorithm, along the lines of an "essais" [1]. But I think it's stretching awfully hard to fit the theme it started out with.More generally, I think this approach is only suited to "static" courses, which only matter in contrived demos. Any real use of a steering algorithm requires reacting to conditions that can't be predicted a priori; e.g. if you have to avoid collisions with other cars, and one car is controlled by a human player, every run is effectively a different track and overfitting like this would not be an option.