On 5/20/18 6:56 AM, Yuxuan Shui wrote:
On Sunday, 20 May 2018 at 00:05:39 UTC, Jonathan M Davis wrote:
because it tends to become very difficult to get right in all cases and results in situations where the programmer is forced to do something in order to make the compiler shut up

Well, doesn't this post show exactly this problem, and that's because the compiler is too dumb?

Making the compiler smarter will only decrease the number of these cases.

There is something to be said for keeping the compiler dumb:

1. Dumb is easy to implement, explain, and understand -- if you set the bar low then more compilers will be able to handle the use cases. Having code that compiles with all available compilers is better than something that you need a specific "really smart" compiler to work. 2. No matter how smart you make the compiler, you will get into situations that it can't figure out (halting problem). If you are going to have some situations that it doesn't handle, then it's really just a matter of where to draw the line. D has this problem with forward references -- it's a never ending battle of shuffling things around sometimes. The smarter you get, the more odd and difficult to deal with the cases that won't work become.

With inner functions, it's really easy to satisfy the compiler here. You just have to make a few changes in your code, I don't see it being a huge problem.

I've been using Swift in the past few years quite a bit, and it always amuses me when it can't figure out some kind of inference that seems trivial, but it just gives up because the compiler takes too long to determine: "This [one line] statement is too difficult, please split into multiple statements." This is the kind of stuff you would be encountering.

-Steve

Reply via email to