Skip to content

Commit 86e4b93

Browse files
committed
SIP minutes: 2020 March 11
1 parent ffe955e commit 86e4b93

File tree

1 file changed

+219
-0
lines changed

1 file changed

+219
-0
lines changed

_sips/minutes/2020-03-11-minutes.md

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
---
2+
layout: sips
3+
title: SIP Meeting Minutes - March 11 2020
4+
5+
partof: minutes
6+
---
7+
8+
# Minutes
9+
10+
The meeting took place with the following agenda:
11+
12+
1. Quick setup, reviewing expectations for the retreat
13+
2. Review a list of "easy" dotty features/changes (see section below)
14+
3. Review enums
15+
4. Review creator applications
16+
5. Review `@infix` and `@alpha`
17+
6. Review dependent and polymorphic function types
18+
19+
## Date and Location
20+
21+
The meeting took place on the 11th March 2020 throughout the day at EPFL in Lausanne, Switzerland, and Zoom.
22+
23+
The meeting wasn't broadcast.
24+
25+
Minutes were taken by Dale Wijnand.
26+
27+
## Committee Attendees
28+
29+
* Martin Odersky ([@odersky](https://github.com/odersky)), EPFL
30+
* Adriaan Moors ([@adriaanm](https://github.com/adriaanm)), Lightbend
31+
* Guillaume Martres ([@smarter](https://github.com/smarter)), EPFL
32+
* Seth Tisue ([@SethTisue](https://github.com/SethTisue)), Lightbend
33+
* Sébastien Doeraene ([@sjrd](https://github.com/sjrd)), Scala Center
34+
35+
## Sitting in
36+
37+
* Jamie Thompson ([@bishabosha](https://github.com/bishabosha)), Scala Center
38+
* Lukas Rytz ([@lrytz](https://twitter.com/lrytz)), Lightbend
39+
* Nicolas Stucki ([@nicolasstucki](https://github.com/nicolasstucki)), EPFL
40+
* Darja Jovanovic ([@darjutak](https://github.com/darjutak)), Process Lead
41+
* Dale Wijnand ([@dwijnand](https://twitter.com/dwijnand)), secretary
42+
43+
## Not present
44+
45+
* Heather Miller ([@heathermiller](https://github.com/heathermiller)), CMU
46+
* Iulian Dragos ([@dragos](https://github.com/dragos)), Triplequote
47+
* Josh Suereth ([@jsuereth](https://github.com/jsuereth)), independent
48+
* Miles Sabin ([@milessabin](https://github.com/milessabin)), independent
49+
50+
Miles notified the committee that he wouldn't be available. Josh, Heather, and Iulian were all unable to
51+
participate because of coronavirus-related travel restrictions and disruptions.
52+
53+
## Proceedings
54+
55+
### Expectations
56+
57+
* Martin: The plan is still to release Scala 3 this year, at the end of December.
58+
* Martin: However, the 'sterialized' TASTy won't be until 3.1, to a 3.0 promise.
59+
* Martin: Ideally the features would be voted on with the following 3 outcomes
60+
61+
* accepted
62+
* accepted, but put behind some kind of "preview" flag, like Java is doing
63+
* rejected
64+
65+
### Review a "easy" dotty features/changes
66+
67+
This is the list, with any notable comments added.
68+
69+
* Context functions
70+
* Drop auto application
71+
* Drop auto tupling
72+
* Martin: this is probably the most breaking change, so weakly against it
73+
* Seth: could it be behind `-Scala2`? Martin: no, that would be difficult
74+
* There's some difficulties in implementing a rewrite rule for it
75+
* Drop class shadowing
76+
* Seb: this is binary breaking for existing libraries
77+
* Seth: let's make it strong (not under -Xlint) w/ opt-out
78+
* Drop compound types
79+
* Drop DelayedInit
80+
* most of the committee is for it
81+
* but a number of usages of it have been reported
82+
* Guillaume: the implementation isn't a big deal, but it affects TASTy
83+
* ScalaTest, specs2, and cats-effect use it
84+
* Let's drop it and hopefully someone can write a compiler plugin for it
85+
* Lukas: DelayedInit was the source of lots of bugs in nsc, most fixed by now, though
86+
* Drop do..while
87+
* added because of indentation syntax
88+
* how many more like this one?
89+
* Drop early initializers
90+
* Drop existential types
91+
* Guillaume: can be replaced by using opaque types, with explicit wrap and unwrapping
92+
* Drop non-local returns
93+
* Drop package objects
94+
* Lukas: what's wrong with package objects, or it having parents? Don't exports suffer the same problems?
95+
* Seb: package objects are the only thing where you can extend something "in you". Exports don't have that.
96+
* Lukas: what about implicit prioritisation w/ exports?
97+
* Martin: there's a change in implicit resolution so you can add dummy implciit parameters and prioritise those (with companion object prioritisation)
98+
* Drop procedure syntax
99+
* Guillaume: it's dead
100+
* Drop Symbol literals
101+
* Seb: it's basically done
102+
* Drop XML literals
103+
* Guillaume: 3.0 supports XML literals (under `-Scala2` flag?)
104+
* Seb: it doesn't leak into binaries/TASTy, can remove later
105+
* Nic: we have a replacement but just without unapply/pattern matching
106+
* Martin: and that isn't used much, so you'd just need to do something else there
107+
* Eta expansion
108+
* no `_` any more
109+
* Gui: issue with println, you `println(myMethod)` and it's not a type error (b/c no args) it prints the function
110+
* Martin: multi-verse equality fixes `==` for functions, previously always `false`
111+
* Implicit conversions with Conversion
112+
* Gui: from threads, used a lot by DSL libraries
113+
* <https://contributors.scala-lang.org/t/proposal-changes-to-implicit-conversions/4101/7>
114+
* Implicit resolution changes
115+
* Seb: so many changes
116+
* Gui: need to discuss them 1 by 1, important to discuss them individually
117+
* Gui: some are common sense, some are for ambiguity, adding parameters (prioritisation)
118+
* Martin: would be good to discuss the details with Miles
119+
* Seb: shouldn't be in the "easy" list, then
120+
* Intersection/union
121+
* Seb: no choice, and it's good
122+
* Opaque type aliases
123+
* Seth: pushback from contributors, don't ship, wait for Valhalla
124+
* Seb: they're not to replace value classes. They have the runtime characteristics of type aliases.
125+
* Lukas: can it be ported back to nsc? Gui: no, sadly
126+
* Open classes
127+
* Seb: summary: overall seems good, but details
128+
* Seb: should it be scoped at the package? when should we warn/error?
129+
* Gui: seems not easy
130+
* Martin is against the counter-proposal of having it as an opt-in annotation
131+
* Parameter untupling
132+
* Gui: the strong version is that anything on the left is a pattern (rather than just tuple)
133+
* Seth: not crazy about it, seems like another thing you need to learn
134+
* Gui: on the contrary, the status quo (having to add a `case`) forces you to learn this detail early
135+
* Seb: but we're dropping auto-tupling?
136+
* Martin: it's related to the pattern bindings changes (below)
137+
* Pattern bindings
138+
* Martin `for (case Foo(a, b) <- ...)` for filtering, and val pattern, same
139+
* https://dotty.epfl.ch/docs/reference/changed-features/pattern-bindings.html
140+
* Toplevel definitions
141+
* Gui: details around `private`. top-level `private type` and `private class`, the type is in a synthetic object, the class is really top level
142+
* that also impacts opaque types
143+
* Seb: then let's force users to put in object and export instead
144+
* but, boilerplate...
145+
* Trait parameters
146+
* Gui/Seb: yes, everyone wants them
147+
* Gui: something about mixing in multiple traits and them having implicit parameters (that need hand-wiring?)
148+
* Type lambdas
149+
* Gui/Seb: yes, everyone wants them
150+
* Gui: something about variance
151+
* Drop type projection (over abstract types)
152+
* Gui: it's unsound
153+
* Martin: Under `-strict` (i.e. how Scala 3.1 will behave by default) it's a compile error. Will migrate from `-strict` to `-Xsource:3.1`
154+
* Gui: we might change it so it's just lower-bonded, not upper-bounded
155+
* Martin: actually, let's put that change under a `-Y` option
156+
* Seb: Seems to me match types are the replacement for this
157+
* Weak conformance -> harmonization
158+
* Seb: with overloading weak conformance is back
159+
* Seb: Long and Any overloading, nsc conforms Int to Long, dotc picks Any
160+
* Seb: JUnit assertEquals overloads, and Integer/Long aren't equals
161+
* Seb: two parts to this change: the List case (inference) and overloading when primitives are present
162+
* Wildcard types
163+
* `?` instead of `_`
164+
165+
### Review enums
166+
167+
Martin: most seem happy with the current design decisions
168+
169+
two pushbacks:
170+
1. should apply return the precise type?
171+
2. support nested enums
172+
173+
Seb: these conflict. If `apply` returns the wide type, then enums can never have nested enums.
174+
175+
Most of the committee don't feel strongly for hierachical enums ("nested" enums).
176+
177+
Disallow extending java.lang.Enum outside of enums.
178+
179+
### Review creator applications
180+
181+
Seb: what's the point? Martin: avoid having to explain the difference
182+
183+
Aka "optional `new`".
184+
185+
### Review `@infix` and `@alpha`
186+
187+
* `@infix`: you are allowed and encouraged to call infix
188+
* `@alpha`: very different. 2 things:
189+
190+
1. it gives the platform encoded (simple) name of the method
191+
2. canonical name of the method (it's "Googleable" name)
192+
193+
But you can't invoke that alpha name. It's just for reference, like documentation. (So why not just use scaladoc?)
194+
195+
`@alpha` is trying to address the problem of overuse of symbolic methods.
196+
197+
Martin: so, 2 questions:
198+
199+
* should it be manditory?
200+
* is it useful?
201+
202+
Most believe it to be useful, and seems noone is against it being manditory.
203+
204+
### Review dependent and polymorphic function types
205+
206+
* Seb: Dependent function types are good, probably will be accepted.
207+
* Seb: it uses existing concepts and adds syntax sugar
208+
* Seb: it's in a more restricted form at the moment, but it can be made more generic later
209+
* Martin: and we fixed a problem with variance
210+
211+
* Seb: polymorphic function types, on the other hand, are in a completely different realm
212+
* Seb: It's a new encoding. Should we support all sorts of methods? It opens an entirely new world.
213+
* Seb: IMO if we do them, we should go all the way, in 1 go. In particular vararg funciton types, for Scala.js.
214+
* Gui: even with limitations, they're really useful
215+
* Gui: I have a prototype for this
216+
217+
## Next
218+
219+
The next meeting will be tomorrow, 12 March.

0 commit comments

Comments
 (0)