Skip to content

Commit f84f8fe

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

File tree

1 file changed

+220
-0
lines changed

1 file changed

+220
-0
lines changed

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

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
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, TASTy won't be stable until 3.1 - it won't be 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+
* postponed to after 3.0
65+
66+
### Review a "easy" dotty features/changes
67+
68+
This is the list, with any notable comments added.
69+
70+
* Context functions
71+
* Drop auto application
72+
* Drop auto tupling
73+
* Martin: this is probably the most breaking change, so weakly against it
74+
* Seth: could it be behind `-Scala2`? Martin: no, that would be difficult
75+
* There's some difficulties in implementing a rewrite rule for it
76+
* Drop class shadowing
77+
* Seb: this is binary breaking for existing libraries
78+
* Seth: let's make it strong (not under -Xlint) w/ opt-out
79+
* Drop compound types
80+
* Drop DelayedInit
81+
* most of the committee is for it
82+
* but a number of usages of it have been reported
83+
* Guillaume: the implementation isn't a big deal, but it affects TASTy
84+
* ScalaTest, specs2, and cats-effect use it
85+
* Let's drop it and hopefully someone can write a compiler plugin for it
86+
* Lukas: DelayedInit was the source of lots of bugs in nsc, most fixed by now, though
87+
* Drop do..while
88+
* added because of indentation syntax
89+
* how many more like this one?
90+
* Drop early initializers
91+
* Drop existential types
92+
* Guillaume: can be replaced by using opaque types, with explicit wrap and unwrapping
93+
* Drop non-local returns
94+
* Drop package objects
95+
* Lukas: what's wrong with package objects, or it having parents? Don't exports suffer the same problems?
96+
* Seb: package objects are the only thing where you can extend something "in you". Exports don't have that.
97+
* Lukas: what about implicit prioritisation w/ exports?
98+
* Martin: there's a change in implicit resolution so you can add dummy implciit parameters and prioritise those (with companion object prioritisation)
99+
* Drop procedure syntax
100+
* Guillaume: it's dead
101+
* Drop Symbol literals
102+
* Seb: it's basically done
103+
* Drop XML literals
104+
* Guillaume: 3.0 supports XML literals (under `-Scala2` flag?)
105+
* Seb: it doesn't leak into binaries/TASTy, can remove later
106+
* Nic: we have a replacement but just without unapply/pattern matching
107+
* Martin: and that isn't used much, so you'd just need to do something else there
108+
* Eta expansion
109+
* no `_` any more
110+
* Gui: issue with println, you `println(myMethod)` and it's not a type error (b/c no args) it prints the function
111+
* Martin: multi-verse equality fixes `==` for functions, previously always `false`
112+
* Implicit conversions with Conversion
113+
* Gui: from threads, used a lot by DSL libraries
114+
* <https://contributors.scala-lang.org/t/proposal-changes-to-implicit-conversions/4101/7>
115+
* Implicit resolution changes
116+
* Seb: so many changes
117+
* Gui: need to discuss them 1 by 1, important to discuss them individually
118+
* Gui: some are common sense, some are for ambiguity, adding parameters (prioritisation)
119+
* Martin: would be good to discuss the details with Miles
120+
* Seb: shouldn't be in the "easy" list, then
121+
* Intersection/union
122+
* Seb: no choice, and it's good
123+
* Opaque type aliases
124+
* Seth: pushback from contributors, don't ship, wait for Valhalla
125+
* Seb: they're not to replace value classes. They have the runtime characteristics of type aliases.
126+
* Lukas: can it be ported back to nsc? Gui: no, sadly
127+
* Open classes
128+
* Seb: summary: overall seems good, but details
129+
* Seb: should it be scoped at the package? when should we warn/error?
130+
* Gui: seems not easy
131+
* Martin is against the counter-proposal of having it as an opt-in annotation
132+
* Parameter untupling
133+
* Gui: the strong version is that anything on the left is a pattern (rather than just tuple)
134+
* Seth: not crazy about it, seems like another thing you need to learn
135+
* Gui: on the contrary, the status quo (having to add a `case`) forces you to learn this detail early
136+
* Seb: but we're dropping auto-tupling?
137+
* Martin: it's related to the pattern bindings changes (below)
138+
* Pattern bindings
139+
* Martin `for (case Foo(a, b) <- ...)` for filtering, and val pattern, same
140+
* https://dotty.epfl.ch/docs/reference/changed-features/pattern-bindings.html
141+
* Toplevel definitions
142+
* Gui: details around `private`. top-level `private type` and `private class`, the type is in a synthetic object, the class is really top level
143+
* that also impacts opaque types
144+
* Seb: then let's force users to put in object and export instead
145+
* but, boilerplate...
146+
* Trait parameters
147+
* Gui/Seb: yes, everyone wants them
148+
* Gui: something about mixing in multiple traits and them having implicit parameters (that need hand-wiring?)
149+
* Type lambdas
150+
* Gui/Seb: yes, everyone wants them
151+
* Gui: something about variance
152+
* Drop type projection (over abstract types)
153+
* Gui: it's unsound
154+
* 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`
155+
* Gui: we might change it so it's just lower-bonded, not upper-bounded
156+
* Martin: actually, let's put that change under a `-Y` option
157+
* Seb: Seems to me match types are the replacement for this
158+
* Weak conformance -> harmonization
159+
* Seb: with overloading weak conformance is back
160+
* Seb: Long and Any overloading, nsc conforms Int to Long, dotc picks Any
161+
* Seb: JUnit assertEquals overloads, and Integer/Long aren't equals
162+
* Seb: two parts to this change: the List case (inference) and overloading when primitives are present
163+
* Wildcard types
164+
* `?` instead of `_`
165+
166+
### Review enums
167+
168+
Martin: most seem happy with the current design decisions
169+
170+
two pushbacks:
171+
1. should apply return the precise type?
172+
2. support nested enums
173+
174+
Seb: these conflict. If `apply` returns the wide type, then enums can never have nested enums.
175+
176+
Most of the committee don't feel strongly for hierachical enums ("nested" enums).
177+
178+
Disallow extending java.lang.Enum outside of enums.
179+
180+
### Review creator applications
181+
182+
Seb: what's the point? Martin: avoid having to explain the difference
183+
184+
Aka "optional `new`".
185+
186+
### Review `@infix` and `@alpha`
187+
188+
* `@infix`: you are allowed and encouraged to call infix
189+
* `@alpha`: very different. 2 things:
190+
191+
1. it gives the platform encoded (simple) name of the method
192+
2. canonical name of the method (it's "Googleable" name)
193+
194+
But you can't invoke that alpha name. It's just for reference, like documentation. (So why not just use scaladoc?)
195+
196+
`@alpha` is trying to address the problem of overuse of symbolic methods.
197+
198+
Martin: so, 2 questions:
199+
200+
* should it be manditory?
201+
* is it useful?
202+
203+
Most believe it to be useful, and seems noone is against it being manditory.
204+
205+
### Review dependent and polymorphic function types
206+
207+
* Seb: Dependent function types are good, probably will be accepted.
208+
* Seb: it uses existing concepts and adds syntax sugar
209+
* Seb: it's in a more restricted form at the moment, but it can be made more generic later
210+
* Martin: and we fixed a problem with variance
211+
212+
* Seb: polymorphic function types, on the other hand, are in a completely different realm
213+
* Seb: It's a new encoding. Should we support all sorts of methods? It opens an entirely new world.
214+
* Seb: IMO if we do them, we should go all the way, in 1 go. In particular vararg funciton types, for Scala.js.
215+
* Gui: even with limitations, they're really useful
216+
* Gui: I have a prototype for this
217+
218+
## Next
219+
220+
The next meeting will be tomorrow, 12 March.

0 commit comments

Comments
 (0)