Hi everyone! Since a sizable portion of the Flink code is now in Scala (and more is coming in the API projects), I think we need to define a few guidelines for Scala programming.
Scala is very powerful and has a lot of "magic" features that allow you to design killer nice APIs, but also make reasoning about code harder. Through the use of implicit parameters, lazy parameters, overriding of base operators, functions that take code blocks, etc, you can easily write code that does something entirely different than what it looks like initially. For APIs, I think we should embrace the power of these features to make the APIs nice, convenient, and with intuitive syntax. After all, the elegance of the API matters a lot. For the runtime or anything below the APIs, I propose to refrain to a large extend from the magic features. For those parts, I think it matters most that the code is predictable, it is easy to understand the implications for also non-expert Scala programmers, and it is possible to peer review it through GitHub (where you do not see a difference between a lazy or an eager parameter). One example of such a change would be https://issues.apache.org/jira/browse/FLINK-1548 Summary: Be magic in the APIs, be explicit and simple in the runtime. Greetings, Stephan