From 4e721c924eefc6a9d6e9a204bb8f08f2ebe5cd64 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Tue, 12 Jun 2018 15:59:57 +0200 Subject: [PATCH 1/3] Add blog article about the new collections --- .../2018-06-13-scala-213-collections.md | 210 ++++++++++++++++++ resources/img/blog/iceberg.jpeg | Bin 0 -> 50913 bytes resources/img/blog/ij-list-map.png | Bin 0 -> 16978 bytes resources/img/blog/new-ij-list-map.png | Bin 0 -> 12528 bytes resources/img/blog/scaladoc-list-map.png | Bin 0 -> 10723 bytes .../img/blog/scaladoc-new-treemap-map.png | Bin 0 -> 26035 bytes resources/img/blog/scaladoc-treemap-map.png | Bin 0 -> 11873 bytes 7 files changed, 210 insertions(+) create mode 100644 blog/_posts/2018-06-13-scala-213-collections.md create mode 100644 resources/img/blog/iceberg.jpeg create mode 100644 resources/img/blog/ij-list-map.png create mode 100644 resources/img/blog/new-ij-list-map.png create mode 100644 resources/img/blog/scaladoc-list-map.png create mode 100644 resources/img/blog/scaladoc-new-treemap-map.png create mode 100644 resources/img/blog/scaladoc-treemap-map.png diff --git a/blog/_posts/2018-06-13-scala-213-collections.md b/blog/_posts/2018-06-13-scala-213-collections.md new file mode 100644 index 000000000..d86a56107 --- /dev/null +++ b/blog/_posts/2018-06-13-scala-213-collections.md @@ -0,0 +1,210 @@ +--- +layout: blog-detail +post-type: blog +by: Julien Richard-Foy +title: Scala 2.13’s Collections +--- + +One more article about the standard collections, really? Indeed, during the last +18 months a lot of work has been done on the collections side and we’ve published +several blog articles and given several talks to the explain various changes or +challenges we were facing. This article summarizes **what is going +to change from an end-user perspective**. + +Even if you have thoroughly followed our previous blog posts and talks, this article +gives you a good overview for summarizing the changes to your colleagues. + +The next section presents the internal changes in the collections implementation +that might have some visible impact on the surface. Then, I will show why I think +that the removal of `CanBuildFrom` made the API more beginner friendly. Next, I +will introduce some new operations available in the collections. Finally, I +will mention the main deprecations, the motivations behind them, and their +recommended replacements. + +## Under The Hood: A Cleaner Ground + +![iceberg](/resources/img/blog/iceberg.jpeg) + +The most important change in the new collections framework is that transformation +operations (such as `map` or `filter`) are now implemented in a way that works with both +strict collections (such as `List`) and non-strict collections (such as `Stream`). +This is a change because this was not the case before. Indeed, the previous +implementations were strict (they eagerly evaluated the collection elements) and had +to be overridden by non-strict collection types. You can find more details about that in +[this blog post](/blog/2017/11/28/view-based-collections.html). + +The good news is that the new design is more **correct** in the sense that you can +now implement custom non-strict collection types without having to worry about +re-implementing a ton of operations. (Some operations, though, still eagerly evaluate +the collection elements (e.g. `groupBy`) and will be clearly documented.) Another benefit +is that transformation operations defined outside of the collections (like in the +[cvogt/scala-extensions](https://github.com/cvogt/scala-extensions) project) +now work with non-strict collections (such as `View` or `Stream`). + +Speaking of non-strict collections, the `View` type has been redesigned and +views should behave in a more predictable way. Also, `Stream` has been +deprecated in favor of `LazyList` (see the last section). + +## Life Without `CanBuildFrom` + +I think the most visible change for end-users is that transformation operations +don’t use `CanBuildFrom` anymore. I believe this will be quite visible despite our previous +efforts to *hide* `CanBuildFrom` from the API documentation in the current collections. +Indeed, if you take a look at the +[current `List` API](/api/2.12.6/scala/collection/immutable/List.html), the signature +shown for the `map` operation does not mention `CanBuildFrom`: + +![there is no CanBuildFrom](/resources/img/blog/scaladoc-list-map.png) + +However, if you use this operation in your code, then your IDE reveals its actual signature: + +![what is That](/resources/img/blog/ij-list-map.png) + +As you can see, the type signature shown in the API documentation has been “simplified” +to make it more approachable, but I believe that this is probably introducing more +confusion to the users. Especially when you look at the +[`TreeMap[A, B]` API](/api/2.12.6/scala/collection/immutable/TreeMap.html): + +![wtf](/resources/img/blog/scaladoc-treemap-map.png) + +This type signature makes no sense: the result type can not be `TreeMap[B]` since +`TreeMap` takes *two* type parameters (the type of keys and the type +of values). Also, the function `f` actually takes a *key-value pair* as parameter, +not just a key (as incorrectly indicated by the type `A`). + +`CanBuildFrom` was used for good reasons, in particular the type `That` shown +in the above screenshot was *computed* according to the type of the source +collection and the type of elements of the new collection. The case of `TreeMap` +is compelling: in case you transform your key-value pairs into other key-value +pairs for which the type of keys has an implicit `Ordering` instance, then `map` +returns a `TreeMap`, but if there is no such `Ordering` instance then the best +collection type that can be returned is `Map`. And if you transform the key-value +pairs into something that is not even a pair, then the best collection type +that can be returned is `Iterable`. These three cases were supported by +a single operation implementation, and `CanBuildFrom` was used to abstract over +the various possible return types. + +In the new collections we wanted to have simpler type signatures so that we +can shoulder their actual form in the API documentation and auto-completion +provided by IDEs is not scary. We achieve that by using overloading, as +explained in more details in +[this blog article](/blog/2017/05/30/tribulations-canbuildfrom.html). + +In practice, this means that the new `TreeMap` has three overloads of the +`map` operation: + +![](/resources/img/blog/scaladoc-new-treemap-map.png) + +These type signatures are the actual ones and they essentially translate +“in types” what I’ve written above about the possible result types of `map` +according to the type of elements returned by the transformation function `f`. +I believe that the new API is simpler to understand. + +## New And Noteworthy + +We have introduced a few new operations. The following sections +present some of them. + +### `groupMap` + +A common pattern with the current collection is to use `groupBy` +followed by `mapValues` to transform the groups. For instance, +this is how we can index the names of a collection of users by +their age: + +~~~ scala +case class User(name: String, age: Int) + +def namesByAge(users: Seq[User]): Map[Int, Seq[String]] = + users.groupBy(_.age).mapValues(users => users.map(_.name)) +~~~ + +There is a subtlety in this code. The static return type is `Map` +but the `Map` implementation actually returned is lazy and evaluates +its elements each time it is traversed (ie the `users => users.map(_.name)` +function is evaluated each time the `Map` is traversed). + +In the new collections the return type of `mapValues` is a `MapView` instead +of a `Map`, to clearly indicate that its contents is evaluated each time it +is traversed. + +Furthermore, we have introduced an operation named `groupMap` +that both groups elements and transforms the groups. The above code +can be rewritten as follows to take advantage of `groupMap`: + +~~~ +def namesByAge(users: Seq[User]): Map[Int, Seq[String]] = + users.groupMap(_.age)(_.name) +~~~ + +The returned `Map` is strict: it eagerly evaluates its elements +once. Also, the fact that it is implemented as a single operation +makes it possible to apply some optimizations that make it +~1.3x faster than the version that uses `mapValues`. + +### `InPlace` Transformation Operations + +Mutable collections have a couple of new operations for transforming +their elements in place: instead of returning a new collection (like +`map` and `filter` do) they mutate the source collection. These +operations are suffixed with `InPlace`. For instance, to remove +users whose name start with the letter `J` from a buffer and then +increment their age, one can now write: + +~~~ scala +val users = ArrayBuffer(…) +users + .filterInPlace(user => !user.name.startsWith("J")) + .mapInPlace(user => user.copy(age = user.age + 1)) +~~~ + +## Deprecations For Less Confusion + +A consequence of cleaning and simplifying the collections framework +is that several types or operations have been deprecated. + +### `Iterable` Is The Top Collection Type + +We felt that having a distinction between `Traversable` and `Iterable` was not +worth it, so we removed `Traversable` (it is now an alias to `Iterable[A]`). + +`IterableOnce[A]` is now the collection type at the top of the hierarchy. +Its only abstract member is `def iterator: Iterator[A]`. + +### `LazyList` Is Preferred Over `Stream` + +`Stream` is deprecated in favor of `LazyList`. As its name suggests, +a `LazyList` is a linked list whose elements are lazily evaluated. An +important semantic difference with `Stream` is that in `LazyList` both +the head and the tail are lazy, whereas in `Stream` only the tail is lazy. + +### Insertion And Removal Operations Are Not Available On Generic Collections + +In the current framework, the `scala.collection.Map` type has a `+` and a `-` operations +to add and remove entries. The semantics of these operations is to return a new collection +with the added or removed entries, without changing the source collection. + +These operations are then inherited by the mutable branch of the collections. But the mutable +collection types also introduce their own insertion and removal operations, namely `+=` and `-=`, +which modify the source collection in place. This means that the `scala.collection.mutable.Map` type +has `+` and `+=`, as well as `-` and `-=`. + +Having all these operations can be handy in some cases but can also introduce confusion. If you want +to use `+` or `-`, then you probably wanted to use an immutable collection type in the first place… +Another example is the `updated` operation, which is available on mutable `Map` but returns a new +collection. + +We think that by deprecating these insertion and removal operations from generic collection +types and by having distinct operations between the `mutable` and `immutable` branches we make +the situation clearer. + +## Summary + +In summary, the changes for end-users are the following: + +- non-strict collections (such as views) are safer to use and simpler implement, +- type signatures of transformation operations (such as `map`) are simpler + (no implicit `CanBuildFrom` parameter), +- new cool operations have been added, +- the type hierarchy is simpler (no `Traversable`), +- mutable collection types do not inherit immutable insertion and removal operations. diff --git a/resources/img/blog/iceberg.jpeg b/resources/img/blog/iceberg.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..caa6f134b4226b5590ca2b70b8c8281303d62c83 GIT binary patch literal 50913 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 literal 0 HcmV?d00001 diff --git a/resources/img/blog/ij-list-map.png b/resources/img/blog/ij-list-map.png new file mode 100644 index 0000000000000000000000000000000000000000..de874e65a06349cf73e433079b6700a2e2d1702c GIT binary patch literal 16978 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 o#cNI{Zr2FAVGY@~ literal 0 HcmV?d00001 diff --git a/resources/img/blog/scaladoc-list-map.png b/resources/img/blog/scaladoc-list-map.png new file mode 100644 index 0000000000000000000000000000000000000000..bb281490a20abf50d37cb68a509e511e082365fd GIT binary patch literal 10723 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 IY!LLn0D&Hl$p8QV literal 0 HcmV?d00001 diff --git a/resources/img/blog/scaladoc-new-treemap-map.png b/resources/img/blog/scaladoc-new-treemap-map.png new file mode 100644 index 0000000000000000000000000000000000000000..43ffc673054df5ccfe310105570c69367f92ecd9 GIT binary patch literal 26035 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 z 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 literal 0 HcmV?d00001 diff --git a/resources/img/blog/scaladoc-treemap-map.png b/resources/img/blog/scaladoc-treemap-map.png new file mode 100644 index 0000000000000000000000000000000000000000..35eba750329b5bd5e387430222698eb0957ef5ae GIT binary patch literal 11873 zcmb_?RaBiz)8>m4U;_yd9FpMf65Ms;?(QDk9fAi49^BpCA-KDHaCe6x=X~G4W^U$Y z=4S7Hdv({UuCD6tdg=+0l@slBWrt88;4VM_OAf=&xW41r2hX-tKwmg<^Ok@8sV>jPybFULHR$#DvNQh zLL};nTdK#@()SK2{DApq7!^av3#H+Cv$u!fP7}qY;wBQJymhho{U5MIQdTtdC(C@q zmM-NUlE5>X`OU;VN}Z>4QJVwLKj%I5q6y98i-WD)Lu{nH|= z)O-bxELBElKK_0?&v)t;$Eay7NP=?TNt?HgJyUVJomJWNkE;2b7MhlZ_a{n{l5TqD z;BD7J(?7SgJck0m;`2yLe283&xvWGuHF3yi_Y+MrvoE47+T;?|^(XyMobfU2ML1FY zYeMbAoL3Ka;AK1raCO=4?D|wr@p--xa;+{TSN|UPeNci`{_kok8F-kI;y16toz_K3 zpYK*nLL7!AFcK>49V(b!TCLWr#@7qa3YzPM)f8maYOcXO;L`PTR^-4P$Uo!a=$>STpszYa^BsRfoyV4 zmZ-VBE-=t~IBAFH_Ek-MZ8a#*iw}=q!z`O(Z)0Kep8Mo0yE_yojmr-2zy?8AvuO%X zIO~_1uj!P+tIw5^9v%-Ae_gD1uwmFx%*Y7Mr&y6OQ@XXfpMu(WhNJ$4m-*UNGMh;P zIX?l;28EFkDw8iR$)yPLcRImOH{6we7mSkodFBhro)x?SxQ)Rm+Fz|@Zr(wi%_~O& zbtj<-R^n3ND4zPy{hi}qwu1CiBlSKWLEH2qz`jlns$Y5)IlhNGRb`5Br7}p0fRnL5 z{#HG^+tc=gV6YgyZmgNhi+$AY8aLuU7G|QAdAfC~yM;uBd^Fi~vQNPdV-11mU&KWj zrn3y+nN4{24YjvC!ilMJ`VO5saK8UQV1Wo#cnk%>3D(Hk$iEV%F)f4>Q~HE<<(IpS zgP&1wAxCWtb$Ez4L7R0>OHtD+Y-yQALdtOu-K4v+QAx$5%=(W$tv)(GumU5(*Q`;Kv) zjzHFYvRuIKE$pf=vHXMuba*B2c9C@Ac4>Qf>H6P>MFx4lpaR;f4==EeJ%xUpYio1B ze3%CmTic~Npy7Oh2Jp?(r|USN=csUfF;4&4qI;&146`I>>$0ZN=orbvup61!(A6zr z2>=CU6B8DxeLOd+iEz*TXzANhV z#aqR<$b_HcG4Z|bU8`zqGX5xL3S`a#K4CWCQ625cMz?9l>ViLtovDN;7656Zi%SqK zq82W@)$eT*%CKhhZJOoCGR<-R-?I=$ z!PuBFIhhW#yj2#e1M{&I{i5djLQsPhM^)PWb_>*eJLul%w=gLt12LiCS$aK;WY-tmmc2NoK3oQ11Ea>`}>?iks#2_;NXYI@1mT6j(&z-EG!1 zHG%*>1+BYlul4}{zw2mlRhW(Ib1QaSD<9!}?#W#mvUh6ZlJXAY#d~q79rX*vO<0X% zBPJkpq_u23|Qu%@sV&M<^Py$v$2I|tPcf@ zlZPQRbsjpFQ}D4%v@~EAGnN<63S+sa;&|UP-nRA?jk5l}$8oQOfLdG}?n+ySFQ+K6 z908}w_d_<<^1UzImw&#S7%ln2(g03*DGCM^S|5Mg1qF(+8hYII*lpYVX5RP^vcxQ4 zUw@!%d=Vmlzob*{I^lbwpRvFBEf;YyrIp%iO->NcWLV+tN#Jx`(g<*q zwUD)4eVmzpzgW9?Nhb4@;dN^nu$ubqj|_>$i>3x>tes=Y=Iex#*7fCWpxRK}$}S4D zo4Pi8{H?;@dnke?mI>QxWG4WTMVD&9m07Cml=IWrhjH-wLk&wghek5h$eRHRtsRn7fpiok+#%J8KWo^#^t7QCTm6t2eR9K*YY3-=oZC{~%SHyB! zHaR<0bPdgTD*={?d({Q&gHA2z+wK`B@eIGhASj+sg!f>+&QSuF4$P z;F2Lay~$OpxN(XEA^_kQML@1hKuQ=0=syUn5?!ZE?S=zz^-NLalwznXzQbc+srk}< zlnR=}9VF1TA)TTa62B|xI#19_sDGeO9v&}NxKz`v{a7Hs_O+t=9B%2WIN^&*!DGLW zck9jm{?_0c7qQJNjgzjxg|Y2^AE8a-)3qpK-N}2qJ!)8h&u^-WzMe=&X@x{U}NwEZJuN zIzNk+9|r?R>2>S+$=@VK_2l2+GRQM#q%krXt%Gu24T^=D!U8Ii-lJ1-$&pW~mAy4zc7&vs7^$`=j?+L^s?e3|~u311nOOf5@bSfS#TnZpS z%Nzs%>;W(LR+zPinq!^Vk}CTz-5S=fuxCps3AnXh4|EHg@Vwy2d#H4%v%?V?UTyna z+_z1Oa~7Y_TnwHn9k5uFAb6P4YO=q)`8q7qWRY^H*pbBP-{*qpruosUHlO12ZQ2%> z*(9E1KEjT{6l-d0QBdJ~Jn{*LS^Jf6LeN&?vkSkT z)aO=Bb+ENY0R-D88c5B9br0jOt(b0(<~)ccvye(rxZV|)k4GI{J^#6djIJCjENxvoIT{F%Q|y7A<)vc1c_Z6Bf~9Azv6*GHo96{15lr?dC}^ z@)KrZ7d^al&*c?P1yWt#pFzgJ<}(0%V2$P-UPj)h`{1nJvW|p38KeK%3Q}XnoT`S8 zK4>+=Lsxn_VJ({P=(&HJNT@`;yeHN%L}3{u#c;vqd>q9a8|g-FdWhs;=RzR}mJII? zi`9*P$S-F+(Y!CrEE8Xu<-7tFp6pF>G9Y!>U+&!EGjZ>>sv3H4E3*Mtb*oCL2}rja!!Y-JffV}@PN+?2-m(a1QvPt$3>YO}kjfDzWRz-?iVxX>58 zqbohT+nHA(AwHip5kRiNc^7fiK=nE|l8#e+sD7x3e|u{2cF*;Jy&9&pFMQH5NT zo#3GD|2#yE^+~60zfh-j^bD8MrCMF6L?;@Hj)?568_la zY|sIKkHHo&4g$__v%AeWZ3tg~`1)sV$K)<0^WDcb$eP&|yPwkR0UvFU zI3u~$(cf78;mE`gyTQ(354fo}h10zyP?5AwKAG}4mb5wi{KTl*%d@!D&d$z z^wBRI!uVj?k2)L^Zq*(zPk@mVM?}(Et#C{gF=5ae8%ukwIwpzgu?|}FI#l75!7HrR zx!84fK4>W^QTBXSFl^|?u?Td`&iF>8>FMzbzb$ke>usT*p?N&WEt=G3bCR+jCBwSu z_ zJ{xCW7B{8BoX@bW1DX_Eqrd{hQOicCWrG{(=f||ImV%rDwX1ZjOtdBc3qPmz(J*z) ztlN^GHuhd3MPCGG-{b4A!!k)#w?K4g44a&}#8oyAag-C@uf!wt%{glsU;GH?&pY@j z@NvEbMwyH5LleKf{ge&CX6D>aCT(!k)G6=l(kaM$=1R~QAGM9jA)jHIyTvmfxkH;d zHFvF`vLOA-+ns3|p7dY@?tD6H1d5KfCQWeqj$`bbJ*aVZAqo6Jn7<5)=crm5x zri**`XBjJYuL%WNF+E!Et6w>97UsO&$jrh*s#^|L65!L=PkDDAShZvlb-d&;v^VQ3ncIwopVK61(zE(l^@Q?jy|-AXZYRz2GoY@Jal?Vg zXK9fQ+ESChvf*DlSSEQORxfqQu*Hw^=FK;A(DtqMEnzEO6ve=5XUr>;%xR6%TJEk& zX*iMPle!p&5nl>t72=IRDP3QOhQgJlFv^gOVy$ptbtTmvu|!cN8~_>h_k-IzFHu&< z8+P>*ac+b!wvQX@IyY@YvGMeeEJ=}mM|crTz*PZ3K~cGi64xG#NxO{m0~6Qv=yiCi ziTllF;IAFw;WZ8J0{62Xq$mxsu(#v}W2v>erxe(X;~_%c%ZCkQ*XjSEMR|&#&U2*L zQpcLB3iA6-@08xO<0c}iTE&yfksAZ!WZ{cHMx*(9bMUP5YZUBRYWo1WwogzN+pm1R zvgGV#x?L*$G9==x9wxW-a)A(4+!wc-tKp51dVIj=wASjm`}lZM4$FlyM-Zv1p6a}A zyUIKU^M$OesqxCmo(=4FpPGn)bo$Y-`M;)oF#-#q*VYfxP<`H(*E13Z%_Hmvrhmm@ zQK@@g+kT+K_?8%Vr`D81PxZC9g;+%n9tbE-@V?7;|B}_GhXVz4IC>x3Jdz#1J`oB# zt~|H%)4tO_&KLLCy}E@Z+)V$NT$A&a=r&RS1U+WeSyh43MZU(xw7eC1#Dwwux(oj3 zB4N-~-viBXrIGE>v#wHRFj!DN(EaqTbjbicUxUIBvp6IHvlG= zBp>lqvw7JC24Lr!IPyVZYrTPUeh8D>#CgE8DX4^1DNdq%1oYsbNIdJue7J9s*a zX2PEH8LMl;FpBqZ&#l8HZG`v6d^A=qNwjO%Z~fPT;OC`SGMQe^pmT@zJ=42g6bL|5 za4g+pi&rdb|Nk*7mD;eTurWW_Q-~0^mH~y~GLm4BZgoFNoAHk=WLZgsprz zp&?BOdgA}ye&@7y7R)`|aC<&TPV6_aO)fZO0pDpnoW zUy-X)V%D}%ylvcz65a{6meusT5%}3@y+YY-br&NRy=^Vmw@}?Y*y;aC+x?sqK&x7; zuTKN7%-+t}KWIkGpD~&3?yRL9)-abB@(!lm^)UJ-76zgRabp)L*$CrdY$8w$_FJnh ztB6^xtR7xUM*Bgh?ou`GyX5W&RrGojt<9FpkN+SSB5Tz=Zzz}=#NxlW8Ta%5hL7F- z=KX&L(EcWsZ$kcm<8uFZv8roe5e0h>k&J1xv$f>G(Q{-oKhyrj^&AC8FEz^SFmnsE zcnL>LCxo9IfxY*w?uIgUG~E}LFV?~Z4ztz^;|C+IUelCf+2C{x^3kF5fSbwb++vXQ39n}(TuU)-NNq;*xbWN-h%ITFw>y)RjBumCH7z1!duyr(Q?LTlWTXi0Veg=YLcf!oN?R$myPd=iwHwza@mCL zxC>VBLB=eFDtvg{julNa4t_l5N}>_wEo`{zAxn}TGfSUIDNW#9?8%E`{7E2A1mp8< z@g?W(aVaOe3q-JGLs~o8vwUUC^?LxdZVDzVwSnKxl@0jZ^xUq?^F#TO|ca~c4(%zihJ zw2ch(4O`P49V&Ztq6awx;|MM$Tf5@T?Wh=kZdy5}-=}aT@YQLKtwpEld{VK1AVvH= zM6^}s3epLZkV6v83=lOPz0`=@B{2_9CWJueKdT zFpdr??31;^&V8}Li`0oJhCSc$_WH;y%qzD&T>JW@v4>7SEF^gF$Vzf7AhK4k%em6$ zt)&S*!XtxCATMMl6YTt5O4ROgIe#ny?D1?7y1eBgmXFmoIV6cFDaMXie5lDggMVa# zzM3CqLRme$)iFYg|iuI9|CP+q$y5Ozs~cQ-vjEcBOB#dH@a@^tPq zN8*jPZB_g4kt9<`_1y{rS9r39%`l8Lq$DJiC6Zby-CZu8j6}Vb56mjeCXVcKvgkeg z61GV|Q4j(Ln$X=i96%gXsB>bw;X4ViX~{=B+6GqYl9P@I%#3$?*fLkn%0e7C zgT#j?T)ZLFQj%VbBr03-S}{A6_t0w0EHtl>{3dRs6o2d==rU6JCgCtIQbZy++MBec z0uaf@YHkwBB1u^js!L4cE&C?se?+JYIT2@boow~<_6ly$6^Ozp95})TWK%Amlnrg2 z^Wwxa*te%6mnn_d&U9oR>^_|;27goMo~zOxSZomQRA7wFEXzI1SbJGgcSjjGe1U`; zuUl#U9GlL)g^rI+jH8-&sr;}Bx|diVNqvK6U@3E{$!>qg9A31iucGR=*m9QVk1oki z!*`@p#1F6YJ6qIh%7KJ*I4#JznqI(E-aAJXMs)D-@^-~76@P~18=J_P%1+nKt{}6s z^B>I7d`im`#|C#q%o}XSPqUZQ*GE9wjB_v?hZwuOi}LG4lb*Bb5^`AcRgE85MUp(n zPgU`qweRvuRiV1XYx zO$!+4tg`&67nCF&SE!YhX5srm)2`f(=kZ@iYy)_FsZ8eiHMCsS_9H>tU(ew#m9cp? znS&(k89#*Mdy9JKpQDnpX7YWg(HWP~r3V9Sh+v^6^FVq*HS zyEA%GeelTNt54ByE;qz|8Gj%zrlh2LA$VsdICy$@*GI==cu~q)DF3Kga6$M`rMQ73 zSHk3xl(JvZksdd0cqZdqIPMa|T{WEfB3k2RMX zc$jSPUq_s%F?0HOS-Y&JlhAnI|1h|^zq!zP(?Q6d&2L6-;&#>F;53iVHsYdhUW4Fzy$G`*b&AoL7C>2Mr`|9o|yK zxKFa~Y$mvLp9C_}3(`dAvN46uAXhzKADxI0YnD9=Vh3Yy><@`tA)+UEP1R7q&rwz_ zKJaVh8sRXHLYL*o8}D0u+O=nqymFM*UUwV+v?D-%fnFLUK!W9~)lKJWd@Z%%gFa0? zG)GJ4qJD??eI3S<#ux`!rY9Y*LZ$E+!$ z{pHa48kU`7iA{$;sMvp^K&TcLxS3F4ViCMm~GtKCrQCRgZnW&t0J z`Z<~%v4vx-py50^y`5#9`g%^pW=-*!LKj`JZADY%pCkmoX6sTHE|48Xq@Z(Ij1Bxq zZga*xXx|v`)ia%4l6NA_#|^Nv*b2()3K09yJV`(hxBb%@d(~RfPWkh@C!-XU7X3dV z+;DCE!nZl%r#dzD`{j=NU3-6NO3Vi_KN^9{rarBejJ zQJT2L_WR2sSZ)s3GA0z4!g`5GA6O&LBsFjRPTom(QXvKc5mkAeY?R4#9&C2~iat7n zHpq%Xf_AwGnhAXYZu~Z`Wm(<|i+Omibg24;9kxzjwwyMbd{OK9om_j-+ORR-R75g= z4x+f;6o$8p?y@vlU%jR)PZqy7BzCja;RLY?F*GazHG^`ry%5IsYysU8abrRFma2)W{`Y-^StZuWgBhiQ~NFvT-%msp*GnaEC3G1RHCZS1NC=c>i)G0ZEaeYBhzxY35vt8k#8X4U4uoO_ zCTUsCE-M}>DL~ut(B1z8y_DOmF(X}oup8jYX*{A$#QRG?8FLPD-fhe$$arSF-3gTg z>W9=!P_R=~Qweeh>z$)BPW>$^7cJ6>kO&3+lqHmoPD7Pc>H_5(uVC*l7vNPV<9DC` zT4}!+*PU``NnmI1@S&U{E5tl33d;ugUu>ToE9s2Lh|TMz)MefG!m%=$C%h;Fky z`Ysg&q{{t7N-M6VIwavnh53wR>W)4~2m?xrfF1|O66Do%&AxG-=mIR@6nVpk(nDbK znG%2YAh|41Jf%lqh93WIXGqQ_PjT=>-I0Bc&qO!grGWs4SoOsv6HR_35t2HKac1AO zGdO}H*GOFsiz85NN6E>&YJy|X?Qx!He6+}x4@mc*%cWfJ5^OHmNYYuM${8P?LdtDF zHt;>`MvFxL)uZIg*K?-}uQ@*PyS&8lADQ`^Za9l>5N`G#Sa+~gn^lBkg0u}Lrp93b z=~Y@08DrA}DuuRTUX4Q8y4y%S-8@(8#iHAf#^b9);N`ZL;kF*z9CQ5EU|RA|O1%;T zX}s9F6;O#(2;IZ+6>^$sjdS?&lpd$Lbk^205pAMI$wnrG9e>t8*}%1JdCaw%7$!+D z_J^59tB^zNNC=6@Gq3#UZ?g#`YTv#P8kN1vsP%<5zwJ~Qh`v{r0*zFRs07;~OB2o3 zrfd#F?8!Mr0|62A9sfo0B=C4}EcjxTwm%L-QNnycSwvlBR4dmQKy zo9Srm1I1lL0}<%7`^C9%8pw6b!8P!(yc- zo6{X}-tVzZwjyOzhF3(^G;>j7Yw|^q&fyT%N0~im1p!QG`$j`QbPvimX2c%zP4GC@yiZEp<(uCsE zt~@!_3+p!vpl}}dHXomql^tnJY#LQG_%z zEc}jDM}!%?H*eh6EihoPv~S|zfVk>gPYc@7242>aCMYhmh<~?r9eop4Y+$X|gsGz< z67HqroitOoDvIAIEPhm&YrX!pssCUaB!#vx!FNH-S#O2;f$t2ONhHk&&$z}N51?Nf zxT@^R8&aRlR$&3d^-bV6_L>_WiFzvH^z{m2UW3)3iXK56+<{&FSvJGTB(<3y;79oI z!3ML*sf%AobEB|)OFU1Qfr=MRqNH>7R|wpV_Nr)8;WaeXz{HGFa5(}3OX^+dAK&fNTVwFAR(^h;dwV^&8j$? z+))2bNG`miAYea3_3kM{MH9l@-mq#|$LEl6kr(5STiI28pp#lrKtP}*8+DMCwBSqx>$6M~dQv+u?~XJ= zfd4zi&uXJH7t+Y8SBZt4PMwUotvP3=hCp!zFWxPMIvb*6mB^IxxhE(SgOz4+Q81WF zk;jgVq`D*_w z6(K2EZ10E-2_3&QO~A--qPs{b?yYM9LGOdtDZV_VL*Puw zgXAN3n8~BYDipq3 zxEFpQ3j3tEAHe5PYGx>JH3zpfr?=FX+7r5tYU`C z>jl2sY4IM#%O6D;K@K&o}0e?2b+hA5@j5Sn!ahazyP+`ri(L}DUtAgMeyXw-X(m00dSr6ClyLYGg z+b4{0=~mHYBn!Dzt0eWpFd;|ooQD>S)nV2g?%?EJ@}K^Rr~8dbE+?D6mLsKfuDR@C1n@W2Jhct3|Oe7 zVm{s@uqQj!%G27M%QQ95G4V`t6V+OaUhRAfN%;N=_h%KPnvATWu8C7m0i3af)y2jZ zl#EYw>ai3X)uAG=j+a>Hxc#la&oE*(4W*Pn7@i8nu}Fi;>sX^R4MMA#`Iyj;3(=zQL^6_TACo2#35M%-i~`w>^edO>v=(#yo{A=h z8QMhBA=hQFjD3s43%Zj>=OopKP%=WdpY?;1IBxu?UZm2m*BDF!b0aMk*+;BCqWb-a zy>+mB)n@OEIkma2P8lnw`%=e_3){5i&Hjz}E|BkpmhH0hXoW)v3i zv30OZKRhM#?CCE_Ss~~}kfh0Fh>t$bOixE#v$rdFgHgpUG;FT$@PfrdiSe zu<^Ls*;2UgUS;Hds{(ZVDa`uOucb7^{?2<|i?Iev=RvvQOL0|8NliI><0wH)f8w!S zm;>2tq;@f__hD>wOq^UEIdwD?fXYSpN-`1MtNj%Qpf`GnFPeIRoBH;RviRE{pko8k zSTy*|$_KTSBT+Pm^j9I}a48iuvUlEC-Im1~=4@$ysVUZTN4UGDU8Q2an%x^vCNF+h zC*~b}^3GBMM)LjV&_yK{BHqs=?KvfTq=0h~IklHc*6J)dM$g$uGM%2J9HmEDz9Lc} zBaklJnx5~7D*VW&N8+QKS>Cut#=80gwu^l?F6K?!HzMIXpl-?&(z&lh{Wf%BO~0O4 zl+^!o%hs(YKf#&;Id2LLTo?C?W2{*vdY#>`j6{%`hCi}rOq^O``4@4rw}=t&Z(oBFV_C@GPw81USD+H>UXE98U^ z>_m@Xzt_d8>`X|g!-}P?`IUjI>a;uyW-Jl$sFTqj3s}Ez`dNyW*i`Y6L~?yQR4ure zacEeOm{{~=*KDw;IS#l3ANsR`<*E(khZH~H9P_YKV^T+^M0REHxw{5dr%&Idy!(f2 zd$g<1Y-S!grmj&0TGgnZ3p<{J<|W}Mx4spVg=foC7Cs-Lix_7LE_osL@^X@~m49fw zxBTU4`4^7NWOn}+wy7^tiO&kWos(Z4ga)QbbdDkr&^SOxas%;ht_Lrk1K%|E3$K_D zJ#R4I%Fn+I_kGxZtCtU$Zr^hvCqMzt#xD8+g>Wco_^B+eaCEF@5X>W%-20K^Q)0zp zw2J!gGh4I%odk9x5)3u+`eR!5@^+iohyArwp=tiqu&Xc(a5Ry~ z3#WwL_(o&CS%_r927tYvn7KQQ-Xb3}O`u$fo)x9pz)>N|L%pY!;c;>Z&6pYWMt>ZH zHBw%3Av=^9yNgKO---=s46|?5+Ve$Ool3oy?8NWTa($dxy`1m?qy>?ibaX#!Vkupf zA~it@-BX(-n@IfyK~gTFBEuu2rPMeU77}`;@`-%4tj~4b)fN*U`l{h-W+VP;LnGsK zbC!l#Ng Date: Wed, 13 Jun 2018 14:28:14 +0200 Subject: [PATCH 2/3] Address reviewers feedback --- .../2018-06-13-scala-213-collections.md | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/blog/_posts/2018-06-13-scala-213-collections.md b/blog/_posts/2018-06-13-scala-213-collections.md index d86a56107..abad02457 100644 --- a/blog/_posts/2018-06-13-scala-213-collections.md +++ b/blog/_posts/2018-06-13-scala-213-collections.md @@ -7,15 +7,16 @@ title: Scala 2.13’s Collections One more article about the standard collections, really? Indeed, during the last 18 months a lot of work has been done on the collections side and we’ve published -several blog articles and given several talks to the explain various changes or +several blog articles and given several talks to explain the various changes or challenges we were facing. This article summarizes **what is going to change from an end-user perspective**. -Even if you have thoroughly followed our previous blog posts and talks, this article -gives you a good overview for summarizing the changes to your colleagues. +In case you’ve thoroughly followed our previous blog posts and talks, you might +not learn much from this article. Otherwise, this is the perfect opportunity +to catch up on the topic in a few minutes! -The next section presents the internal changes in the collections implementation -that might have some visible impact on the surface. Then, I will show why I think +The next section presents the changes that are internal to the collections implementation +but that might have some visible impact on the surface. Then, I will show why I think that the removal of `CanBuildFrom` made the API more beginner friendly. Next, I will introduce some new operations available in the collections. Finally, I will mention the main deprecations, the motivations behind them, and their @@ -49,9 +50,9 @@ deprecated in favor of `LazyList` (see the last section). I think the most visible change for end-users is that transformation operations don’t use `CanBuildFrom` anymore. I believe this will be quite visible despite our previous -efforts to *hide* `CanBuildFrom` from the API documentation in the current collections. +efforts to *hide* `CanBuildFrom` from the API documentation of the collections. Indeed, if you take a look at the -[current `List` API](/api/2.12.6/scala/collection/immutable/List.html), the signature +[old 2.12 `List` API](/api/2.12.6/scala/collection/immutable/List.html), the signature shown for the `map` operation does not mention `CanBuildFrom`: ![there is no CanBuildFrom](/resources/img/blog/scaladoc-list-map.png) @@ -85,9 +86,9 @@ a single operation implementation, and `CanBuildFrom` was used to abstract over the various possible return types. In the new collections we wanted to have simpler type signatures so that we -can shoulder their actual form in the API documentation and auto-completion +can show their actual signature in the API documentation, and auto-completion provided by IDEs is not scary. We achieve that by using overloading, as -explained in more details in +explained in more detail in [this blog article](/blog/2017/05/30/tribulations-canbuildfrom.html). In practice, this means that the new `TreeMap` has three overloads of the @@ -98,7 +99,7 @@ In practice, this means that the new `TreeMap` has three overloads of the These type signatures are the actual ones and they essentially translate “in types” what I’ve written above about the possible result types of `map` according to the type of elements returned by the transformation function `f`. -I believe that the new API is simpler to understand. +We believe that the new API is simpler to understand. ## New And Noteworthy @@ -107,7 +108,7 @@ present some of them. ### `groupMap` -A common pattern with the current collection is to use `groupBy` +A common pattern with the old 2.12 collections is to use `groupBy` followed by `mapValues` to transform the groups. For instance, this is how we can index the names of a collection of users by their age: @@ -161,14 +162,15 @@ users ## Deprecations For Less Confusion A consequence of cleaning and simplifying the collections framework -is that several types or operations have been deprecated. +is that several types or operations have been deprecated in Scala 2.13 +and will be removed in 2.14. ### `Iterable` Is The Top Collection Type We felt that having a distinction between `Traversable` and `Iterable` was not worth it, so we removed `Traversable` (it is now an alias to `Iterable[A]`). -`IterableOnce[A]` is now the collection type at the top of the hierarchy. +`Iterable[A]` is now the collection type at the top of the hierarchy. Its only abstract member is `def iterator: Iterator[A]`. ### `LazyList` Is Preferred Over `Stream` @@ -180,7 +182,7 @@ the head and the tail are lazy, whereas in `Stream` only the tail is lazy. ### Insertion And Removal Operations Are Not Available On Generic Collections -In the current framework, the `scala.collection.Map` type has a `+` and a `-` operations +In the old 2.12 framework, the `scala.collection.Map` type has a `+` and a `-` operations to add and remove entries. The semantics of these operations is to return a new collection with the added or removed entries, without changing the source collection. @@ -191,8 +193,8 @@ has `+` and `+=`, as well as `-` and `-=`. Having all these operations can be handy in some cases but can also introduce confusion. If you want to use `+` or `-`, then you probably wanted to use an immutable collection type in the first place… -Another example is the `updated` operation, which is available on mutable `Map` but returns a new -collection. +Consequently, `+`, `-` and `updated` have been moved from `scala.collection.Map` to `scala.collection.immutable.Map`, +and `+` and `-` have been moved from `scala.collection.Set` to `scala.collection.immutable.Set` We think that by deprecating these insertion and removal operations from generic collection types and by having distinct operations between the `mutable` and `immutable` branches we make From a41640e23ac4761dd5cd4062278c1c71892bac5c Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Wed, 13 Jun 2018 16:32:27 +0200 Subject: [PATCH 3/3] Attempt to fix link verification errors --- blog/_posts/2018-06-13-scala-213-collections.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/_posts/2018-06-13-scala-213-collections.md b/blog/_posts/2018-06-13-scala-213-collections.md index abad02457..39048d9bf 100644 --- a/blog/_posts/2018-06-13-scala-213-collections.md +++ b/blog/_posts/2018-06-13-scala-213-collections.md @@ -52,7 +52,7 @@ I think the most visible change for end-users is that transformation operations don’t use `CanBuildFrom` anymore. I believe this will be quite visible despite our previous efforts to *hide* `CanBuildFrom` from the API documentation of the collections. Indeed, if you take a look at the -[old 2.12 `List` API](/api/2.12.6/scala/collection/immutable/List.html), the signature +[old 2.12 `List` API](//www.scala-lang.org/api/2.12.6/scala/collection/immutable/List.html), the signature shown for the `map` operation does not mention `CanBuildFrom`: ![there is no CanBuildFrom](/resources/img/blog/scaladoc-list-map.png) @@ -64,7 +64,7 @@ However, if you use this operation in your code, then your IDE reveals its actua As you can see, the type signature shown in the API documentation has been “simplified” to make it more approachable, but I believe that this is probably introducing more confusion to the users. Especially when you look at the -[`TreeMap[A, B]` API](/api/2.12.6/scala/collection/immutable/TreeMap.html): +[`TreeMap[A, B]` API](//www.scala-lang.org/api/2.12.6/scala/collection/immutable/TreeMap.html): ![wtf](/resources/img/blog/scaladoc-treemap-map.png)