기본적으로 나는 모든 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 문서를 찾을 수 없다는 것입니다.
좋습니다. BTW, 저는 Julia의 타입 시스템에 익숙하지 않습니다. 그래서 ADT와 같은 구조가 실제로 작동하는지 확실하지 않습니다. –
그리고 검색하는 것은 어떻습니까? 'ret-> type'과 같은 것입니까? 아니면'jl_valueof()'와'jl_typeof()'입니까? 그것들은 매크로이므로 실제로 타입을 알지 못합니다. –
예,'jl_value_t *'의 타입은'jl_typeof()'를 사용해서 얻을 수 있습니다. 'jl_value_t *'자체는 이미 데이터 영역 (type 태그 뒤)을 가리 킵니다. –