디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.25 19:36:17
조회 88 추천 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 - -
공지 프로그래밍 갤러리 이용 안내 [97] 운영자 20.09.28 48801 65
2905938 우왓, 연회중에 피분수가..ㅡㅡ;; [1] 박정희대통령갤로그로 이동합니다. 19:12 13 1
2905937 "'트럼프시대 美활동' 중국계 연구자, 문화대혁명 같은 혼란 중" 발명도둑잡기(39.7) 19:08 8 0
2905936 박민호 d-_-b_mh@daum.net 더 많은 계정정보 보기 99+ 프갤러(222.116) 19:01 7 0
2905935 [단독] 정부, 쿠팡에 최대 1조3300억 과징금 … 국민 정보 통째 유 발명도둑잡기(39.7) 19:01 10 0
2905934 난 정치에 관심은 없지만 [2] 사람낚는어부갤로그로 이동합니다. 18:51 34 1
2905933 열혈 백업 중..ㅇㅅㅇ [5] 헤르 미온느갤로그로 이동합니다. 18:50 21 0
2905932 WPF 쓰면 쓸수록 역하네 이거 [4] 거북이속이거북갤로그로 이동합니다. 18:44 33 0
2905929 친중도 나쁘지 않은 듯 ㅇㅇ(114.30) 18:38 30 0
2905928 내일 그만둔다고 해야지 [2] ㅇㅇ(118.235) 18:24 35 0
2905927 책읽기 귀찮다 [1] 사람낚는어부갤로그로 이동합니다. 18:15 27 0
2905926 [대한민국] 윤석열 대통령 - 연성 메시지 계엄 강조 ㅇㅇ(121.172) 18:09 12 1
2905925 네카라쿠베 쿠팡 가려면 중국인 되야 한다네 발명도둑잡기(39.7) 18:08 24 0
2905924 진보정당 역사의 6가지 교훈과 재구성의 길 발명도둑잡기(39.7) 18:05 12 0
2905922 안녕하세요. 프갤러(125.177) 17:51 15 0
2905921 바람은 찬데 저녁노을은 따스하구낭❤+ [1] ♥발라당냥덩♥갤로그로 이동합니다. 17:50 21 0
2905920 팀프로젝트 말고 1인 프로젝트만 교육시켜주는 프로그램은 없음? [1] 프갤러(221.166) 17:46 15 0
2905918 국정원 존재이유가 감시통제아님??하는일이 타이밍뒷.통수한방(1.213) 17:32 15 0
2905917 "쿠팡 IT 인력 절반 이상 중국인"…내부 폭로에 '발칵' 발명도둑잡기(211.246) 17:31 25 0
2905916 오픈AI 연구원 "고교 중퇴 후 챗GPT로 머신 러닝 배워...박사급들과 ㅇㅇ(106.102) 17:30 17 0
2905915 '일반 사무 업무' 라더니... 비밀 유지 계약서까지..? /KNN 발명도둑잡기(211.246) 17:28 11 0
2905913 호떡의 계절..❤+ [2] 따당갤로그로 이동합니다. 16:36 41 0
2905912 나 더이상 못버티겠어 퇴사해야할듯해.. [3] ㅇㅇ(211.235) 16:31 64 0
2905911 형들 이거 뭐임? [4] 프갤러(118.235) 16:18 79 0
2905910 군대는 언제감? [6] ㅇㅇ갤로그로 이동합니다. 15:47 59 0
2905909 요새 여기 저기 개인정보 털리네 [2] 류류(121.140) 15:38 41 0
2905908 안녕하세요. ㅇㅇ(118.221) 15:34 18 0
2905907 한국 프로그래머 커뮤니티 추천좀 [3] Fhiwjsjsjeje갤로그로 이동합니다. 15:17 63 0
2905905 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ [2] ♥발라당냥덩♥갤로그로 이동합니다. 14:43 44 0
2905904 리눅스 유료로 변환되누 ㅋㅋㅋㅋㅋㅋ 타이밍뒷.통수한방(1.213) 14:39 43 0
2905902 미국회사 쿠팡은 한국고객 개인정보보호나 한국 노동자 인권에 관심이 없다 발명도둑잡기(39.7) 14:29 15 0
2905901 주한미군의 ‘뒤집힌 지도’와 전략적 유연성 발명도둑잡기(39.7) 14:24 20 0
2905900 남자는 애인이나 아내가 없으면 포악해진다 발명도둑잡기(118.235) 14:18 26 0
2905899 쿠팡 개인정보 유출은 중국인 개발자 소행 [4] chironpractor갤로그로 이동합니다. 14:12 66 2
2905898 개발일하면서 주식투자 공부해왔는데 [2] ㅇㅇ(116.43) 13:46 49 0
2905896 [단독] “북한 오물풍선전, 사실상 국군이 먼저 도발…아군에도 비밀이었다 발명도둑잡기(118.235) 13:29 17 0
2905895 빅테크 기업은 C++ 로 개발하냐? [2] 프갤러(59.16) 13:28 53 0
2905889 방구가 진짜 미칠듯이 나옴 [8] 개멍청한유라갤로그로 이동합니다. 12:20 68 0
2905888 혹시 DLL 인젝션 고수있음? [11] 프갤러(1.213) 12:18 122 0
2905887 아~~~~~~~~~~~ [9] 개멍청한유라갤로그로 이동합니다. 12:12 68 0
2905886 Lua script하는 친구들 많아? [10] 프갤러(1.213) 11:45 92 1
2905883 나님… 멧챠 카와이.. ❤+ [2] 따당갤로그로 이동합니다. 10:19 90 0
2905881 나의 인버스 동지들 맘고생이 많소 [4] chironpractor갤로그로 이동합니다. 10:16 55 0
2905879 컴컴.. ㅇㅅㅇ [3] 헤르 미온느갤로그로 이동합니다. 09:59 38 0
2905877 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09:55 20 0
2905876 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 09:52 38 0
2905871 인지과학조져라 손발이시립디다갤로그로 이동합니다. 07:58 60 0
2905869 결국 jemalloc 래핑하는 걸로 타협봤어요 [1] 나르시갤로그로 이동합니다. 07:09 41 0
2905862 요즘에 AI가 나오니까 시니어 1명 주니어 다수 형태로 가는거같음 프갤러(58.76) 05:25 59 0
2905853 코로나때 국비고졸로 취업했었다면 어땟을까 ㅇㅇ(211.235) 04:49 52 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2