디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.25 19:36:17
조회 32 추천 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 - -
공지 프로그래밍 갤러리 이용 안내 [97] 운영자 20.09.28 48769 65
2904885 인지과학조져라 손발이시립디다갤로그로 이동합니다. 11:01 7 0
2904883 진짜 오늘 딸라 쎄일하네 [2] chironpractor갤로그로 이동합니다. 09:54 34 0
2904881 가치를 인정해주지 않는 사람에겐 그만큼만 해주면 된다. [6] 프갤러(221.149) 09:17 50 0
2904880 프로그래머는 티 나는 쪽 아닌가? ㅇㅅㅇ [3] 헤르 미온느갤로그로 이동합니다. 09:09 47 0
2904877 뱀 가족 ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 08:58 18 0
2904876 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08:52 15 0
2904875 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 08:51 21 0
2904874 프로그래머는 뭐를 해도 티가 안나. [1] 프갤러(59.16) 08:38 50 0
2904871 스타크래프트와 같은 RTS 게임에서 가장 치명적인 문제는 책사풍후갤로그로 이동합니다. 07:06 28 0
2904868 나님 달러 추가매수중 재명이 때문에 국가부도사태 터질듯 [2] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 06:42 59 0
2904867 계산이랑 증명이란것도 결국 원숭이를 위해서 존재함 [2] RyuDOG갤로그로 이동합니다. 06:29 37 0
2904865 음기 충전 발명도둑잡기(118.216) 05:59 36 0
2904864 영국 산업혁명 때 빈곤층은 아동착취 찬성 발명도둑잡기(118.216) 05:45 19 0
2904863 X 계정 국적표기 업뎃 됐었구나 ㅇㅅㅇ [1] ㅇㅇ(112.157) 05:06 45 0
2904860 유튜브 타고 퍼지는 '1020 조폭' 실태 살펴보니 발명도둑잡기(118.216) 03:35 28 0
2904858 요즘 연애 발명도둑잡기(118.216) 03:23 44 0
2904857 진지하게 지금 이재명정부 잘하고 있냐? [1] ㅇㅇ(125.129) 03:23 49 0
2904856 당신이 아는 빅뱅은 틀렸다 발명도둑잡기(118.216) 03:19 22 0
2904849 위시캣이란 만화가 있나보네 발명도둑잡기(118.216) 02:58 16 0
2904847 X윈도우 프로그래밍 갤러리 개설 [2] FreePascal갤로그로 이동합니다. 02:55 47 0
2904846 "SM 이수만 파워 통했다" 이달의 소녀, '해시' 아이튠즈 발명도둑잡기(118.216) 02:27 18 0
2904844 레스토랑 메뉴판에 숨은 꼼수들 발명도둑잡기(118.216) 02:16 23 0
2904843 전처리 친구들을 그려봤어요 [2] ㅇㅇ(1.247) 02:13 70 1
2904842 환율 진짜 개 에바다. Move갤로그로 이동합니다. 02:11 39 0
2904840 const는 상수 아니냐? [3] ㅇㅇ갤로그로 이동합니다. 01:49 59 0
2904839 아 걍 취업하지 말고 농사나 지을까 [4] 프갤러(121.152) 01:45 47 0
2904838 퇴직하고 나니까 드는 생각인데 주 3일제 해야한다. [5] 프갤러(110.8) 01:45 54 0
2904837 진보당 뽑으면 주4일제 된다 발명도둑잡기(118.216) 01:35 22 0
2904836 크레마 루팅 검색하다가 이 블로그가 나왔는데 [1] 발명도둑잡기(118.216) 01:34 31 0
2904835 출근하기싫다 [4] 노력갤로그로 이동합니다. 01:27 39 0
2904834 책사풍후 난중일기 책사풍후갤로그로 이동합니다. 01:26 19 0
2904833 백수라 가난 때문에 고민이 많다 발명도둑잡기(118.216) 01:23 25 0
2904831 나는 8년쯤전 영화 '슈퍼사이즈미' 보고 햄버거 끊었다 발명도둑잡기(118.216) 01:21 20 0
2904828 크레마 전자책 단종됐는데 발명도둑잡기(118.216) 01:16 24 0
2904827 내일부터 버거킹 대신 라면 먹어야겠다. 프갤러(110.8) 01:12 26 0
2904826 이제 슬슬 대가리 깨지지? RyuDOG갤로그로 이동합니다. 01:11 69 0
2904824 결국 내 말중 틀린게 없잖아 [5] RyuDOG갤로그로 이동합니다. 01:09 77 1
2904823 광장시장 바가지를 욕하지만 엔비디아 지피유 독과점 바가지는 침묵 발명도둑잡기(118.216) 01:08 19 0
2904819 법원행정처, '법정 모욕' 극우 변호사들 고발‥"법치주의 훼손" 발명도둑잡기(118.216) 00:59 19 0
2904818 후 남의 돈 날로 처먹고 싶다. [5] 프갤러(110.8) 00:56 52 0
2904817 Hello world도 모르는 컴맹인데 이거 ai가 앰뒤진거임? 라그네파갤로그로 이동합니다. 00:54 36 0
2904816 "대만 문제 이해한다고"…트럼프가? 일본 난처해진 상황 발명도둑잡기(118.216) 00:54 31 0
2904814 냥덩이도 발명도둑잡기(118.216) 00:44 25 0
2904813 그 세글자 닉 우울증갤러리 출신이잖아 [4] 프갤러(106.101) 00:40 57 2
2904810 계속 진화하는 고급 아파트 커뮤니티 시설 발명도둑잡기(118.216) 00:31 18 0
2904808 ‘범죄도시 마동석’ 실제 모델 경찰관, 음주운전 적발 발명도둑잡기(118.216) 00:18 18 0
2904807 취업이 막히던 날, 릴스 하나가 길이 됐다… 종구형님의 인생 2막 발명도둑잡기(118.216) 00:15 38 0
2904805 Elite: "The game that couldn't be writte 발명도둑잡기(118.216) 11.25 21 0
2904804 싱클레어 ZX81 게임 발명도둑잡기(118.216) 11.25 21 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2