디시인사이드 갤러리

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

갤러리 본문 영역

러스트도 울고 간, Ada 6.8 런타임 검사 억제

나르시갤로그로 이동합니다. 2025.09.20 20:31:29
조회 67 추천 0 댓글 0

https://nimfsoft.art/ko/books/

6.8 런타임 검사 억제

이 절에서는 6.2.1항에서 설명한 다양한 런타임 검사들을 pragma suppress를 통해 어떻게 비활성화하는지 알아봅니다.

6.8.1 pragma suppressunsuppress

pragma suppress는 컴파일러에 특정 런타임 검사를 생략하도록 지시하는 프라그마입니다. 반대로 pragma unsuppress는 이전에 부여된 검사 생략을 철회합니다.

구문

pragma suppresspragma unsuppress는 다음과 같은 형태로 사용하며, <검사 이름>에는 억제하거나 복원할 검사의 종류를 지정합니다.

pragma suppress (<검사 이름>);
pragma unsuppress (<검사 이름>);

<검사 이름>에는 index_check와 같이 6.2.1항에서 다룬 개별 런타임 검사 이름을 사용하거나, all_checks라는 식별자를 사용할 수 있습니다. Ada 레퍼런스 매뉴얼에 따르면 all_checks는 단언(assertion) 관련 검사를 제외한 모든 런타임 검사의 합집합을 나타냅니다.

사용 예시

먼저 pragma suppress가 없는 경우의 동작을 살펴보겠습니다. 아래 코드는 배열의 범위를 벗어난 인덱스 11에 접근하므로, index_check가 실패하여 Constraint_Error 예외를 발생시킵니다.

procedure default_behavior is
  my_array : array (1 .. 10) of Integer;
begin
  for i in 1 .. 11 loop
    my_array(i) := i; -- i가 11일 때 예외 발생
  end loop;
end default_behavior;

이제 pragma suppress를 사용하여 이 동작을 변경해 보겠습니다. 다음 예시에서 pragma suppress는 선언부에 위치하며 선언된 블록(declare ... end;) 내에서 검사를 억제합니다. 그래서 더 이상 예외가 발생하지 않고, 대신 오류 상태(erroneous)로 실행이 계속됩니다.

procedure scoped_suppress_example is
  my_array : array (1 .. 10) of Integer;
begin
  -- 이 바깥 블록에서는 index_check가 활성화된 상태입니다.
  declare
    -- 이 내부 블록의 선언부에서 index_check를 억제합니다.
    pragma suppress (index_check);
  begin
    -- 이 루프는 index_check가 억제되어 예외를 발생시키지 않습니다.
    -- 대신, 배열 경계를 넘어 메모리에 접근하는 오류 상태(erroneous)로 실행이 계속됩니다.
    for i in 1 .. 11 loop
      my_array(i) := i;
    end loop;
  end; -- 이 지점에서 `pragma suppress (index_check)`의 효력이 자동으로 사라집니다.

  -- 내부 블록이 종료되어 index_check는 다시 활성화되었습니다.
  -- 따라서 아래 코드는 Constraint_Error 예외를 발생시킵니다.
  my_array(0) := 0;

end scoped_suppress_example;

위 예시는 pragma unsuppress를 직접 사용하지 않더라도, pragma suppress가 블록의 범위를 벗어나면 그 효력이 자동으로 사라져 검사가 다시 활성화됨을 보여줍니다.

배치 규칙 및 적용 범위

pragma suppresspragma unsuppress검사 프라그마(checking pragma)로, 코드 내 특정 위치에만 배치될 수 있으며 그 위치에 따라 효력이 미치는 범위가 결정됩니다.

허용되는 위치는 다음과 같습니다:

  • 선언부 (declarative part) 내부
  • 패키지 명세 (package specification) 내부
  • 설정 프라그마 (configuration pragma)

프라그마의 효력 범위는 프라그마의 위치에 따라 다음과 같이 결정됩니다.

  • 서브프로그램(procedure, function)이나 declare 블록의 선언부에 프라그마가 위치할 경우, 프라그마가 있는 위치부터 해당 서브프로그램이나 블록이 끝나는 end 지점까지 효력이 있습니다.
  • 패키지 명세(.ads 파일) 내부에 프라그마가 위치할 경우, 프라그마가 있는 위치부터 해당 패키지 명세가 끝나는 end 지점까지 효력이 있습니다. 이 효력은 패키지 구현부(.adb 파일)에는 자동으로 적용되지 않습니다.
  • 설정 프라그마로 지정될 경우, 해당 프라그마가 적용되는 전체 컴파일 단위(compilation unit)에 효력을 미칩니다.

프라그마의 효력의 우선순위

프라그마는 중복 사용될 수 있습니다. 코드의 특정 지점에서 어떤 검사가 활성화 상태인지는, 해당 지점을 감싸는 여러 범위들 중 가장 안쪽 범위에 있는 프라그마가 우선합니다.

예를 들어, 외부 범위에서 pragma suppress (index_check)가 있더라도 내부 범위에 pragma unsuppress (index_check)가 있으면, 내부 범위 안에서는 pragma unsuppress (index_check)의 효과가 나타납니다. 또한, 외부 범위의 pragma suppress (index_check)와 내부 범위의 pragma suppress (access_check)는 서로 다른 검사에 대한 프라그마이므로, 내부 범위에서는 두 검사가 모두 억제되는 효과가 나타납니다. 이렇게 내부 범위에서 적용된 프라그마의 효력은 해당 범위가 끝나면 사라지고, 외부 범위의 프라그마 효력만 남게 됩니다.

6.8.2 억제의 효과와 위험성

pragma suppress는 특정 런타임 검사를 생략하도록 컴파일러에 지시하여 프로그램의 실행 효율을 높이는 데 활용될 수 있습니다. Ada 레퍼런스 매뉴얼은 억제된 검사에 대해 컴파일러가 관련 실행 코드를 가능한 한 최소화할 것을 권장합니다.

억제된 검사가 감지해야 할 오류 상황이 발생하면 프로그램은 오류 상태(erroneous)가 됩니다. 이때 컴파일러는 예외를 발생시키지 않고 해당 연산이 미정의된 결과(undefined result)를 반환하도록 할 수 있으며, 이 값은 데이터 손상이나 논리적 오류의 원인이 될 수 있습니다. 단, 컴파일러는 미정의된 결과가 프로그램의 외부 상호작용에 영향을 줄 경우에만 예외를 발생시킬 의무가 있으므로, 외부 영향이 없다면 프로그램은 예외 발생 없이 실행이 계속될 수 있습니다.

pragma suppress는 검사 제거를 보장하지 않습니다. 이는 컴파일러에 검사 생략을 허용하는 것이며, 강제하는 것은 아닙니다. 따라서 이 지시문은 효율성 향상 목적으로만 유용합니다.


ㅆㅇㅆ은 나에 대한 비방, 모욕 및 명예훼손을 중단하라.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 센터해도 될 것 같이 비주얼 물오른 아이돌 멤버는? 운영자 25/09/22 - -
이슈 ‘용원게이’를 넘어 배우 장용원으로 운영자 25/09/23 - -
2891114 슬슬 하품나넹 ♥냥덩이♥갤로그로 이동합니다. 09.22 61 0
2891113 참 인생 뜻대로 안되네... 넥도리아(220.74) 09.22 29 0
2891110 비용받고 언패킹해주는곳 없음? 프갤러(112.171) 09.22 37 0
2891109 서비스에서 si로 이직 고민이다 [4] 프갤러(218.235) 09.22 84 0
2891108 꿀팁)친중매국 반미극좌 CIA에 신고하고 포상금받자~(한국어로) [1] ♥냥덩이♥갤로그로 이동합니다. 09.22 59 1
2891106 "테일러 스위프트, 남편에게 복종하라"…찰리 커크가 남긴 말 발명도둑잡기(118.235) 09.22 41 0
2891103 한국은 문학이라고도 뭐한게 그냥 다 극좌선전용 폐기물밖에 없음 ♥냥덩이♥갤로그로 이동합니다. 09.22 56 0
2891102 일본소설은 ㄹㅇ 문체 자체가 유려함 ♥냥덩이♥갤로그로 이동합니다. 09.22 52 0
2891100 이시이 시로 만행 폭로…미군과 731부대 거래의 핵심인물 발명도둑잡기(118.235) 09.22 38 1
2891098 일본문학수준 굉장히 높당 ♥냥덩이♥갤로그로 이동합니다. 09.22 56 0
2891097 냥덩이와 731 발명도둑잡기(118.235) 09.22 41 0
2891095 오피란 무엇인가?? ㅋㅋㅋㅋㅋㅋ ㅇㅇ(39.7) 09.22 46 0
2891093 주한미군 세균전실험실 뿌리 ‘생체실험 731부대 발명도둑잡기(118.235) 09.22 40 0
2891091 한번에 장거리 뛰뛰보다 매일 10km 뛰뛰체력을 만들어야 ♥냥덩이♥갤로그로 이동합니다. 09.22 33 0
2891088 냥덩먹방❤+ ♥냥덩이♥갤로그로 이동합니다. 09.22 34 0
2891086 이 아이들이 류류 같은 아동성범죄자 페도한테 걸렸다면.. ♥냥덩이♥갤로그로 이동합니다. 09.22 36 0
2891083 라이브러리 maven에서 버전업 올라왔는데 프갤러(222.108) 09.22 31 0
2891080 저거 저 TODO앱 dist 저거 하는거봐서 걍 WPF앱같은데 ㅆㅇㅆ(124.216) 09.22 43 0
2891078 나는 길에 쓰레기 안 버린지 몇년 된 듯 [1] 발명도둑잡기(118.235) 09.22 35 1
2891077 빠르면 9월말 늦어도 10월초 ♥냥덩이♥갤로그로 이동합니다. 09.22 45 0
2891073 731부대 전범들 근황 발명도둑잡기(118.235) 09.22 66 1
2891072 이제 길에 쓰레기 안버려야지 야옹아저씨갤로그로 이동합니다. 09.22 51 1
2891071 얘는 어떻게 해야 차단이 가능할까 나르시갤로그로 이동합니다. 09.22 47 0
2891070 아이피 며칠동한 하루씩 계속 차단됐다 발명도둑잡기(118.235) 09.22 30 0
2891068 흠... 오랜만에 바카라가 생각나는구만... 거리를 좀 걸어야겠어... ㅇㅇ(223.39) 09.22 32 0
2891067 힐링❤+ ♥냥덩이♥갤로그로 이동합니다. 09.22 34 0
2891066 귀염❤+ ♥냥덩이♥갤로그로 이동합니다. 09.22 25 0
2891065 모짜르트 피아노 소나타 k.448 좋지 나르시갤로그로 이동합니다. 09.22 34 0
2891064 애널의달성 3/2/// ♥냥덩이♥갤로그로 이동합니다. 09.22 30 0
2891063 러빨러의 고백) 러스트 쓰면 프밍이 재미없습니다 나르시갤로그로 이동합니다. 09.22 35 0
2891062 139,ㅆㅇㅆ,러빨러 특 나르시갤로그로 이동합니다. 09.22 60 0
2891061 freebsd 5년 쓴 소감 ㅎㅎ [2] 나르시갤로그로 이동합니다. 09.22 60 0
2891060 개발용으로 메모리 32기가 정도면 충분하지 ㅎㅎ 나르시갤로그로 이동합니다. 09.22 47 0
2891059 꿀팁)친중매국 반미극좌 CIA에 신고하고 포상금받자~(한국어로) ♥냥덩이♥갤로그로 이동합니다. 09.22 39 0
2891058 커크 암살 신호탄으로 본격화하는 미국식 파시즘 발명도둑잡기(118.235) 09.22 31 0
2891057 기부하라는 말 하지 마세요. 짜증나니까. 넥도리아(220.74) 09.22 31 0
2891055 연봉 깎고 이직해본 사람 있나? [1] 프갤러(172.224) 09.22 73 0
2891054 Z-a 예약 취소했습니다. 넥도리아(220.74) 09.22 30 0
2891053 ㅂㅅ 냥덩아 종이 나침판 화약 인쇄술 중국이 개발했는데 왜 쓰냐 발명도둑잡기(118.235) 09.22 35 0
2891051 짱깨,카레 새끼들 미국에서 쫓아내는게 맞지 ㅇㅅㅇ [2] ♥냥덩이♥갤로그로 이동합니다. 09.22 52 0
2891049 전산실로 이직했다 [1] 프갤러(118.216) 09.22 62 0
2891048 아 시밤 오늘 두시간 동안 산책하며 찍은거 한순간에 날렸다..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09.22 36 0
2891044 돌대가리 냥덩이 오늘도 가짜뉴스 한 건 했네 발명도둑잡기(39.7) 09.22 37 1
2891043 꿀팁)친중매국 반미극좌 CIA에 신고하고 포상금받자~(한국어로) ♥냥덩이♥갤로그로 이동합니다. 09.22 37 0
2891042 강아지들 이 사진 어때보임? [3] 메쿠이료갤로그로 이동합니다. 09.22 57 0
2891035 뀨❤ ♥냥덩이♥갤로그로 이동합니다. 09.22 41 0
2891033 늙고 역겨운 극좌 영포티 ♥냥덩이♥갤로그로 이동합니다. 09.22 40 0
2891032 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 09.22 36 0
2891031 백종원 보니까 생각나네. 프갤러(121.139) 09.22 68 1
2891029 어차피 대부분 쉐이더는 권장 문법이라는게 있어서 쓰는 문법이 비슷해 [2] ㅆㅇㅆ(124.216) 09.22 82 0
뉴스 송혜교와 함께한 세련된 우아함, 미샤 2025 WINTER COLLECTION 공개 디시트렌드 09.25
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2