Spec-Zone.ru › Julia 1.2

C Интерфейс

ccallКлючевое слово

ccall((function_name, library), returntype, (argtype1, ...), argvalue1, ...)
ccall(function_name, returntype, (argtype1, ...), argvalue1, ...)
ccall(function_pointer, returntype, (argtype1, ...), argvalue1, ...)

Вызов функции в C-экспортированной библиотеке динамической компоновки, указанной кортежем (function_name, library), где каждый компонент — это строка или символ. Вместо указания библиотеки можно также использовать символ или строку function_name, которые разрешаются в текущем процессе. В качестве альтернативы, ccall может быть использовано для вызова указателя на функцию function_pointer, например, возвращенного dlsym.

Обратите внимание, что кортеж типов аргументов должен быть литеральным кортежем, а не переменной или выражением с кортежем в качестве значения.

Каждый argvalue в ccall будет преобразован в соответствующий argtype, автоматически вставляя вызовы unsafe_convert(argtype, cconvert(argtype, argvalue)). (См. также документацию unsafe_convert и cconvert для получения дополнительных подробностей.) В большинстве случаев это приводит к вызову convert(argtype, argvalue).

источник

Core.Intrinsics.cglobalФункция

cglobal((symbol, library) [, type=Cvoid])

Получение указателя на глобальную переменную в C-экспортированной библиотеке динамической компоновки, указанную точно так же, как в ccall. Возвращает Ptr{Type}, по умолчанию Ptr{Cvoid}, если не предоставлен аргумент Type. Значения можно читать или записывать с помощью unsafe_load или unsafe_store! соответственно.

источник

Base.@cfunctionМакрос

@cfunction(callable, ReturnType, (ArgumentTypes...,)) -> Ptr{Cvoid}
@cfunction($callable, ReturnType, (ArgumentTypes...,)) -> CFunction

Генерация указателя на C-вызываемую функцию из функции Julia callable для заданной подписи типа. Чтобы передать возвращаемое значение в ccall, используйте тип аргумента Ptr{Cvoid} в подписи.

Обратите внимание, что кортеж типов аргументов должен быть литеральным кортежем, а не кортежем-значением переменной или выражения (хотя он может включать выражение splat). И что эти аргументы будут вычислены в глобальной области видимости во время компиляции (а не отложены до выполнения). Добавление '$' перед аргументом функции изменяет это на создание замыкания во время выполнения над локальной переменной callable.

См. раздел руководства по использованию ccall и cfunction.

Примеры

julia> function foo(x::Int, y::Int)
           return x + y
       end

julia> @cfunction(foo, Int, (Int, Int))
Ptr{Cvoid} @0x000000001b82fcd0
источник

Base.CFunctionТип

CFunction struct

Обработка сбора мусора для возвращаемого значения из @cfunction, когда первый аргумент помечен '$'. Как и все cfunction обработчики, он должен передаваться в ccall как Ptr{Cvoid}, и будет автоматически преобразовываться в вызываемом месте в соответствующий тип.

См. @cfunction.

источник

Base.unsafe_convertФункция

unsafe_convert(T, x)

Преобразование x в C-аргумент типа T, где входной x должен быть возвращаемым значением cconvert(T, ...).

В случаях, когда convert необходимо принять объект Julia и преобразовать его в Ptr, следует использовать эту функцию для определения и выполнения преобразования.

Следует быть внимательным, чтобы гарантировать существование ссылки Julia на x до тех пор, пока результат этой функции будет использоваться. Соответственно, аргумент x этой функции никогда не должен быть выражением, только именем переменной или ссылкой на поле. Например, x=a.b.c допустимо, но x=[a,b,c] — нет.

Префикс unsafe этой функции указывает на то, что использование результата этой функции после того, как аргумент x этой функции больше не доступен программе, может привести к неопределенному поведению, включая повреждение программы или ошибки segfaults, в любой момент в будущем.

См. также cconvert

источник

Base.cconvertФункция

cconvert(T,x)

Преобразование x в значение, которое будет передано в C-код как тип T, обычно вызывая convert(T, x).

В случаях, когда x не может быть безопасно преобразован в T, в отличие от convert, cconvert может вернуть объект типа, отличного от T, который, однако, подходит для unsafe_convert для обработки. Результат этой функции должен оставаться действительным (для сборки мусора) до тех пор, пока результат unsafe_convert больше не нужен. Это может быть использовано для выделения памяти, которая будет обработана ccall . Если необходимо выделить несколько объектов, в качестве возвращаемого значения можно использовать кортеж объектов.

Ни convert ни cconvert не должны принимать объект Julia и преобразовывать его в Ptr.

источник

Base.unsafe_loadФункция

unsafe_load(p::Ptr{T}, i::Integer=1)

Загрузка значения типа T из адреса i-го элемента (индексированного с 1), начиная с p. Это эквивалентно C-выражению p[i-1].

Префикс unsafe этой функции указывает, что никакая проверка не выполняется для указателя p , чтобы убедиться, что он действителен. Неправильное использование может привести к ошибке segfault или возвращению мусорных значений, так же как и на C.

источник

Base.unsafe_store!Функция

unsafe_store!(p::Ptr{T}, x, i::Integer=1)

Сохранение значения типа T по адресу i-го элемента (индексированного с 1), начиная с p. Это эквивалентно C-выражению p[i-1] = x.

Префикс unsafe этой функции указывает, что никакая проверка не выполняется для указателя p , чтобы убедиться, что он действителен. Неправильное использование может привести к повреждению или ошибке segfault программы, так же как и на C.

источник

Base.unsafe_copyto!Метод

unsafe_copyto!(dest::Ptr{T}, src::Ptr{T}, N)

Копирование N элементов из указателя-источника в указатель-приемник без проверок. Размер элемента определяется типом указателей.

Префикс unsafe этой функции указывает, что никакая проверка не выполняется для указателей dest и src , чтобы убедиться, что они действительны. Неправильное использование может привести к повреждению или ошибке segfault программы, так же как и на C.

источник

Base.unsafe_copyto!Метод

unsafe_copyto!(dest::Array, do, src::Array, so, N)

Копирование N элементов из массива-источника в массив-приемник, начиная со смещения so в источнике и do в приемнике (индексировано с 1).

Префикс unsafe этой функции указывает, что никакая проверка не выполняется для проверки, что N находится в пределах массива. Неправильное использование может привести к повреждению или ошибке segfault программы, так же как и на C.

источник

Base.copyto!Функция

copyto!(dest::AbstractMatrix, src::UniformScaling)

Копирует UniformScaling в матрицу.

Julia 1.1

В Julia 1.0 этот метод поддерживал только квадратную целевую матрицу. В Julia 1.1. добавлена поддержка прямоугольной матрицы.

источник
copyto!(dest, do, src, so, N)

Копирование N элементов из коллекции src, начиная со смещения so, в массив dest, начиная со смещения do. Возвращает dest.

источник
copyto!(dest::AbstractArray, src) -> dest

Копирование всех элементов из коллекции src в массив dest, длина которого должна быть больше или равна длине n коллекции src. Первые n элементов dest перезаписываются, остальные остаются без изменений.

Примеры

julia> x = [1., 0., 3., 0., 5.];

julia> y = zeros(7);

julia> copyto!(y, x);

julia> y
7-element Array{Float64,1}:
 1.0
 0.0
 3.0
 0.0
 5.0
 0.0
 0.0
источник
copyto!(dest, Rdest::CartesianIndices, src, Rsrc::CartesianIndices) -> dest

Копирование блока src в диапазоне Rsrc в блок dest в диапазоне Rdest. Размеры двух областей должны совпадать.

source

Base.pointerФункция

pointer(array [, index])

Получить исходный адрес массива или строки, необязательно в заданной позиции index.

Эта функция является "небезопасной". Следует с осторожностью убедиться, что ссылка Julia на array существует до тех пор, пока используется этот указатель. Для защиты аргумента array от сборки мусора в заданном блоке кода необходимо использовать макрос GC.@preserve.

В общем случае предпочтительнее вызывать Ref(array[, index]), так как это гарантирует валидность.

source

Base.unsafe_wrapМетод

unsafe_wrap(Array, pointer::Ptr{T}, dims; own = false)

Оборачивает объект Julia Array вокруг данных по адресу, указанному в pointer, без копирования. Тип элемента указателя T определяет тип элемента массива. dims — это либо целое число (для одномерного массива), либо кортеж из размерностей массива. own необязательно указывает, следует ли Julia принять на себя владение памятью, вызывая free для указателя, когда массив больше не ссылается на него.

Эта функция помечена как "небезопасная", потому что она вызовет сбой, если pointer не является корректным адресом памяти для данных нужной длины.

source

Base.pointer_from_objrefФункция

pointer_from_objref(x)

Получить адрес памяти объекта Julia как Ptr. Существование полученного Ptr не защитит объект от сборки мусора, поэтому необходимо убедиться, что объект остается ссылаемым в течение всего времени использования Ptr.

Эта функция не может быть вызвана для неизменяемых объектов, так как у них нет стабильных адресов памяти.

См. также: unsafe_pointer_to_objref.

source

Base.unsafe_pointer_to_objrefФункция

unsafe_pointer_to_objref(p::Ptr)

Преобразовать Ptr в ссылку на объект. Предполагается, что указатель ссылается на корректный объект Julia, выделенный в куче. В противном случае поведение будет неопределённым, поэтому эта функция считается "небезопасной" и должна использоваться с осторожностью.

См. также: pointer_from_objref.

source

Base.disable_sigintФункция

disable_sigint(f::Function)

Отключить обработчик Ctrl-C во время выполнения функции на текущей задаче для вызова внешнего кода, который может вызвать код Julia, не поддерживающий прерывания. Предполагается вызов в синтаксисе блока do следующим образом:

disable_sigint() do
    # interrupt-unsafe code
    ...
end

Это не требуется для рабочих потоков (Threads.threadid() != 1), так как InterruptException будет доставлен только в главный поток. Внешние функции, которые не вызывают код Julia или runtime Julia, автоматически отключают sigint во время выполнения.

source

Base.reenable_sigintФункция

reenable_sigint(f::Function)

Включить обработчик Ctrl-C во время выполнения функции. Временное обратное действие disable_sigint.

source

Base.systemerrorФункция

systemerror(sysfunc, iftrue)

Вызывает SystemError для errno с описательной строкой sysfunc если iftrue является true

source

Core.PtrТип

Ptr{T}

Адрес памяти, ссылающийся на данные типа T. Однако нет гарантии, что память действительна или что она действительно представляет данные указанного типа.

source

Core.RefТип

Ref{T}

Объект, который безопасно ссылается на данные типа T. Этот тип гарантирует указание на корректную, выделенную Julia память соответствующего типа. Данные защищены от освобождения сборщиком мусора до тех пор, пока на сам Ref есть ссылка.

В Julia объекты Ref разыменовываются (загружаются или сохраняются) с помощью [].

Создание Ref на значение x типа T обычно записывается как Ref(x). Кроме того, для создания внутренних указателей на контейнеры (такие как Array или Ptr) можно записать Ref(a, i) для создания ссылки на i-ый элемент a.

При передаче в качестве аргумента ccall (либо как Ptr или Ref тип) объект Ref будет преобразован в родной указатель на данные, на которые он ссылается.

В Julia нет недействительного (NULL) Ref , но экземпляр C_NULL типа Ptr может быть передан в ccall Ref аргумент.

source

Base.CcharТип

Cchar

Эквивалент родному типу char c.

source

Base.CucharТип

Cuchar

Эквивалент родному типу unsigned char c (UInt8).

source

Base.CshortТип

Cshort

Эквивалент родному типу signed short c (Int16).

source

Base.CstringТип

Cstring

Строка в стиле C, составленная из символов родного типа Cchar. Строки в стиле C завершаются нулём. Для строк в стиле C, составленных из родного типа символов с широким диапазоном, см. Cwstring. Дополнительная информация о совместимости строк с C — в руководстве.

source

Base.CushortТип

Cushort

Эквивалент родному типу unsigned short c (UInt16).

source

Base.CintТип

Cint

Эквивалент родному типу signed int c (Int32).

source

Base.CuintТип

Cuint

Эквивалент родному типу unsigned int c (UInt32).

source

Base.ClongТип

Clong

Эквивалент родному типу signed long c.

source

Base.CulongТип

Culong

Эквивалент родному типу unsigned long c.

source

Base.ClonglongТип

Clonglong

Эквивалент родному типу signed long long c (Int64).

source

Base.CulonglongТип

Culonglong

Эквивалентно встроенному unsigned long long типу c (UInt64).

исходный код

Base.Cintmax_tТип

Cintmax_t

Эквивалентно встроенному intmax_t типу c (Int64).

исходный код

Base.Cuintmax_tТип

Cuintmax_t

Эквивалентно встроенному uintmax_t типу c (UInt64).

исходный код

Base.Csize_tТип

Csize_t

Эквивалентно встроенному size_t типу c (UInt).

исходный код

Base.Cssize_tТип

Cssize_t

Эквивалентно встроенному ssize_t типу c.

исходный код

Base.Cptrdiff_tТип

Cptrdiff_t

Эквивалентно встроенному ptrdiff_t типу c (Int).

исходный код

Base.Cwchar_tТип

Cwchar_t

Эквивалентно встроенному wchar_t типу c (Int32).

исходный код

Base.CwstringТип

Cwstring

Строка в стиле C, составленная из нативных символов типа Cwchar_t. Cwstring строки завершаются символом NUL. Для строк в стиле C, составленных из нативного типа символов, см. Cstring. Более подробную информацию о взаимодействии строк с C см. в справочном руководстве.

исходный код

Base.CfloatТип

Cfloat

Эквивалентно встроенному float типу c (Float32).

исходный код

Base.CdoubleТип

Cdouble

Эквивалентно встроенному float типу c (Float64).

исходный код

Интерфейс LLVM

Core.Intrinsics.llvmcallФункция

llvmcall(IR::String, ReturnType, (ArgumentType1, ...), ArgumentValue1, ...)
llvmcall((declarations::String, IR::String), ReturnType, (ArgumentType1, ...), ArgumentValue1, ...)

Вызов строки LLVM IR в первом аргументе. Аналогично блоку LLVM функции define, аргументы доступны как последовательные безымянные переменные SSA (%0, %1 и т.д.).

Необязательная строка объявлений содержит объявления внешних функций, необходимые для компиляции LLVM строки IR. Несколько объявлений можно передать, разделяя их символами новой строки.

Обратите внимание, что кортеж типов аргументов должен быть литеральным кортежем, а не кортежем-переменной или выражением.

Каждый ArgumentValue до llvmcall будет преобразован в соответствующий ArgumentType, путем автоматического вставки вызовов unsafe_convert(ArgumentType, cconvert(ArgumentType, ArgumentValue)). (См. также документацию по unsafe_convert и cconvert для получения дополнительной информации.) В большинстве случаев это приводит просто к вызову convert(ArgumentType, ArgumentValue).

См. test/llvmcall.jl для примеров использования.

исходный код

© 2009–2019 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.2.0/base/c/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API