Spec-Zone.ru › Julia 0.6

C Интерфейс

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

ccall((symbol, library) or function_pointer, ReturnType, (ArgumentType1, ...), ArgumentValue1, ...)

Вызов функции в экспортированной в C общей библиотеке, заданной кортежем (function name, library), где каждый компонент — строка или символ.

Обратите внимание, что кортеж типа аргумента должен быть литеральным кортежем, а не кортежем-переменной или выражением. В качестве альтернативы, ccall также может использоваться для вызова указателя на функцию, например, возвращённого функцией dlsym.

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

исходный код

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

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

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

исходный код

Base.cfunctionФункция

cfunction(function::Function, ReturnType::Type, ArgumentTypes::Type)

Генерация указателя на вызываемую из C функцию из функции Julia. Анотация типа возвращаемого значения в функции обратного вызова обязательна в ситуациях, когда Julia не может автоматически определить тип возвращаемого значения.

Примеры

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

julia> cfunction(foo, Int, Tuple{Int,Int})
Ptr{Void} @0x000000001b82fcd0
исходный код

Base.unsafe_convertФункция

unsafe_convert(T,x)

Преобразование x в значение типа T

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

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

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

исходный код

Base.cconvertФункция

cconvert(T,x)

Преобразование x в значение типа T, обычно вызывая convert(T,x)

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

Ни 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 не выполняется, чтобы убедиться, что он действителен. Некорректное использование может привести к сегментной ошибке вашей программы или возвращению мусорных данных, аналогично C.

исходный код

Base.unsafe_store!Функция

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

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

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

исходный код

Base.unsafe_copy!Метод

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

Копирование N элементов из исходного указателя в целевой, без проверки. Размер элемента определяется типом указателей.

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

исходный код

Base.unsafe_copy!Метод

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

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

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

исходный код

Base.copy!Метод

copy!(dest, src) -> dest

Копирование всех элементов из коллекции src в массив dest.

исходный код

Base.copy!Метод

copy!(dest, do, src, so, N)

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

исходный код

Base.pointerФункция

pointer(array [, index])

Получение родного адреса элемента массива или строки. Следует быть внимательным, чтобы убедиться, что ссылка Julia на a существует до тех пор, пока этот указатель будет использоваться. Эта функция «небезопасная», как и unsafe_convert.

Вызов Ref(array[, index]) предпочтительнее этой функции.

исходный код

Base.unsafe_wrapМетод

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

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

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

исходный код

Base.pointer_from_objrefФункция

pointer_from_objref(x)

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

исходный код

Base.unsafe_pointer_to_objrefФункция

unsafe_pointer_to_objref(p::Ptr)

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

исходный код

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 во время своего выполнения.

исходный код

Base.reenable_sigintФункция

reenable_sigint(f::Function)

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

исходный код

Base.systemerrorФункция

systemerror(sysfunc, iftrue)

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

исходный код

Core.PtrТип

Ptr{T}

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

исходный код

Core.RefТип

Ref{T}

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

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

Нет недопустимого (NULL) Ref.

исходный код

Base.CcharТип

Cchar

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

исходный код

Base.CucharТип

Cuchar

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

исходный код

Base.CshortТип

Cshort

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

исходный код

Base.CushortТип

Cushort

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

исходный код

Base.CintТип

Cint

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

исходный код

Base.CuintТип

Cuint

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

исходный код

Base.ClongТип

Clong

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

исходный код

Base.CulongТип

Culong

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

исходный код

Base.ClonglongТип

Clonglong

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

исходный код

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.CfloatТип

Cfloat

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

исходный код

Base.CdoubleТип

Cdouble

Эквивалентен исходному типу double 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)). (см. также документацию для каждой из этих функций для получения более подробной информации). В большинстве случаев это просто приводит к вызову convert(ArgumentType, ArgumentValue).

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

исходный код

© 2009–2016 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/release-0.6/stdlib/c/

Spec-Zone.ru

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