매직 (프로그래밍)

Magic (programming)

컴퓨터 프로그래밍의 맥락에서 마술추상화의 비공식적인 용어다; 그것은 단순한 인터페이스를 나타내기 위해 복잡성을 숨기면서 복잡한 작업을 처리하는 코드를 묘사하는 데 사용된다.이 용어는 다소 가 잘 돌지 않으며, 종종 나쁜 암시를 내포하고 있어 코드의 진정한 행동이 즉각적으로 드러나지 않음을 암시한다.예를 들어 다형 타이핑폐쇄 메커니즘은 종종 "마법"이라고 불린다.이 용어는 흑마술과 심오한 마술(변형 참조)이 의도적으로 숨겨져 있거나 극히 이해하기 어려운 아르카인 기법을 기술하는 것과 대조적으로, 적어도 원칙적으로 숨겨진 복잡성은 이해할 수 있다는 것을 암시한다.그러나 이 용어는 또한 영구적으로 적용될 수 있어 코드에 대한 "촉"을 암시한다.그러한 추상적 개념의 작용은 "자동적으로" 행해지는 것으로 설명되는데, "자동적으로" 그리고 "마술적으로" 행해지는 이다.

참조 불투명도

"매직"이란 명확하게 제공되지 않는 데이터를 바탕으로 그들이 해서는 안 되는 다른 모듈, 메모리 위치 또는 글로벌 변수에 접근하여 계산을 하는 절차를 말한다(즉, 참조적으로 투명하지 않다).가장 최근의 소프트웨어 아키텍처 모델에 따르면, 구조화된 프로그래밍을 사용할 때에도, 대개는 동일한 주장이 그것에 전달될 마다 각 기능이 동일한 방식으로 동작하게 하여 기능 프로그래밍의 기본 원칙 중 하나를 따르도록 하는 것이 선호된다.함수가 이 규칙을 어길 때, 그것은 종종 "마법"을 포함하고 있다고 한다.

음의 마법의 단순화된 는 PHP에서 다음과 같은 코드다.

기능을 발휘하다 마술() {     전지구적 약간의 변이성;      메아리치다 약간의 변이성; }  약간의 변이성 = 진실의;  마술(); 

위의 코드는 명확하고 유지관리가 가능한 반면, 큰 프로젝트에서 보면 그 기능이 어디에 있는지 이해하기 어려운 경우가 많다.magic()그 가치를 얻는다.다음 개념을 사용하여 코드를 작성하는 것이 바람직하다.

기능을 발휘하다 노매직($mybariable) {     메아리치다 $mybariable; }  약간의 변이성 = 진실의;  노매직(약간의 변이성); 

비정형성

어떤 SV [scalar value]도 마법적일 수 있다. 즉, 일반 SV에는 없는 특별한 특징이 있다.

Larry Wall, perlguts manual page,[1] Perl 5

마법이나 마법에 대한 이러한 정의는 데이터 유형, 코드 조각, 키워드 또는 다른 동일한 개체에 의해 공유되지 않는 속성을 가진 컴퓨터 주소로 확장될 수 있다.마법의 성질은 기록될 수도 있고 기록되지 않을 수도 있다.

  • ISO C에서 파일 핸들(유형)FILE)는 그들의 주소가[2] 마법일 수 있으므로 안전하게 복사할 수 없다.즉, 런타임 환경은 원본 파일 핸들을 하드 코딩된 주소 범위에 배치하고 사용자가 작성한 다른 주소에 파일 핸들 동작을 제공하지 않을 수 있다.따라서 표준 라이브러리 루틴은 파일 핸들 유형으로 포인터를 허용한다.FILE *, 대신.
  • Perl 5에서 성명은while(<file_handle>)파일에서 읽은 줄을 암묵적으로 할당하다<file_handle>변수에 맞추어$_, 그리고 적용defined()문자열을 성공적으로 읽을 수 있도록 표현식에 대한 기능을 수행함, 심지어"0"또는문자열, true로 평가하여while()반복한다. 이런 일은 일어나지 않는다.<file_handle>다른 곳, 또는 다른 곳으로while()다른 [3]통제 표현으로 말이야
  • 에뮬레이터, 특히 개발 중인 에뮬레이터에서 에뮬레이터의 시스템 호출 지점은 마법일 수 있다. 에뮬레이터가 호출될 때 에뮬레이터는 편리함, 속도 또는 물리적 하드웨어에 대한 접근을 위해 네이티브 코드를 실행하고, 에뮬레이트된 CPU와 메모리를 원래 코드를 실행한 것처럼 설정할 수 있다.
    • 예를 들어,CALLBBC BASIC V의 성명은 ANTER MOS의 시스템 호출 주소를 마법처럼 취급한다; 그 주소에서 ARM 코드로 분기하려고 시도하는 대신, 그것은 시스템 호출과 동등한 RISC OS에서 소프트웨어 인터럽트를 발생시킨다.[4][non-primary source needed]그 효과는 조립 언어를 포함하지 않는 8비트 BASIC 프로그램이 수정 없이 실행될 수 있도록 Acorn MOS를 충분히 에뮬레이트하는 것이다.
  • 또한 BBC BASIC에서는 숫자 변수만이 아니다.@%인쇄 형식 제어, ANSI 직접 할당 허용인쇄F 형식 문자열, 일반적으로 유형 불일치 오류.[4]
  • 자바스크립트에서, 피연산자가 신고되지 않은 식별자일 때 운용자의 평가는 성공하며, 일반적으로는 다음과 같은 결과를 초래한다.ReferenceError.
  • 코드에 영향을 미치는 코멘트는 모두 마술이다.
  • 메모리 매핑된 I/O 주소와 휘발성 변수 역시 일반적으로 적용되는 용어는 아니지만 이런 의미에서 마법과도 같다.

변형

딥마술은 널리 알려지지 않은 기법을 말하며, 의도적으로 비밀에 부칠 수도 있다.그러한 기술의 수는 최근 몇 년 동안 거의 틀림없이 감소해 왔으며,[when?] 특히 무명을 통한 보안이 대중의 정밀 조사를 허용하고 종종 장려하는 설계를 통해 보안을 위해 점점 더 포기되어온 암호학 분야에서 더욱 그러하다.전문용어 파일은 난해한 이론적 지식을 바탕으로 한 코드를 일컫는 심오한 마법과 효과가 있는 것처럼 보이지만 이론적 설명이 부족한 기술을 바탕으로 한 코드를 가리키는 흑마술을 구분한다[5].그것은 또한 특정 하드웨어 또는 소프트웨어의 모호하거나 문서화되지 않은 복잡성에 기초한 코드를 의미한다.

참고 항목

참조

  1. ^ "perlguts – perldoc.perl.org". 5 October 2014. Retrieved 18 February 2015.
  2. ^ Banahan, Mike; Brady, Declan; Doran, Mark (1991). "9.10.3 The stdio.h header file". The C book: Featuring the ANSI C standard. The Instruction Set (2nd ed.). Wokingham, England: Addison-Wesley Publishers. p. 234. ISBN 0-201-54433-4. It is not safe to copy these objects within the program; sometimes their addresses may be 'magic'.
  3. ^ "perlop – perldoc.perl.org". 7 September 2010. Retrieved 17 February 2011.
  4. ^ a b "27. Keywords" (PDF). BBC BASIC Reference Manual (1st ed.). Cambridge, England: Acorn Computers. October 1992. pp. 229, 349. ISBN 1-85250-103-0. Retrieved 9 May 2007.[데드링크]
  5. ^ "Deep Magic". Jargon File.