The difference is that you need to make a complete second iteration (or pass) over the entire list to correctly check all of the callsites after all function type information is collected. The same is not true for symbol table usage in a single-pass C compiler.
HN user
mfichman
https://jogolang.org https://blog.mfichman.net
Usually, the second pass in a compiler does not re-parse source files. Rather, it operates on another data structure, like an AST, intermediate representation, or the list mentioned in the original comment. At least, that’s my understanding of multi-pass compilation.
I think that would by definition be a two-pass compiler.
…but what have the Romans done for us?
I like goqu (https://github.com/doug-martin/goqu), which has support for most SQL dialects. How does this compare?
What's fascinating to me is that index cards are a kind of spiritual predecessor to modern database systems and computers - perhaps even more closely related than counting devices like the abacus. Richard Feynman touches on this in one of his lectures [1] that's been linked many times on HN.
The theory of information and computing seems pretty fundamental, and not necessarily tied to what we typically think of as a computer, with CPUs, RAM, SSDs, etc. In a way, a card catalog full of index cards and run by a bunch of people is a computer too. Maybe this isn't an incredible revelation, but it's still interesting to think about.
Using the delta between frames directly isn't quite right either, but it's better than writing framerate-dependent code. I think an even better way is to use an accumulator with a fixed time step, as described here: http://gafferongames.com/game-physics/fix-your-timestep/
I created http://jogolang.org, mostly because I was interested in learning how compilers worked. I was also motivated by the lack of simple, type-safe, ahead-of-time-compiled programming languages for writing video games. Now the project is kind of dead, but I certainly learned a lot about parsers, code generation, optimizations, SSA, and register allocation!
I think Frodo's failure to destroy the ring is a good example of how Tolkien's books do not have a simple good vs. evil dichotomy. Other good examples are the wrath/pride of Feanor's sons, and the tale of Turin, both from the Silmarillion.
Lua is a great language with an excellent implementation in LuaJIT. I love it!
Also, I think you'd be surprised at the contributors that come out of the woodwork when you start up a good project, regardless of the language.
I like 'xIs' for mutators, because it reads more like English, and the important part of the name ('x') is first. I find that convention makes it easier to scan code by name and sort.
I had the same reaction! The Veldt!
Wow, this is great! I'm sure the playback feature is very useful for interviews -- other coworkers could watch the interview after the fact.
This would be even better with an integrated chat, so you could watch the interviewer & interviewee discuss the code during the replay. Any plans to support that?
What do you mean when you say RAII is copy-ridden?
Indeed. This was more of an experiment than anything else. Ideally, I should have a function that catches all exceptions before calling the user's function to make it safer.