SC Scala  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Макросы и compile-time программирование

Тест по теме «Макросы и compile-time программирование» проверяет Цитирование выражений, Вставки кода, Встраиваемые определения, Безопасность генерации, Риски безопасности и Контроль производительности. Здесь нужно читать код, различать близкие технические объяснения и замечать границы гарантий.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 30
В теме «Цитирование выражений» на ревью спорят о причине наблюдаемого результата. Какое объяснение корректно?
ScalaЦитирование выражений: чтение фрагмента
import scala.quoted.*
def inspect[T: Type](x: Expr[T])(using Quotes): Expr[String] = Expr(Type.show[T])
Вопрос 2 из 30
Для темы «Цитирование выражений» вход перестал быть константой времени компиляции, хотя прежний пример продолжает работать. Какой дефект остаётся возможным при корректном синтаксисе?
ScalaЦитирование выражений: изменившийся контекст
// Дополнительный контекст: Сгенерированное дерево выросло вместе с размером модели и заметно замедлило сборку.
import scala.quoted.*
def inspect[T: Type](x: Expr[T])(using Quotes): Expr[String] = Expr(Type.show[T])
Вопрос 3 из 30
При исправлении темы «Цитирование выражений» на ревью уже воспроизвели проблему: Сопоставление с хрупкой формой дерева ломается при эквивалентном синтаксисе или изменении компилятора. Какую правку стоит принять?
ScalaЦитирование выражений: решение на ревью
import scala.quoted.*
def inspect[T: Type](x: Expr[T])(using Quotes): Expr[String] = Expr(Type.show[T])
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 30
В контракте темы «Цитирование выражений» какое решение не превращает частный успешный случай в общее обещание?
stage_{compile}\ne stage_{runtime}
Вопрос 5 из 30
При проверке темы «Цитирование выражений» какой контроль остаётся полезным после рефакторинга и переименования кода?
Вопрос 6 из 30
Какая характеристика конструкции «Вставки кода» подтверждается показанным фрагментом?
ScalaВставки кода: чтение фрагмента
import scala.quoted.*
inline def doubled(inline x: Int): Int = ${ doubledImpl('x) }
def doubledImpl(x: Expr[Int])(using Quotes): Expr[Int] =
  '{ $x * 2 }
println(doubled(21))
Вопрос 7 из 30
Для темы «Вставки кода» что здесь требует отдельного теста или компиляционного примера?
ScalaВставки кода: изменившийся контекст
// Дополнительный контекст: Макрос вызвали из другого модуля с выражением иной формы, но того же статического типа.
import scala.quoted.*
inline def doubled(inline x: Int): Int = ${ doubledImpl('x) }
def doubledImpl(x: Expr[Int])(using Quotes): Expr[Int] =
  '{ $x * 2 }
println(doubled(21))
Вопрос 8 из 30
При исправлении темы «Вставки кода» нужно устранить причину, а не замаскировать симптом. Какое изменение подходит лучше?
ScalaВставки кода: решение на ревью
import scala.quoted.*
inline def doubled(inline x: Int): Int = ${ doubledImpl('x) }
def doubledImpl(x: Expr[Int])(using Quotes): Expr[Int] =
  '{ $x * 2 }
println(doubled(21))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 30
В контракте темы «Вставки кода» после изменения окружения команда пересматривает контракт. Какой вариант корректен?
size(bytecode)\propto generated\ nodes
Вопрос 10 из 30
При проверке темы «Вставки кода» какая проверка связывает принятую правку с реальной границей решения?
Вопрос 11 из 30
В теме «Встраиваемые определения» проследите типы и порядок вычисления. Какой вывод выдерживает такую проверку?
ScalaВстраиваемые определения: чтение фрагмента
inline def choose(inline flag: Boolean) = inline if flag then 1 else 2
Вопрос 12 из 30
Что требует отдельной проверки при работе с «Встраиваемые определения»?
ScalaВстраиваемые определения: изменившийся контекст
// Дополнительный контекст: Вход перестал быть константой времени компиляции, хотя прежний пример продолжает работать.
inline def choose(inline flag: Boolean) = inline if flag then 1 else 2
Вопрос 13 из 30
Что исправляет пример по теме «Встраиваемые определения» без побочного изменения API?
ScalaВстраиваемые определения: решение на ревью
inline def choose(inline flag: Boolean) = inline if flag then 1 else 2
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 30
В контракте темы «Встраиваемые определения» какая формулировка учитывает и семантику конструкции, и реальный риск?
Вопрос 15 из 30
При проверке темы «Встраиваемые определения» какой итог ревью содержит и действие, и способ заметить возврат риска?
Вопрос 16 из 30
В теме «Безопасность генерации» какое утверждение не переносит в Scala правило из другого языка или другой конструкции?
ScalaБезопасность генерации: чтение фрагмента
import scala.quoted.*
inline def positive(inline n: Int): Int = ${ positiveImpl('n) }
def positiveImpl(n: Expr[Int])(using Quotes): Expr[Int] =
  n.value match
    case Some(value) if value > 0 => Expr(value)
    case Some(_) => quotes.reflect.report.errorAndAbort("expected a positive constant")
    case None => quotes.reflect.report.errorAndAbort("expected a constant")
Вопрос 17 из 30
Вход перестал быть константой времени компиляции, хотя прежний пример продолжает работать. Какое ограничение темы «Безопасность генерации» становится существенным?
ScalaБезопасность генерации: изменившийся контекст
// Дополнительный контекст: Вход перестал быть константой времени компиляции, хотя прежний пример продолжает работать.
import scala.quoted.*
inline def positive(inline n: Int): Int = ${ positiveImpl('n) }
def positiveImpl(n: Expr[Int])(using Quotes): Expr[Int] =
  n.value match
    case Some(value) if value > 0 => Expr(value)
    case Some(_) => quotes.reflect.report.errorAndAbort("expected a positive constant")
    case None => quotes.reflect.report.errorAndAbort("expected a constant")
Вопрос 18 из 30
При исправлении темы «Безопасность генерации» какое решение уменьшает вероятность повторения обнаруженного дефекта?
ScalaБезопасность генерации: решение на ревью
import scala.quoted.*
inline def positive(inline n: Int): Int = ${ positiveImpl('n) }
def positiveImpl(n: Expr[Int])(using Quotes): Expr[Int] =
  n.value match
    case Some(value) if value > 0 => Expr(value)
    case Some(_) => quotes.reflect.report.errorAndAbort("expected a positive constant")
    case None => quotes.reflect.report.errorAndAbort("expected a constant")
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 30
В контракте темы «Безопасность генерации» новый сценарий не отменяет основное правило, но делает заметной его границу. Какой ответ это отражает?
Вопрос 20 из 30
При проверке темы «Безопасность генерации» что нужно оставить после исправления, кроме комментария в исходном файле?
Вопрос 21 из 30
В теме «Риски безопасности» что компилятор или среда выполнения обязаны обеспечить в этом случае?
ScalaРиски безопасности: чтение фрагмента
inline def buildInfo: String = ${ buildInfoImpl }
// Реализация не должна читать произвольные секреты окружения.
Вопрос 22 из 30
Для темы «Риски безопасности» обычный пример прошёл, затем изменились условия использования. Какой риск нужно проверить первым?
ScalaРиски безопасности: изменившийся контекст
// Дополнительный контекст: Макрос вызвали из другого модуля с выражением иной формы, но того же статического типа.
inline def buildInfo: String = ${ buildInfoImpl }
// Реализация не должна читать произвольные секреты окружения.
Вопрос 23 из 30
При исправлении темы «Риски безопасности» команда сравнивает несколько правок. Какая из них делает допущение явным и проверяемым?
ScalaРиски безопасности: решение на ревью
inline def buildInfo: String = ${ buildInfoImpl }
// Реализация не должна читать произвольные секреты окружения.
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 24 из 30
В контракте темы «Риски безопасности» вход перестал быть константой времени компиляции, хотя прежний пример продолжает работать. Какой анализ пригоден для публичного API?
Вопрос 25 из 30
Какой критерий готовности по теме «Риски безопасности» действительно поймает повтор прежнего дефекта?
Вопрос 26 из 30
В теме «Контроль производительности» как сформулировать семантику примера так, чтобы она сохранилась после переименования переменных?
ScalaКонтроль производительности: чтение фрагмента
import scala.quoted.*
def fieldNames[T: Type](using Quotes): Vector[String] =
  import quotes.reflect.*
  TypeRepr.of[T].typeSymbol.caseFields.iterator.map(_.name).toVector
Вопрос 27 из 30
Какое внешнее изменение делает прежнее ожидание от «Контроль производительности» ненадёжным?
ScalaКонтроль производительности: изменившийся контекст
// Дополнительный контекст: Вход перестал быть константой времени компиляции, хотя прежний пример продолжает работать.
import scala.quoted.*
def fieldNames[T: Type](using Quotes): Vector[String] =
  import quotes.reflect.*
  TypeRepr.of[T].typeSymbol.caseFields.iterator.map(_.name).toVector
Вопрос 28 из 30
При исправлении темы «Контроль производительности» какой вариант не переносит проблему в вызывающий код?
ScalaКонтроль производительности: решение на ревью
import scala.quoted.*
def fieldNames[T: Type](using Quotes): Vector[String] =
  import quotes.reflect.*
  TypeRepr.of[T].typeSymbol.caseFields.iterator.map(_.name).toVector
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 29 из 30
В контракте темы «Контроль производительности» какой вариант не теряет существенную часть технической картины?
Вопрос 30 из 30
При проверке темы «Контроль производительности» какую гарантию важно превратить в повторяемую проверку?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу