디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.25 19:36:17
조회 26 추천 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/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
2904781 뉴비들을 위한 입시 면접 합격 가이드(따뜻한 조언)!= 프갤러(121.142) 11.25 37 1
2904780 인텔 다시 분리형 칩으로 돌아간것 같넹;; [1] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 40 0
2904774 위험한 냥덩이 발명도둑잡기(118.216) 11.25 38 1
2904771 씨언어나 해라 [1] CANON갤로그로 이동합니다. 11.25 43 0
2904768 내란무새 찢재명 ㅋㅅㅋ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 26 0
2904767 ☀+ 짧아지니 나님 빨리 주무시게 되는듯 ⭐+ [6] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 57 0
2904760 Skia: C 스타일 API와 모던 C++의 절묘한 조합 [4] 나르시갤로그로 이동합니다. 11.25 48 0
C++, Rust, Ada 라이브러리를 다른 언어에서 사용하려면? 나르시갤로그로 이동합니다. 11.25 26 0
2904758 환율 떡락과 일본 지진으로 보건대 [5] 프갤러(49.165) 11.25 46 0
2904757 Rust와 C FFI에서 패닉 전파에 대한 정리 나르시갤로그로 이동합니다. 11.25 24 0
2904756 삼성 컴퓨터 광고 발명도둑잡기(118.216) 11.25 49 0
2904755 여름에 남겨놓은 아이스크림이 하나 있었던 듯 발명도둑잡기(118.216) 11.25 14 0
2904754 요새 만원이면 알리에서 리눅스 지원 싱글보드를 산다 [6] 발명도둑잡기(118.216) 11.25 41 0
2904753 고철 발명도둑잡기(118.216) 11.25 17 0
2904751 유튜브 숏츠 만드는 새끼들 나님꺼 자꾸 막 갔다쓰네 [3] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 53 0
2904750 IT업계 근황 발명도둑잡기(118.216) 11.25 79 0
2904749 웹페이지 만듦 프갤러(159.26) 11.25 25 0
2904747 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 22 0
2904746 vga32 ttgo MSX 에뮬레이터 발명도둑잡기(118.216) 11.25 17 0
2904745 pico-286 발명도둑잡기(118.216) 11.25 18 0
2904744 노인비하글 써서 프갤 하루 글 차단했냐 관리자새끼야 타이밍뒷.통수한방(1.213) 11.25 19 0
2904743 만화 드래곤볼 아직 못 봤는데 손오공 직업이 발명도둑잡기(118.216) 11.25 17 0
2904742 끙야참기 은근 쾌감?있는듯? ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 42 0
2904739 지귀연판사 말투 개웃기지않냐? [5] 헬마스터갤로그로 이동합니다. 11.25 51 0
2904735 한국에서 수준운운 의미없다. [6] 프갤러(110.8) 11.25 65 0
2904734 촉촉한 초코 케익처럼 달콤한 모모링❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 19 0
2904733 앱히키는 창년임 ㅇㅇ(222.108) 11.25 45 0
2904731 [애니뉴스] Github Page 사이트 주소 1급시크릿공문(121.172) 11.25 29 0
2904730 요새 1인 개발이 유행임? ㅋㅋ [1] 프갤러(118.235) 11.25 91 3
2904729 국가부도사태 초읽기 대.재.명 [5] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 82 1
2904727 식당 들어갔는데 알바생이 젊고 예쁨 [3] ㅁㅁㅅ갤로그로 이동합니다. 11.25 59 0
2904725 실력자의 기준이 뭐냐? [7] 프갤러(211.240) 11.25 95 0
2904723 [대한민국 + 애니뉴스] 부정선거와 내부총질의 상관관계 1급시크릿공문(121.172) 11.25 23 1
2904720 전남친토스트맛 [3] 넥도리아(223.38) 11.25 33 0
2904718 달력받으러 신한은행 넥도리아(223.38) 11.25 29 0
2904717 인버스를 사지 않는 이유가 이해되지 않는군 [11] chironpractor갤로그로 이동합니다. 11.25 78 0
2904715 재업) Ada, C++, Rust에서 FFI 시 예외 전파 차이점 [3] 나르시갤로그로 이동합니다. 11.25 46 0
2904711 해킹 관련 질문 검열 안하는 인공지능 채팅 있나요 [1] 발명도둑잡기(118.235) 11.25 46 0
2904709 이거 검열 삭제 된다 발명도둑잡기(118.235) 11.25 61 0
2904706 파묘가 100억 손해? 영화 티켓값 내릴 수 있는 방법 알려드림 발명도둑잡기(118.235) 11.25 27 0
2904704 M-DIR 클론코딩 소스 발명도둑잡기(118.235) 11.25 37 0
2904703 인버스를 사는 이유가 이해되지 않는군 [4] ㅇㅇ갤로그로 이동합니다. 11.25 106 0
2904702 요즘 웹개발 취업시장 어때요 [1] 프갤러(211.234) 11.25 76 0
2904700 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.25 46 0
2904699 프갤에 인생 40년 갈아넣었습니다 [5] chironpractor갤로그로 이동합니다. 11.25 64 0
2904696 그래픽스 엔지니어 신입으로 들어가는 게 가능한가? [4] 프갤러(112.154) 11.25 67 0
2904695 일본 취업 유학 워홀 여행 관련모임 ㅇㅇ(106.146) 11.25 53 0
2904693 러스트 인생 40 년 갈아 넣었습니다. [2] 프갤러(59.16) 11.25 69 0
2904691 이벤트 루프 며칠 있으면 완성될 듯 ㅋㅋ 나르시갤로그로 이동합니다. 11.25 41 0
2904686 조별 프로젝트 조언부탁드려요 [1] ㅇㅇ(14.32) 11.25 53 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2