Анонимные контекстные параметры
Мелочь, а приятно: в третьей скале можно не придумывать имена для контекстных параметров.
def example(fut: Future[Int])(using ExecutionContext): Future[String] =
fut.map(_.toString)
вместо
def example(fut: Future[Int])(implicit ec: ExecutionContext): Future[String] =
fut.map(_.toString)
из второй скалы.
Контекстные параметры очень часто нужны просто чтобы прокинуть их дальше или задать ограничение на тип, поэтому в их именовании нет смысла. Так что с анонимными параметрами и когнитивная нагрузка на придумывание имени пропадает, и пространство имён не засоряется заведомо не используемыми значениями.
Подробнее о контекстных абстракциях хорошо написано в документации.