2017-05-10 6 views
0

기본적으로 나는 모든 Julia 문서를 파고 들었지만 이에 대한 답변을 찾을 수 없습니다. 제 질문은 두 부분으로 나눌 수 있습니다. 코드 스 니펫은 기본 s 초기화와 같은 내용을 무시합니다.Julia의 복합 형/복싱 복싱

1 부 : 나는 약간 String 조작을 수행하는 기능 f를 들어, 일부 줄리아 스크립트를 호출하는 C/C++ 프로그램이 있다고 가정 jl_eval_string()

없이 기본 복합 유형을 전달하는 방법. C 소스에서 :

char* parameter_string; // Initialized as something. 
jl_module_t *m = (jl_module_t *) jl_load("Script.jl"); 
jl_function_t *f = jl_get_function(m, "f"); 
jl_value_t * ret = jl_call1(f, /*???*/) <--- Problem 

이제 매뉴얼에는 int, float, double과 같은 프리미티브 박스를 작성하는 방법 만 설명합니다. String과 같은 복잡한 유형은 없습니다. 예, jl_eval_string(parameter_string)을 사용할 수 있지만이 점은 마음에 들지 않습니다. 또한 ret은 String이 될 것이고 C로 추출하는 방법을 모릅니다. 문서화되지 않았습니다.

2 부 :

나는 상태 머신이 강화되는 일부 줄리아 스크립트를 호출하는 C/C++ 프로그램을 가정 해 봅시다. 다음

abstract State 
type Idle <: State end 
type State1 <: State end 
type State2 <: State end 

그리고 전환 기능 : 상태 머신 (state machine)을 만들려면, 나는 몇 가지 유형을 만들 C에서, 나는 State을 만들려면,

function transition(s :: State, input :: String) # input :: String is arbitrary 
    .. Do Something .. 
    return newState 
end 

이제 Idle 말 ... I Julia에서 검색하는 방법을 찾지 못하게하는 이와 같은 것을 찾을 수 없습니다.

나는 하스켈, 스칼라 또는 F #과 같은 함수형 프로그래밍 언어와 거의 비슷하게이 문제에 접근하고있다. 대수 데이터 형식은 여기에서 잘 지원되지 않을 수도 있지만 정수로 하드 코딩하는 것보다 여전히 좋습니다.

실제 문제는 Julia에서 소스 코드를 직접 파고 들지 않고 C API 문서를 찾을 수 없다는 것입니다.

답변

4

jl_cstr_to_string(char*)을 사용하여 C 문자열을 줄리아 String으로 변환 할 수 있습니다.

줄리아 String에서 데이터를 가져 오려면 jl_string_ptr(jl_value_t*)을 사용하십시오.

생성자는 함수처럼 호출되므로 생성자를 호출하려면 jl_get_function(m, "Idle")을 사용하고이를 정상적으로 호출하십시오. 또는 객체를 직접 할당하려면 (정의 할 수있는 생성자 주위를 돌아 다니고 기술적으로 약간 위험하므로) jl_new_struct(type, fields...)으로 호출 할 수 있습니다.

+0

좋습니다. BTW, 저는 Julia의 타입 시스템에 익숙하지 않습니다. 그래서 ADT와 같은 구조가 실제로 작동하는지 확실하지 않습니다. –

+0

그리고 검색하는 것은 어떻습니까? 'ret-> type'과 같은 것입니까? 아니면'jl_valueof()'와'jl_typeof()'입니까? 그것들은 매크로이므로 실제로 타입을 알지 못합니다. –

+0

예,'jl_value_t *'의 타입은'jl_typeof()'를 사용해서 얻을 수 있습니다. 'jl_value_t *'자체는 이미 데이터 영역 (type 태그 뒤)을 가리 킵니다. –