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

Reply via email to