Why did Scala Records stop publishing?

As far as I can tell scala-records was the most comprehensive solution for extensible row types and records in Scala, at least compared to all others. Yet, while the source code is still being updated for new versions of Scala, the project was last published only for 2.11 - https://search.maven.org/search?q=scala-records - it’s been unavailable for two major scala versions now! Why did the project, and in general the research on topic of records in Scala die down?

2 Likes

I’m unsure if this is the proper place for such inquiry. Did you try and contact the authors directly?

1 Like

Agreed. Moreover, I just plain don’t think the premise is true – Dotty structural types, which are likely to be in Scala 3, more or less bring records more formally into the language itself, so I think “die down” isn’t all that accurate…

For the record (pun not intended), I think Dotty’s proposed record-types scheme is very poor, and does not actually solve anything. Notice that in the only example given for the feature, they have to use an unsafe asInstanceOf cast. That’s because the feature just doesn’t work on its own.

This is obviously not scalable — do you really want your database users to cast their way around for all their record types, easily resulting in runtime crashes when the underlying data definitions change because the casts silently become invalid?

Fortunately, Dotty now supports whitebox macros. So we’re going to be able to encode the same kind of static checks as Scala Records does. But then, there’s really nothing new going on, and Scala Records could just be ported to Dotty with the same interface. Dotty’s new record-types approach did not solve anything.

4 Likes

Where is it declared?

https://dotty.epfl.ch/docs/reference/metaprogramming/inline.html#specializing-inline-whitebox

Thank you. It is great.
IIUC the new whitebox macros have less power.
Will it be possible to migrate scala-records?

Yes in principle, as they’ll be able to inspect the type of the receiver to a selectDynamic call as well as the string passed in argument, so they can select the right type to return. Just like the current Scala Records library does.

2 Likes

scala-records is a LAMP/EPFL (“official Scala”?) project, it’s also a language extension, hence why I think contributors is the relevant forum. At the very least, someone from EPFL might know what happened and shed some light. As to why I posted, it’s because of @AMatveev’s requests for structural abstraction over ResultSet in neighboring threads could probably be easily solved by scala-records if they were still published, I’m perplexed that they just suddenly disappeared a long time ago and no one really noticed… There was even a recent-ish paper about them http://www.csc.kth.se/~phaller/doc/karlsson-haller18-scala.pdf

2 Likes

Again, have you tried just contacting the authors?

2 Likes