-
Notifications
You must be signed in to change notification settings - Fork 1k
Add guidance on how to migrate scala.Seq #1326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
2d8f8e5
8178166
54b38f7
6c56623
2b4de2d
cc9b455
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
Co-Authored-By: Dale Wijnand <[email protected]>
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -36,7 +36,7 @@ In Scala 2.13 `scala.Seq[+A]` is an alias for `scala.collection.immutable.Seq[A] | |
|
||
If you're making an application, and simply migrating a Scala 2.12 code base to 2.13, it might be ok to keep using `scala.Seq` in your code. | ||
|
||
If you're making a library intended to be used by other programmers, then using `scala.Seq` or vararg is going to be a breaking change in the API semantics. For example, if there was a function `def orderFood(order: Seq[Order]): Seq[Food]`, previously the library user would have been able to pass in an array of `Order`, but it won't work for 2.13. | ||
If you're making a library intended to be used by other programmers, then using `scala.Seq` or varargs is going to be a breaking change in the API semantics. For example, if there was a function `def orderFood(order: Seq[Order]): Seq[Food]`, previously the library user would have been able to pass in an array of `Order`, but it won't work for 2.13. | ||
|
||
- if you cross build with Scala 2.12 and want to maintain the API semantics for 2.13 version of your library, or | ||
- if your library users frequently uses mutable collections such as `Array` | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If code has been optimized to the point that you build an array instead of a regular collection, you're probably okay calling There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Arrays might come up simply as Java API that you provide as a subset of API. |
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This sounds like "keep using
scala.Seq
" should be the safe and simple option. I'd argue it's the opposite (unless your code happens to just work out of the box). In a complex codebase the simplest way forward is to change all references fromscala.Seq
toscala.collection.Seq
and possibly inserttoSeq
calls where necessary. This is easy to do and will cross-compile on 2.12 without any changes in semantics.Switching your own codebase from
scala.collection.Seq
toscala.immutable.Seq
is the more advanced refactoring. In many cases it may have been the intention all along, so it makes sense to do it. It also avoids unnecessary copying when varargs are involved, but it's much harder to get right consistently in a large codebase.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interesting. I'll mention recommendation to use scala.collection.Seq first then.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added this in 2b4de2d.