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

Взаимодействие с Python, C и R

Профессиональные сценарии по теме «Взаимодействие с Python, C и R» проверяют диагностику, производительность, безопасность и способность защитить архитектурное решение. Вопросы требуют читать код, находить границу применимости, выбирать проверяемую правку и отличать свойства Julia от поведения конкретного пакета. В тесте 30 вопросов: 18 заданий с кодом и 12 заданий с математической записью. Все формулировки рассчитаны на Julia 1.12.6; для сторонних библиотек используется явно названный API.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 30
Какой механизм Julia определяет поведение строки `return ccall(:hypot, Cdouble, (Cdouble, Cdouble), x, y)`?
f:C_{in}\to C_{out}
JuliaJulia · Вызовы C через ccall
function c_hypot(x::Float64, y::Float64)
    return ccall(:hypot, Cdouble, (Cdouble, Cdouble), x, y)
end
@show c_hypot(3.0, 4.0)
Вопрос 2 из 30
Что нужно подтвердить отдельным примером для `return ccall(:hypot, Cdouble, (Cdouble, Cdouble), x, y)`?
JuliaJulia · Вызовы C через ccall
function c_hypot(x::Float64, y::Float64)
    return ccall(:hypot, Cdouble, (Cdouble, Cdouble), x, y)
end
@show c_hypot(3.0, 4.0)
Вопрос 3 из 30
Какое требование к `return ccall(:hypot, Cdouble, (Cdouble, Cdouble), x, y)` важнее удобной детали текущей реализации?
JuliaJulia · Вызовы C через ccall
function c_hypot(x::Float64, y::Float64)
    return ccall(:hypot, Cdouble, (Cdouble, Cdouble), x, y)
end
@show c_hypot(3.0, 4.0)
Вопрос 4 из 30
После обновления Julia или пакета поведение участка с `return ccall(:hypot, Cdouble, (Cdouble, Cdouble), x, y)` изменилось. Какой критерий приёмки остаётся корректным?
f:C_{in}\to C_{out}
Вопрос 5 из 30
Какое ограничение стоит прямо указать в документации к участку с `return ccall(:hypot, Cdouble, (Cdouble, Cdouble), x, y)`?
Вопрос 6 из 30
Как нужно интерпретировать `result = pyconvert(Vector{Float64}, np.sin(a))`, не добавляя к коду лишних гарантий?
J\leftrightarrow P\;\text{через обёртку}
JuliaJulia · Связь с Python через PyCall и PythonCall
using PythonCall
np = pyimport("numpy")
a = np.array([1.0, 2.0, 3.0])
result = pyconvert(Vector{Float64}, np.sin(a))
@show result
Вопрос 7 из 30
Какой эксперимент отличит настоящий механизм `result = pyconvert(Vector{Float64}, np.sin(a))` от случайного результата одного запуска?
JuliaJulia · Связь с Python через PyCall и PythonCall
using PythonCall
np = pyimport("numpy")
a = np.array([1.0, 2.0, 3.0])
result = pyconvert(Vector{Float64}, np.sin(a))
@show result
Вопрос 8 из 30
Какое решение устраняет риск вокруг `result = pyconvert(Vector{Float64}, np.sin(a))`, не меняя поведение на допустимых данных?
JuliaJulia · Связь с Python через PyCall и PythonCall
using PythonCall
np = pyimport("numpy")
a = np.array([1.0, 2.0, 3.0])
result = pyconvert(Vector{Float64}, np.sin(a))
@show result
Вопрос 9 из 30
Как проверить, что новая реализация `result = pyconvert(Vector{Float64}, np.sin(a))` не изменила обещанное пользователю поведение?
J\leftrightarrow P\;\text{через обёртку}
Вопрос 10 из 30
Как сформулировать границу механизма `result = pyconvert(Vector{Float64}, np.sin(a))` без чрезмерного обещания?
Вопрос 11 из 30
Какое утверждение точнее всего объясняет участок с `view = pyconvert(PyArray, np.asarray(pyx))`?
stride_J=stride_F
JuliaJulia · Обмен массивами
using PythonCall
np = pyimport("numpy")
x = collect(1.0:5.0)
pyx = Py(x)
view = pyconvert(PyArray, np.asarray(pyx))
view[1] = 99.0
@show x view
Вопрос 12 из 30
Какой тест точнее всего зафиксирует границу поведения `view = pyconvert(PyArray, np.asarray(pyx))`?
JuliaJulia · Обмен массивами
using PythonCall
np = pyimport("numpy")
x = collect(1.0:5.0)
pyx = Py(x)
view = pyconvert(PyArray, np.asarray(pyx))
view[1] = 99.0
@show x view
Вопрос 13 из 30
Какой контракт следует закрепить при переработке строки `view = pyconvert(PyArray, np.asarray(pyx))`?
JuliaJulia · Обмен массивами
using PythonCall
np = pyimport("numpy")
x = collect(1.0:5.0)
pyx = Py(x)
view = pyconvert(PyArray, np.asarray(pyx))
view[1] = 99.0
@show x view
Вопрос 14 из 30
Две реализации участка с `view = pyconvert(PyArray, np.asarray(pyx))` совпадают на обычных данных. Что необходимо проверить перед выпуском?
stride_J=stride_F
Вопрос 15 из 30
Какое утверждение о `view = pyconvert(PyArray, np.asarray(pyx))` является переносимым правилом, а не особенностью одного запуска?
Вопрос 16 из 30
Какой механизм Julia определяет поведение строки `throw(ForeignCallError(lib, op, err))`?
owner(p)=allocator(p)
JuliaJulia · Ошибки границы
struct ForeignCallError <: Exception
    library::String
    operation::String
    cause::Any
end
function guarded_call(f, lib, op)
    try
        return f()
    catch err
        throw(ForeignCallError(lib, op, err))
    end
end
Вопрос 17 из 30
Какой тест точнее всего зафиксирует границу поведения `throw(ForeignCallError(lib, op, err))`?
JuliaJulia · Ошибки границы
struct ForeignCallError <: Exception
    library::String
    operation::String
    cause::Any
end
function guarded_call(f, lib, op)
    try
        return f()
    catch err
        throw(ForeignCallError(lib, op, err))
    end
end
Вопрос 18 из 30
Какую гарантию должна сохранить правка участка с `throw(ForeignCallError(lib, op, err))`?
JuliaJulia · Ошибки границы
struct ForeignCallError <: Exception
    library::String
    operation::String
    cause::Any
end
function guarded_call(f, lib, op)
    try
        return f()
    catch err
        throw(ForeignCallError(lib, op, err))
    end
end
Вопрос 19 из 30
При переносе кода с `throw(ForeignCallError(lib, op, err))` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
owner(p)=allocator(p)
Вопрос 20 из 30
Что следует сообщить пользователю библиотеки о поведении `throw(ForeignCallError(lib, op, err))`?
Вопрос 21 из 30
Какое утверждение точнее всего объясняет участок с `lib = dlopen_e("libdoesnotexist")`?
E=(version,ABI,input)
JuliaJulia · Разбор отказов
using Libdl
lib = dlopen_e("libdoesnotexist")
report = (; julia=VERSION, library_found=lib != C_NULL, word_size=Sys.WORD_SIZE, arch=Sys.ARCH)
@show report
Вопрос 22 из 30
Что нужно подтвердить отдельным примером для `lib = dlopen_e("libdoesnotexist")`?
JuliaJulia · Разбор отказов
using Libdl
lib = dlopen_e("libdoesnotexist")
report = (; julia=VERSION, library_found=lib != C_NULL, word_size=Sys.WORD_SIZE, arch=Sys.ARCH)
@show report
Вопрос 23 из 30
Что должно остаться истинным после рефакторинга участка с `lib = dlopen_e("libdoesnotexist")`?
JuliaJulia · Разбор отказов
using Libdl
lib = dlopen_e("libdoesnotexist")
report = (; julia=VERSION, library_found=lib != C_NULL, word_size=Sys.WORD_SIZE, arch=Sys.ARCH)
@show report
Вопрос 24 из 30
Две реализации участка с `lib = dlopen_e("libdoesnotexist")` совпадают на обычных данных. Что необходимо проверить перед выпуском?
E=(version,ABI,input)
Вопрос 25 из 30
Что следует сообщить пользователю библиотеки о поведении `lib = dlopen_e("libdoesnotexist")`?
Вопрос 26 из 30
Какой механизм Julia определяет поведение строки `f = @spawnat w begin`?
crash(child)\not\Rightarrow crash(parent)
JuliaJulia · Восстановление системы
using Distributed
addprocs(1)
function isolated_foreign_call(args)
    w = first(workers())
    f = @spawnat w begin
        # Нативный вызов выполняется вне главного процесса.
        sum(args)
    end
    return fetch(f)
end
@show isolated_foreign_call(1:100)
Вопрос 27 из 30
Что нужно подтвердить отдельным примером для `f = @spawnat w begin`?
JuliaJulia · Восстановление системы
using Distributed
addprocs(1)
function isolated_foreign_call(args)
    w = first(workers())
    f = @spawnat w begin
        # Нативный вызов выполняется вне главного процесса.
        sum(args)
    end
    return fetch(f)
end
@show isolated_foreign_call(1:100)
Вопрос 28 из 30
Какую гарантию должна сохранить правка участка с `f = @spawnat w begin`?
JuliaJulia · Восстановление системы
using Distributed
addprocs(1)
function isolated_foreign_call(args)
    w = first(workers())
    f = @spawnat w begin
        # Нативный вызов выполняется вне главного процесса.
        sum(args)
    end
    return fetch(f)
end
@show isolated_foreign_call(1:100)
Вопрос 29 из 30
Как проверить, что новая реализация `f = @spawnat w begin` не изменила обещанное пользователю поведение?
crash(child)\not\Rightarrow crash(parent)
Вопрос 30 из 30
Какое ограничение стоит прямо указать в документации к участку с `f = @spawnat w begin`?

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

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

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

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