Comment by dmitriid

5 years ago

> I mean, think about it for a second: while you cannot get a compiler out of the door withot a parser, you can indeed leave all the fancy optimization features out, don't you? And if you want to get a MVP out of the door, do you focus your effort in developing optional features or the basic, critical part that ensures that your language exists?

Exactly: an MVP. For an MVP the parser may indeed be "the single most important feature of building a programming language.". But even then it's almost definitely isn't.

The moment you "leave out fancy optimisation fetures" your language becomes at most mediocre.

Because between parsing (which is trivial) and "fancy optimisation features" (which come very late in a compiler life) there are a million things that are significantly more important than parsing:

- how do you do typing?

- how do you code generation (do you output machine code yourself or use a backend)?

- do you use an intermediate representation?

- what are the actual optimisations on performance (none of which have anything to do with parsing)? As an example, C++'s horrible header system has nothing to do with parsing, but slows compiling by hundreds of orders of magnitude.

- how do you do graceful error recovery and reporting?

- how are lambdas handled? how are scopes handled? memory layouts? GC/ARC/manual memory management? standard lib?

- a million other things

> Actually, you're quite wrong.

It was a hyperbole. Do you even understand how fast 1GB/s is? It roughly 10 to 20 million lines of code [1] Windows 10 is roughly 50 million lines [2]. So, at 1GB/s you can parse the entirety of Windows 10 codebase in under 5 seconds.

Even if your parsing speed is 1000 times slower (3 orders of magnitude slower), you can still parse ~10k lines a second. And I honsetly can't even begin to think how you can parse something this slowly. ANd if you do, it's still not a concern, because the rest comes from outside parsing, for example:

- can yo run parsers in parallel?

- do you need to parse the entirety of your project to begin compilation, or your files/modules are isolated and compiler can work on any of those?

Parsing is trivial.

[1] For example, this SO answer for an unrelated question creates a file with 150 million lines, and the result is 6GB. 150/6 = 25, I went for even lower numbers.

[2] https://answers.microsoft.com/en-us/windows/forum/all/window...