JL Julia  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Макросы и метапрограммирование

Практические задания по теме «Макросы и метапрограммирование» требуют сопоставить несколько решений, найти источник ошибки и оценить последствия выбранного подхода. Вопросы требуют читать код, находить границу применимости, выбирать проверяемую правку и отличать свойства Julia от поведения конкретного пакета. В тесте 25 вопросов: 15 заданий с кодом и 10 заданий с математической записью. Все формулировки рассчитаны на Julia 1.12.6; для сторонних библиотек используется явно названный API.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 25
Что именно следует из фрагмента с `ex = :(a + b * c)`?
e=\operatorname{Expr}(h,a_1,\ldots,a_n)
JuliaJulia · Синтаксические деревья Expr
ex = :(a + b * c)
@show ex.head ex.args dump(ex)
Вопрос 2 из 25
Какую проверку стоит добавить для участка с `ex = :(a + b * c)`?
JuliaJulia · Синтаксические деревья Expr
ex = :(a + b * c)
@show ex.head ex.args dump(ex)
Вопрос 3 из 25
Какую гарантию должна сохранить правка участка с `ex = :(a + b * c)`?
JuliaJulia · Синтаксические деревья Expr
ex = :(a + b * c)
@show ex.head ex.args dump(ex)
Вопрос 4 из 25
При переносе кода с `ex = :(a + b * c)` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
e=\operatorname{Expr}(h,a_1,\ldots,a_n)
Вопрос 5 из 25
Какое утверждение о `ex = :(a + b * c)` является переносимым правилом, а не особенностью одного запуска?
Вопрос 6 из 25
Какое утверждение точнее всего объясняет участок с `ex = quote`?
\$x\mapsto\operatorname{splice}(x)
JuliaJulia · Цитирование кода через quote
name = :value
ex = quote
    local tmp = $(Expr(:call, :+, name, 1))
    tmp * 2
end
@show ex
Вопрос 7 из 25
Какой тест точнее всего зафиксирует границу поведения `ex = quote`?
JuliaJulia · Цитирование кода через quote
name = :value
ex = quote
    local tmp = $(Expr(:call, :+, name, 1))
    tmp * 2
end
@show ex
Вопрос 8 из 25
Какое требование к `ex = quote` важнее удобной детали текущей реализации?
JuliaJulia · Цитирование кода через quote
name = :value
ex = quote
    local tmp = $(Expr(:call, :+, name, 1))
    tmp * 2
end
@show ex
Вопрос 9 из 25
Две реализации участка с `ex = quote` совпадают на обычных данных. Что необходимо проверить перед выпуском?
\$x\mapsto\operatorname{splice}(x)
Вопрос 10 из 25
Что следует сообщить пользователю библиотеки о поведении `ex = quote`?
Вопрос 11 из 25
Какое утверждение точнее всего объясняет участок с `local value = $(esc(ex))`?
\operatorname{esc}(e)
JuliaJulia · Гигиена макросов
macro timed_value(ex)
    quote
        local t0 = time_ns()
        local value = $(esc(ex))
        (value=value, elapsed=time_ns()-t0)
    end
end
x = 3
@show @timed_value x^2
Вопрос 12 из 25
Какой контрольный тест лучше всего проверит правило, связанное с `local value = $(esc(ex))`?
JuliaJulia · Гигиена макросов
macro timed_value(ex)
    quote
        local t0 = time_ns()
        local value = $(esc(ex))
        (value=value, elapsed=time_ns()-t0)
    end
end
x = 3
@show @timed_value x^2
Вопрос 13 из 25
Какое требование к `local value = $(esc(ex))` важнее удобной детали текущей реализации?
JuliaJulia · Гигиена макросов
macro timed_value(ex)
    quote
        local t0 = time_ns()
        local value = $(esc(ex))
        (value=value, elapsed=time_ns()-t0)
    end
end
x = 3
@show @timed_value x^2
Вопрос 14 из 25
Две реализации участка с `local value = $(esc(ex))` совпадают на обычных данных. Что необходимо проверить перед выпуском?
\operatorname{esc}(e)
Вопрос 15 из 25
Какой тезис о `local value = $(esc(ex))` можно честно закрепить в справке?
Вопрос 16 из 25
Что именно следует из фрагмента с `return :(typeof($x))`?
\operatorname{macroexpand}(e)
JuliaJulia · Время раскрытия
macro bad_runtime(x)
    # x здесь является синтаксисом, а не вычисленным значением.
    return :(typeof($x))
end
value = rand()
@show @macroexpand(@bad_runtime value)
Вопрос 17 из 25
Какой тест точнее всего зафиксирует границу поведения `return :(typeof($x))`?
JuliaJulia · Время раскрытия
macro bad_runtime(x)
    # x здесь является синтаксисом, а не вычисленным значением.
    return :(typeof($x))
end
value = rand()
@show @macroexpand(@bad_runtime value)
Вопрос 18 из 25
Какое требование к `return :(typeof($x))` важнее удобной детали текущей реализации?
JuliaJulia · Время раскрытия
macro bad_runtime(x)
    # x здесь является синтаксисом, а не вычисленным значением.
    return :(typeof($x))
end
value = rand()
@show @macroexpand(@bad_runtime value)
Вопрос 19 из 25
Две реализации участка с `return :(typeof($x))` совпадают на обычных данных. Что необходимо проверить перед выпуском?
\operatorname{macroexpand}(e)
Вопрос 20 из 25
Какое ограничение стоит прямо указать в документации к участку с `return :(typeof($x))`?
Вопрос 21 из 25
Что именно следует из фрагмента с `@test string(@macroexpand(@twice x)) != ""`?
\forall c\in C:\;\operatorname{expand}(c)\text{ корректно}
JuliaJulia · Тестовый сценарий
using Test
macro twice(ex)
    return esc(:($ex + $ex))
end
@testset "twice macro" begin
    @test @twice(3) == 6
    x = 4
    @test @twice(x) == 8
    @test string(@macroexpand(@twice x)) != ""
end
Вопрос 22 из 25
Какую проверку стоит добавить для участка с `@test string(@macroexpand(@twice x)) != ""`?
JuliaJulia · Тестовый сценарий
using Test
macro twice(ex)
    return esc(:($ex + $ex))
end
@testset "twice macro" begin
    @test @twice(3) == 6
    x = 4
    @test @twice(x) == 8
    @test string(@macroexpand(@twice x)) != ""
end
Вопрос 23 из 25
Какое требование к `@test string(@macroexpand(@twice x)) != ""` важнее удобной детали текущей реализации?
JuliaJulia · Тестовый сценарий
using Test
macro twice(ex)
    return esc(:($ex + $ex))
end
@testset "twice macro" begin
    @test @twice(3) == 6
    x = 4
    @test @twice(x) == 8
    @test string(@macroexpand(@twice x)) != ""
end
Вопрос 24 из 25
После обновления Julia или пакета поведение участка с `@test string(@macroexpand(@twice x)) != ""` изменилось. Какой критерий приёмки остаётся корректным?
\forall c\in C:\;\operatorname{expand}(c)\text{ корректно}
Вопрос 25 из 25
Что следует сообщить пользователю библиотеки о поведении `@test string(@macroexpand(@twice x)) != ""`?

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

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

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

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