|
|
|
|
|
by centril
2159 days ago
|
|
> I think they actually make a fair point because in this case "hard to do" probably equates to "makes the compiler a lot slower". They are wrong in this case. When considering whether to allow `foo<T>();` in Rust, we measured the performance impact that infinite look-ahead / backtracking would have in that case. The result was negligible. Why? Because the amount you have to look-ahead, before you can say "definitely wrong; let's turn back", in realistic code is bounded to maybe max 30 for some very complex generics. It's however much more likely that no back-tracking occurs at all because the parse will be correct. When engineering your compiler, you can always make choices about which path is statistically more likely, as back-tracking in a well designed language is usually pathological. The theoretical O(..) complexity is largely irrelevant. (Source: I was the main maintainer of rustc's parser and refactored large parts of it.) |
|