디시인사이드 갤러리

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

갤러리 본문 영역

Ada의 case when 최적화와 errno → 예외 매핑

나르시갤로그로 이동합니다. 2025.11.26 22:24:12
조회 55 추천 0 댓글 0

LLM 작성글이라 내용 중 틀린 내용이 있기는 한데 귀찮아서 고치지 않았습니다. ㅎㅎ

아마 타 언어 컴파일러도 이럴 것 같습니다.


Ada의 case when 최적화와 errno → 예외 매핑

시스템 프로그래밍을 하다 보면 errno를 받아서 Ada 예외로 변환하는 작업이 필요합니다. Clair 프로젝트에서도 Clair.Error 패키지에 수십 개의 예외와 errno 상수가 정의되어 있죠. 문제는 이걸 변환하는 함수(Raise_From_Errno)를 작성할 때 case when 절이 100~150개쯤 생긴다는 겁니다.

그럼 성능은 어떨까요? 단순 배열 탐색과 비교해보겠습니다.


1. case when 150개일 때

Ada 컴파일러(GNAT 등)는 case 문을 최적화합니다.

  • 값이 연속적(dense) → jump table 생성 → 사실상 정적 배열 인덱싱과 동일한 O(1) 성능
  • 값이 드문드문(sparse) → 비교 체인이나 이진 탐색 트리 생성 → O(log N) 또는 O(N)

errno 값은 1부터 97까지 연속적이므로, Ada 컴파일러는 jump table을 만들어줍니다. 즉, case when 150개라도 성능은 배열 인덱싱과 같은 수준입니다.


2. 정적 배열 + 2진 탐색

직접 (errno, exception) 쌍을 배열에 넣고 이진 탐색을 하면 O(log N)입니다.
N=150이면 log₂(150) ≈ 7번 비교. 성능상 큰 문제는 없지만, case when jump table보다는 느립니다.
장점은 유지보수성: 새 errno 추가 시 배열에만 넣으면 됩니다.


3. Raise_From_Errno 구현 방법

Raise_From_Errno 프로시저는 두 가지 방식으로 구현할 수 있습니다:

  1. 배열 인덱스 방식

    • 에러 코드가 연속적일 경우, 배열 인덱스처럼 직접 접근 가능.
    • Ada 컴파일러가 case when을 jump table로 최적화하므로 사실상 O(1).
  2. 정적 배열 + 이진 탐색 방식

    • 에러 코드가 연속적이지 않거나, 예외 매핑이 드문드문일 경우.
    • (errno, exception) 쌍을 정렬된 배열에 넣고 이진 탐색으로 찾음.
    • O(log N) 성능, 유지보수성은 뛰어남.

4. 결론

  • 성능 최적화가 최우선이면 → case when (jump table, O(1))
  • 유지보수성 자동화가 중요하면 → 정적 배열 + 이진 탐색 (O(log N), 충분히 빠름)
  • Clair 같은 시스템 프로그래밍 라이브러리에서는 자동 생성된 case when이 가장 Ada스럽고, 성능도 최적입니다.

👉 요약: Ada의 case when은 내부적으로 정적 배열 매핑(jump table)로 최적화되므로, errno 매핑에 가장 적합합니다. 다만 연속적이지 않은 경우에는 정적 배열 + 이진 탐색도 좋은 대안이 될 수 있습니다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 이제는 의미 없어진 것 같은 시상식은? 운영자 25/12/01 - -
AD 따뜻한 겨울나기! 방한용품 SALE 운영자 25/11/27 - -
공지 프로그래밍 갤러리 이용 안내 [97] 운영자 20.09.28 48808 65
2906232 음기 충전 오늘의 시: 쿠팡 로케트 발명도둑잡기(118.235) 03:43 13 0
2906230 쿠팡 새벽배송, 밤에만 일하면 음기충전이 안된다 발명도둑잡기(118.235) 03:14 13 0
2906229 피아노 연습하다 답답해서 직접 만든 강아지 컨셉 플로팅 카운터 앱 뭉순갤로그로 이동합니다. 03:13 35 0
2906228 쿠팡이 노동자를 워터라고 부르는 이유 발명도둑잡기(118.235) 03:07 14 0
2906227 "쿠팡 美·유럽서 장사했다면 수조원 배상하고 파산" 발명도둑잡기(118.235) 03:01 10 0
2906224 쿠팡 임원, 정보유출 시점 후 수십억 주식매도…내부자 거래 였나 발명도둑잡기(118.235) 02:42 12 0
2906222 쿠팡 새벽 2시의 비극, '힙'한 런베뮤의 노동 착취 발명도둑잡기(118.235) 02:28 11 0
2906221 오늘의 작사, 소설, 영화 실마리: 쿠팡 디쓰 발명도둑잡기(118.235) 02:19 11 0
2906220 쿠팡 주가 급락…'침묵' 김범석은 지난해 5천억 현금화 발명도둑잡기(118.235) 02:06 8 0
2906219 쿠팡 질타 나선 국회 "김범석, 사과도 않고 어디 갔나?" 발명도둑잡기(118.235) 02:03 11 0
2906218 다들 어떤 생각으로 오픈소스에 기여함? [1] ㅇㅇ갤로그로 이동합니다. 01:54 17 0
2906217 "본인들이 잘못해 놓고" 분통...쿠팡 탈퇴 절차만 무려 6단계 발명도둑잡기(118.235) 01:53 10 0
2906216 [단독] ‘90일 뒤 파기’라더니…쿠팡 수년 전 탈퇴한 고객까지 털렸다 발명도둑잡기(118.235) 01:49 13 0
2906215 [단독] 쿠팡 등록 카드서 300만 원 무단 결제 발명도둑잡기(118.235) 01:43 16 0
2906214 쿠팡, 거래 중소기업 매출액 21% 떼가 발명도둑잡기(118.235) 00:53 14 0
2906209 미국 CIA 신고 최초 공개로 좌파 연예인 입막해버린 유튜버계의 여자 맥 발명도둑잡기(118.235) 00:29 21 0
2906202 [롱 리브 더 킹: 목포 영웅] 1차 예고편 발명도둑잡기(118.235) 12.02 16 0
2906201 옛날에 따먹던년 걸레보지인줄 알았는데 [1] ㅇㅇ(124.48) 12.02 70 0
2906196 내란의 밤, 다들 무엇을 하고 계셨나요 발명도둑잡기(118.235) 12.02 14 0
2906195 슬슬 졸리당.. [7] ♥발라당냥덩♥갤로그로 이동합니다. 12.02 44 0
2906190 힙합 그룹 '마이티마우스', 미군 기지서 뮤직비디오 촬영하다가 체포 발명도둑잡기(118.235) 12.02 11 0
2906188 생기부에 박제 ㅇㅅㅇ [4] 따당갤로그로 이동합니다. 12.02 67 1
2906177 고무백 1년 죽엇다 생각하고 해도 취업힘드냐.. [1] 프갤러(27.239) 12.02 25 0
2906168 대장동 설계자 자백 ㄷㅅㄷ [1] ♥발라당냥덩♥갤로그로 이동합니다. 12.02 48 0
2906167 헬스장 미시 빵댕레깅스 [3] ♥발라당냥덩♥갤로그로 이동합니다. 12.02 74 0
2906165 디씨인싸이드 실명제, GPS 좌표 공개 찬성? [5] 발명도둑잡기(39.7) 12.02 43 0
2906164 https://open.kakao.com/o/gsrkSjeh 프갤러(143.244) 12.02 21 0
2906163 냥덩이 수준 발명도둑잡기(39.7) 12.02 38 0
2906162 FreeBSD 15가 출시되었습니다. [3] 나르시갤로그로 이동합니다. 12.02 39 0
2906161 [단독]쿠팡, 입점업체 상대 ‘최고 18.9%’ 고금리 이자 장사 발명도둑잡기(39.7) 12.02 10 0
2906160 이재명 때문에 인생 망하기 싫으면 빨리 달러 풀매수 ♥발라당냥덩♥갤로그로 이동합니다. 12.02 39 0
2906159 [단독]쿠팡, 4개월 전 ‘고객정보 관리 부실’ 지적받았다 발명도둑잡기(39.7) 12.02 13 0
2906158 [단독]쿠팡 '과로노동' 시스템 여전…배송압박에 클렌징 발명도둑잡기(39.7) 12.02 10 0
2906157 [단독] 쿠팡, '위험성' 인지하고도 '사이버 보험'은 미가입 발명도둑잡기(39.7) 12.02 11 0
2906156 [단독] 쿠팡, 과로사 원인 '클렌징' 폐지? 프레시백 회수 점수표 발명도둑잡기(39.7) 12.02 10 0
2906155 소화되니 뿡야와트림 나오넹 [1] ♥발라당냥덩♥갤로그로 이동합니다. 12.02 35 0
2906154 “비밀번호 안전”하다는 쿠팡…5개월간 털리는지도 몰랐는데 어떻게 믿나 발명도둑잡기(39.7) 12.02 15 0
2906153 aws 왜씀? 프갤러(49.165) 12.02 23 0
2906150 중국인 한국사람 쇠망치로 살해시도 ㄷㅅㄷ [2] ♥발라당냥덩♥갤로그로 이동합니다. 12.02 33 0
2906149 중국간첩 여론조작 계정 민주당에서 팔로우 하고 있었다네 ㄷㅅㄷ [3] ♥발라당냥덩♥갤로그로 이동합니다. 12.02 33 0
2906148 분기계약 따내서 요새는 사장 소리 듣고 산다. 계약 SI지만은. [7] ㅆㅇㅆ(124.216) 12.02 82 0
2906147 냥덩이 발명도둑잡기(39.7) 12.02 42 0
2906146 부흥동인가 달안동인가 넥도리아(223.38) 12.02 41 0
2906145 술 빨고 집 왔는데 [12] 루도그담당(118.235) 12.02 66 0
2906143 춥긴 춥네 ㅇㅅㅇ [1] 류류(118.235) 12.02 32 0
2906142 쿠팡 털리고 매일 불안에 떠는 중 [6] 가연아갤로그로 이동합니다. 12.02 63 0
2906140 GTA VI 한국 스페셜 트레일러 [7] 발명도둑잡기(39.7) 12.02 34 1
2906139 애널은 ㄹㅇ 겨울이넹 ㄷㅅㄷ [4] ♥발라당냥덩♥갤로그로 이동합니다. 12.02 60 0
2906138 흠.. 이번엔 모 아니면 도 작전으로 가볼깡? [1] ♥발라당냥덩♥갤로그로 이동합니다. 12.02 56 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2