디시인사이드 갤러리

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

갤러리 본문 영역

재업) Ada, C++, Rust에서 FFI 시 예외 전파 차이점

나르시갤로그로 이동합니다. 2025.11.25 13:03:17
조회 62 추천 0 댓글 3

Ada, C++, Rust에서 FFI 시 예외 전파 차이점


프로그래밍 언어마다 예외(Exception)나 패닉(Panic)을 처리하는 방식이 다르고, 특히 FFI(Foreign Function Interface) 경계에서는 동작이 크게 달라집니다. Ada, C++, Rust를 비교해 보겠습니다.


? Ada


예외 전파 규칙: Ada 예외는 Ada 런타임 내부에서만 전파됩니다.


FFI 경계: 예외가 C로 넘어가지는 않습니다. → 핸들러가 없으면 Ada 런타임이 프로그램을 종료합니다.


안전한 패턴: FFI 래퍼 함수 안에서 exception … when others => … 블록을 두어 예외를 잡고, 외부 언어가 이해할 수 있는 값(예: 에러 코드)으로 변환하는 것이 권장됩니다.


? C++


예외 전파 규칙: C++ 예외는 C++ 코드 사이에서는 정상적으로 전파됩니다.


FFI 경계 (extern "C"): 예외가 C 경계를 넘으면 정의되지 않은 동작(UB)입니다. → 런타임 크래시나 메모리 손상이 발생할 수 있습니다.


안전한 패턴: try { … } catch (…) { … } 블록으로 예외를 잡고, C 함수에서는 에러 코드나 구조체를 반환하도록 변환해야 합니다.


? Rust


예외 전파 규칙: Rust에는 예외가 없고, 대신 panic!이 있습니다. 기본적으로 스택 언와인딩을 하며 상위 호출자에게 전달됩니다.


FFI 경계 (extern "C"): panic!이 C로 넘어가면 역시 정의되지 않은 동작(UB)입니다.


안전한 패턴: std::panic::catch_unwind를 사용해 패닉을 잡고, C 쪽으로는 에러 코드 등을 반환해야 합니다.


rust

#[no_mangle]

pub extern "C" fn kq_wrapper() -> i32 {

    let result = std::panic::catch_unwind(|| {

        // 실제 로직

        panic!("Rust panic!");

    });

    match result {

        Ok(_) => 42,

        Err(_) => -1, // 패닉을 에러 코드로 변환

    }

}


비교 요약


언어 내부 예외/패닉 전파 FFI 경계 동작 안전한 처리 방법

Ada Ada 런타임에서만 전파 외부 언어로 전달되지 않음, 처리 안 되면 종료 래퍼에서 when others로 잡아 에러 코드 변환

C++ C++ 코드 사이에서 전파 extern "C" 경계 넘으면 UB try/catch로 잡아 에러 코드 반환

Rust panic!으로 언와인딩 C로 넘어가면 UB catch_unwind로 잡아 에러 코드 반환


결론


Ada: 예외는 외부로 전파되지 않고 Ada 런타임이 종료 → 반드시 Ada 쪽에서 처리.


C++/Rust: 예외/패닉이 C 경계를 넘으면 UB → 반드시 경계에서 잡아 에러 코드로 변환.


공통적으로 FFI 경계에서는 예외를 외부 언어로 넘기지 말고, 안전하게 변환하는 래퍼를 작성하는 것이 필수입니다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
2904960 엣지 탭 천개쯤 띄우면 다 [1] 발명도둑잡기(118.216) 11.26 26 0
2904959 왜 갑자기 쌍ㅅ쌍 얘기야? 나르시갤로그로 이동합니다. 11.26 32 2
2904958 Clair 라이브러리: Ada 예외를 C API로 매핑하기 나르시갤로그로 이동합니다. 11.26 22 0
2904957 한국에 실제 있다는 중국 사이비종교 마을 ㄷㅅㄷ [1] ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 38 0
2904956 트위터가 공개한건 국적이 아니라 위치다 발명도둑잡기(118.216) 11.26 19 0
2904955 민주정의당 후보, 4대강 죽이기 광고모델 이순재 발명도둑잡기(118.216) 11.26 31 1
2904954 외모는 단점을 커버시키는 힘이 있다 [2] Move갤로그로 이동합니다. 11.26 51 0
2904953 짱깨 한국 여론조작 또 걸렸네 ㅋㅅㅋ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 39 3
2904952 귀찮은데 말이 필요하나 루도그담당(58.233) 11.26 43 0
2904951 저능아씨는 여기서 살아 RyuDOG갤로그로 이동합니다. 11.26 38 1
2904950 프붕이들 솔직히 병신들이 도배하는거보다 러스트 얘기가 낫지? [4] 프갤러(110.8) 11.26 44 0
2904949 아아 하늘은 어째서 나를 낳고 RyuDOG갤로그로 이동합니다. 11.26 25 0
2904948 낄낄낄낄 RyuDOG갤로그로 이동합니다. 11.26 22 0
2904947 솔직히 글 읽을 필요도 없음 RyuDOG갤로그로 이동합니다. 11.26 29 0
2904946 저거 봐바 몇대 때려주니까 루도그담당(58.233) 11.26 31 0
2904945 우웅 화짱조 짖는거 컹컹 RyuDOG갤로그로 이동합니다. 11.26 21 0
2904944 니 신상은 더군다나 관심 없어 병신아 루도그담당(58.233) 11.26 43 0
2904943 난 애초에 익명이 아니란다 ㅆㅇㅆ야 RyuDOG갤로그로 이동합니다. 11.26 34 0
2904942 커뮤니티에 연봉실명제 달면 웃기긴 할듯 [1] 코딩의신(121.139) 11.26 37 0
2904941 익명 깨지면 너만 불쌍치 루도그담당(58.233) 11.26 38 0
2904940 여기도 여시처럼 익명 깨지면 웃기긴할듯 RyuDOG갤로그로 이동합니다. 11.26 22 0
2904939 뀨? ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 22 0
2904938 님들 디자인 패턴이나 자료형 변환 필요성 설명해도 모르면 어캄? [3] 프갤러(58.76) 11.26 35 0
2904937 빨리 실업급여 제발 [2] 프갤러(110.8) 11.26 34 0
2904936 그래서 팩트는 루도그담당(58.233) 11.26 35 0
2904935 ㅆㅇㅆ 보면 존나 불쌍하긴함 ㅋㅋㅋ RyuDOG갤로그로 이동합니다. 11.26 33 0
2904934 아무리 기싸움 걸어봤자 루도그담당(58.233) 11.26 27 0
2904933 하긴 워낙 캥기는게 많은 인생이라 ㅋㅋㅋ RyuDOG갤로그로 이동합니다. 11.26 24 0
2904932 송사고 뭐고 루도그담당(58.233) 11.26 38 4
2904931 쳇트ㅡ Meow갤로그로 이동합니다. 11.26 34 0
2904930 ㅆㅇㅆ 같은애 고소하면 내가 나쁜놈이 되잖아 RyuDOG갤로그로 이동합니다. 11.26 27 0
2904929 에에 고소할거다노 ~ 루도그담당(58.233) 11.26 33 0
2904928 이렇게 티배깅할때 마다 늘 즐거움 RyuDOG갤로그로 이동합니다. 11.26 26 0
2904927 어딜가나 벌레가 꼬여 ㅇㅇ [1] RyuDOG갤로그로 이동합니다. 11.26 39 0
2904926 오늘의 소설, 영화 실마리: 범죄 학교 발명도둑잡기(118.216) 11.26 12 0
2904925 ㅆㅇㅆ = 앱히키 ㅇㅇ(222.108) 11.26 24 0
2904924 Ai 발전 속도가 너무 느림 [4] RyuDOG갤로그로 이동합니다. 11.26 68 0
2904923 linq 다른언어용으로 비슷하게 만든거 [2] 발명도둑잡기(118.216) 11.26 45 0
2904922 브레인스토밍 책사풍후갤로그로 이동합니다. 11.26 19 0
2904920 ❤✨☀⭐⚡☘⛩☃나님 시작합니당☃⛩☘⚡⭐☀✨❤ ♥냥덩이의우웅한하룽♥갤로그로 이동합니다. 11.26 28 0
2904919 이찬혁-SINNY SINNY 발명도둑잡기(118.216) 11.26 23 0
2904918 ㅎㅎAI가 버그도 다 잡아 줌 ㅋㅋ 소스코드 평가 겁나 편하네 나르시갤로그로 이동합니다. 11.26 33 0
2904917 vscode 은근 무겁네 [3] 프갤러(110.8) 11.26 43 0
2904916 프뉴비 질문) tkinter로 gui프로그램 작성중인데 한글이 [5] 프갤러(123.215) 11.26 34 0
2904915 Clair.Event_Loop 구현 완료함. ㅋㅋ 현재 손적화 중 [10] 나르시갤로그로 이동합니다. 11.26 43 0
2904914 내란견 냥덩이 때문에 한국이 핵폭탄 맞게 됐다 [1] 발명도둑잡기(118.216) 11.26 31 1
2904912 ai나와서 존나 좆같긴해. [3] 코딩의신(121.139) 11.26 88 1
2904910 다리꼬는거 같은거로 시비거는거 프로페셔널하지 못함 [1] 프갤러(110.8) 11.26 42 0
2904909 pm이 사장앞에서 다리꼬는거 가능하냐? [9] 헬마스터갤로그로 이동합니다. 11.26 109 0
2904908 벨튀 감시자 만들어봄 [5] 옛살비갤로그로 이동합니다. 11.26 74 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2