디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

C++, Rust, Ada 라이브러리를 다른 언어에서 사용하려면?

나르시갤로그로 이동합니다. 2025.11.25 19:36:17
조회 84 추천 0 댓글 0

C++, Rust, Ada 라이브러리를 Python 등 다른 언어에서 쓰려면?

대부분의 언어는 C와 연결할 수 있는 인터페이스를 제공하므로, Rust나 Ada로 만든 기능도 결국 C 형태로 내보낸 뒤 다른 언어에서 불러와 사용합니다.
즉, 언어 간 연동의 공통 분모는 C이며, Rust/Ada/C++ 라이브러리를 다른 언어에서 쓰려면 보통 C API를 통해 접근하게 됩니다.


C API 경계에서 예외/패닉 전파에 대한 주의사항

중요: C++, Rust로 작성한 함수를 C에서 호출할 경우, 해당 언어의 예외(Exception)나 패닉(Panic)이 발생하면 FFI 경계를 넘어 C 호출자(main 등)까지 전달될 수도 있습니다.
- Rust, C++의 경우 예외/패닉이 언와인딩을 시도하면서 C 호출자까지 넘어가면 정의되지 않은 동작(UB)이 발생합니다. 보통 프로그램이 abort되거나 예측 불가능한 결과를 초래합니다.
- Ada는 예외가 C 호출자에게 전달되지 않으며, 경계에서 바로 런타임이 프로그램을 종료합니다. 

따라서 C API로 노출되는 함수에서는 언어 내부에서 예외/패닉을 잡아 안전한 값(에러 코드 등)으로 변환하는 것이 일반적인 패턴입니다.


C++ 예시: try/catch로 예외를 잡아 에러 코드 반환

extern "C" int do_work_c(int input) {
    try {
        if (input < 0) throw std::invalid_argument("negative");
        return 0;                 // 성공
    } catch (const std::invalid_argument&) {
        return -1;                // 입력 오류
    } catch (...) {
        return -2;                // 알 수 없는 예외
    }
}

Rust 예시: catch_unwind로 패닉을 잡아 에러 코드 반환

use std::panic::{catch_unwind, AssertUnwindSafe};

#[no_mangle]
pub extern "C" fn do_work_c(input: i32) -> i32 {
    let result = catch_unwind(AssertUnwindSafe(|| {
        if input < 0 { panic!("negative"); }
        0
    }));

    match result {
        Ok(code) => code,
        Err(_) => -1, // 패닉 발생
    }
}

Ada 예시: exception 블록으로 예외를 잡아 에러 코드 반환

function Do_Work_C (Input : Interfaces.C.int) return Interfaces.C.int
  with Convention => C is
begin
   if Input < 0 then
      raise Constraint_Error;
   end if;
   return 0;
exception
   when Constraint_Error =>
      return -1;
   when others =>
      return -2;
end Do_Work_C;

결론

  • Rust, Ada, C++ 라이브러리를 다른 언어에서 쓰려면 보통 C API를 통해 접근한다.
  • Rust, C++ 예외/패닉은 C 경계를 넘을 수도 있지만 UB → 언어 내부에서 잡아야 한다.
  • Ada 예외는 C 호출자에게 전달되지 않고 런타임이 종료한다.
  • 안전한 패턴: C API에서는 에러 코드/상태값만 반환하고, 메시지는 별도 API나 버퍼 인자를 통해 전달하는 방식이 일반적이다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 이제는 의미 없어진 것 같은 시상식은? 운영자 25/12/01 - -
AD 따뜻한 겨울나기! 방한용품 SALE 운영자 25/11/27 - -
2904963 27일 27번 타자가 친 공처럼 로케트 잘 올라갈까? 발명도둑잡기(118.216) 11.26 87 0
2904962 <UDT 우리동네 특공대>가 인기래서 생각나는 예전 글 발명도둑잡기(118.216) 11.26 104 0
2904961 C API를 위한 고성능 예외-에러코드(errcode) 매핑 전략 나르시갤로그로 이동합니다. 11.26 87 0
2904960 엣지 탭 천개쯤 띄우면 다 발명도둑잡기(118.216) 11.26 69 0
2904959 왜 갑자기 쌍ㅅ쌍 얘기야? 나르시갤로그로 이동합니다. 11.26 71 2
2904958 Clair 라이브러리: Ada 예외를 C API로 매핑하기 나르시갤로그로 이동합니다. 11.26 65 0
2904957 한국에 실제 있다는 중국 사이비종교 마을 ㄷㅅㄷ [1] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 84 0
2904956 트위터가 공개한건 국적이 아니라 위치다 발명도둑잡기(118.216) 11.26 47 0
2904955 민주정의당 후보, 4대강 죽이기 광고모델 이순재 발명도둑잡기(118.216) 11.26 72 1
2904954 외모는 단점을 커버시키는 힘이 있다 [2] Move갤로그로 이동합니다. 11.26 84 0
2904953 짱깨 한국 여론조작 또 걸렸네 ㅋㅅㅋ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 93 4
2904952 귀찮은데 말이 필요하나 루도그담당(58.233) 11.26 73 0
2904951 저능아씨는 여기서 살아 RyuDOG갤로그로 이동합니다. 11.26 77 1
2904950 프붕이들 솔직히 병신들이 도배하는거보다 러스트 얘기가 낫지? [4] 프갤러(110.8) 11.26 82 0
2904949 아아 하늘은 어째서 나를 낳고 RyuDOG갤로그로 이동합니다. 11.26 55 0
2904948 낄낄낄낄 [1] RyuDOG갤로그로 이동합니다. 11.26 71 0
2904947 솔직히 글 읽을 필요도 없음 RyuDOG갤로그로 이동합니다. 11.26 51 0
2904946 저거 봐바 몇대 때려주니까 [1] 루도그담당(58.233) 11.26 66 0
2904945 우웅 화짱조 짖는거 컹컹 RyuDOG갤로그로 이동합니다. 11.26 47 0
2904944 니 신상은 더군다나 관심 없어 병신아 루도그담당(58.233) 11.26 78 0
2904943 난 애초에 익명이 아니란다 ㅆㅇㅆ야 RyuDOG갤로그로 이동합니다. 11.26 69 0
2904942 커뮤니티에 연봉실명제 달면 웃기긴 할듯 [1] 코딩의신(121.139) 11.26 75 0
2904941 익명 깨지면 너만 불쌍치 루도그담당(58.233) 11.26 73 0
2904940 여기도 여시처럼 익명 깨지면 웃기긴할듯 RyuDOG갤로그로 이동합니다. 11.26 69 0
2904939 뀨? ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 61 0
2904938 님들 디자인 패턴이나 자료형 변환 필요성 설명해도 모르면 어캄? [3] 프갤러(58.76) 11.26 78 0
2904937 빨리 실업급여 제발 [2] 프갤러(110.8) 11.26 73 0
2904936 그래서 팩트는 루도그담당(58.233) 11.26 68 0
2904935 ㅆㅇㅆ 보면 존나 불쌍하긴함 ㅋㅋㅋ RyuDOG갤로그로 이동합니다. 11.26 68 0
2904934 아무리 기싸움 걸어봤자 루도그담당(58.233) 11.26 56 0
2904933 하긴 워낙 캥기는게 많은 인생이라 ㅋㅋㅋ RyuDOG갤로그로 이동합니다. 11.26 66 0
2904932 송사고 뭐고 루도그담당(58.233) 11.26 78 4
2904931 쳇트ㅡ Meow갤로그로 이동합니다. 11.26 68 0
2904930 ㅆㅇㅆ 같은애 고소하면 내가 나쁜놈이 되잖아 RyuDOG갤로그로 이동합니다. 11.26 75 0
2904929 에에 고소할거다노 ~ 루도그담당(58.233) 11.26 66 0
2904928 이렇게 티배깅할때 마다 늘 즐거움 RyuDOG갤로그로 이동합니다. 11.26 62 0
2904927 어딜가나 벌레가 꼬여 ㅇㅇ [1] RyuDOG갤로그로 이동합니다. 11.26 87 0
2904926 오늘의 소설, 영화 실마리: 범죄 학교 발명도둑잡기(118.216) 11.26 40 0
2904925 ㅆㅇㅆ = 앱히키 ㅇㅇ(222.108) 11.26 70 0
2904924 Ai 발전 속도가 너무 느림 [4] RyuDOG갤로그로 이동합니다. 11.26 109 0
2904923 linq 다른언어용으로 비슷하게 만든거 [2] 발명도둑잡기(118.216) 11.26 98 0
2904922 브레인스토밍 책사풍후갤로그로 이동합니다. 11.26 48 0
2904920 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 67 0
2904919 이찬혁-SINNY SINNY 발명도둑잡기(118.216) 11.26 60 0
2904918 ㅎㅎAI가 버그도 다 잡아 줌 ㅋㅋ 소스코드 평가 겁나 편하네 나르시갤로그로 이동합니다. 11.26 85 0
2904917 vscode 은근 무겁네 [3] 프갤러(110.8) 11.26 85 0
2904916 프뉴비 질문) tkinter로 gui프로그램 작성중인데 한글이 [5] 프갤러(123.215) 11.26 67 0
2904915 Clair.Event_Loop 구현 완료함. ㅋㅋ 현재 손적화 중 [10] 나르시갤로그로 이동합니다. 11.26 93 0
2904914 내란견 냥덩이 때문에 한국이 핵폭탄 맞게 됐다 [1] 발명도둑잡기(118.216) 11.26 68 1
2904912 ai나와서 존나 좆같긴해. [3] 코딩의신(121.139) 11.26 138 2
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2