디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.11.25 19:36:17
조회 87 추천 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 - -
2905771 IT굽삐 광고가 이제 [2] 개멍청한유라갤로그로 이동합니다. 00:29 65 0
2905745 지금 신입 ㅈ된거 아니냐 [5] ㅇㅇ갤로그로 이동합니다. 11.30 139 0
2905740 파이썬 어케 실행하냐고 묻는 개발자 어케 생각함? [6] 프갤러(218.153) 11.30 116 1
2905739 IT 인력을 좀 줄일 필요는 있는 듯 [1] ㅇㅇ(114.30) 11.30 102 0
2905738 IT 배우려면 인도 기업 가라는 이유 [4] 프갤러(124.54) 11.30 118 0
2905736 12.3 계엄 그날의 시계는 돌아온다. [그날의 의미] [누군가의 길에서 넥도리아(220.74) 11.30 24 0
2905735 혹시 이제 코딩 c언어 몰라도 할수있는 정도임? [1] 흑인갤로그로 이동합니다. 11.30 96 0
2905734 큰 결심을 하려 한다. 넥도리아(220.74) 11.30 39 0
2905724 디시 클리너 돌리기 어려움?? [11] ㅇㅇ(175.214) 11.30 69 0
2905719 님들 혹시 다이어그램 같은 거 직접그림? [2] ㅇㅇ(115.140) 11.30 66 0
2905710 한달에 100km 정도 뛰는듯? [2] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 105 0
2905709 2000년대 머리스탈이 지금보다 낳지않냐? [4] 헬마스터갤로그로 이동합니다. 11.30 72 0
2905708 나님 슬슬 졸린.. [2] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 99 0
2905698 프갤 뛰뛰크루 냥덩런 명단과 일정 짜봄(초보자용) [6] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 76 0
2905696 [애니뉴스] 소설 공모전 ㅇㅇ(121.172) 11.30 26 0
2905694 나님 프갤 뛰뛰크루 만들깡? [3] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 101 0
2905692 확실히 뛰뛰하면 맘마 소화가 잘됨 [4] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 55 0
2905687 나님 이제 슬슬 소화되는듯? [4] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 78 0
2905685 렌고쿠 똥구멍봤다 [7] 개멍청한유라갤로그로 이동합니다. 11.30 82 0
2905684 러스트 sql 인젝션 실제 사례, 겁나 많네 [2] 나르시갤로그로 이동합니다. 11.30 59 0
2905683 러스트 sql 인젝션 실제 사례 나르시갤로그로 이동합니다. 11.30 36 2
2905679 취업이 목표면 대학교보다 폴리텍, 직업훈련소.. [10] 나르시갤로그로 이동합니다. 11.30 77 0
2905678 학력높아야하는 이유 ㅇㅇ [5] 프갤러(211.234) 11.30 83 0
2905676 수학과가 범용성 최고 [4] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 97 0
2905674 현대판 중일 전쟁 정말 나나요? 넥도리나(220.74) 11.30 24 0
2905673 코딩하는거니 유튜버 아는 사람 [1] 프갤러(14.39) 11.30 51 0
2905672 친구놈이 자기 코딩할줄안다고 자랑하는데 [8] 프갤러(121.150) 11.30 87 0
2905671 자바개발자랑 c#개발자 구분하는법 [3] 프갤러(211.234) 11.30 74 0
2905670 대장동 설계자 이재명 [2] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 69 1
2905667 학력높으면 좋은점 있음 ㅇㅇ(121.139) 11.30 36 0
2905665 재미나이 프로 대학생무료1년 이거 언제다시해주냐 ㅇㅇ갤로그로 이동합니다. 11.30 30 0
2905662 간첩들이 나라 망치는 중 [2] ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 43 0
2905659 한동훈 책 샀음. [2] 넥도리아(220.74) 11.30 77 0
2905657 이번에 컴공 가는 고3인데 미리 공부해야할거 있음? [7] ㅇㅇ갤로그로 이동합니다. 11.30 82 0
2905651 밥먹는중인데 chironpractor갤로그로 이동합니다. 11.30 35 0
2905650 정치관련글의 문제점 [4] 프갤러(114.205) 11.30 45 0
2905647 나님 단어 창조조화력 ㄱㅆㅅㅌㅊ☀+ ♥멘헤라냥덩♥갤로그로 이동합니다. 11.30 31 0
2905645 내가 딱 멍청하다고 느끼는 애들 중 하나 [9] 루도그담당(58.233) 11.30 107 3
2905644 이제 카쿠 빠지고 네라배 되는거임? 프갤러(49.165) 11.30 28 1
2905643 학교 엄청 중요함 [1] 프갤러(110.8) 11.30 62 1
2905641 쥐포기업 좆팡수준 ㅋㅋㅋ 프갤러(221.142) 11.30 24 0
2905640 확실히 AI나오고나니 할줄모른다는말은 안하겠다처럼 들림 [1] 프갤러(58.76) 11.30 51 1
2905636 요즘 들어 별로 살고 싶지가 않네.. [4] ㅇㅇ(1.244) 11.30 53 0
2905629 쿠팡 중국인 나만 의문이냐 [3] ㅇㅇ(211.106) 11.30 77 0
2905626 [대한민국] 여기저기 돌아다니며 사진만 찍는 배현진을 보면 ㅇㅇ(121.172) 11.30 21 0
2905624 커뮤니티 홈페이지 만드는대 대략 얼마나듬? [4] ㅇㅇ(121.140) 11.30 61 0
2905622 나도 러스트 못쓰는 한국 플머 업계에 현타가 온다. [11] 프갤러(211.234) 11.30 117 0
2905621 si에서 솔루션 가면 일어나는일 [12] 슈퍼막코더(126.253) 11.30 111 0
2905620 그냥 현타가 존나게 온다 ㅋㅋㅋ ㅇㅇ(172.56) 11.30 60 1
2905619 아 서비스회사 오니까 주말에도 자꾸 찾네 ㅅㅂ ㅇㅇ(1.244) 11.30 52 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2