~에서 온

COMEFROM

컴퓨터 프로그래밍에서 COMEFROM(또는 COME FROM)은 일부 프로그래밍 언어에서 사용되는 모호한 제어 흐름 구조로, 원래 농담으로 사용된다. COMEFROM의 역이다GOTO코드의 임의적인 지점에서 실행 상태를COMEFROM명세서

국가 이전이 발생하는 코드의 지점은 대개 다음 매개 변수로 주어진다.COMEFROM. 전송이 지정된 전송 지점에서 지시하기 전인지 후인지 여부는 사용되는 언어에 따라 달라진다.사용되는 언어에 따라 여러 개COMEFROMs 동일한 출발 지점을 참조하는 것은 유효하지 않거나, 비결정적일 수 있으며, 어떤 종류의 정의된 우선순위로 실행되거나, 심지어 스레드 인터칼에서 볼 수 있는 병렬 또는 다른 동시 실행을 유도할 수도 있다.[citation needed]

"의 간단한 예.COMEFROM x"문장은 라벨이다. x(물리적으로 해당 근처에 위치할 필요가 없음)COMEFROM)는 "실제 문"의 역할을 한다.코드 실행이 라벨에 도달하면 컨트롤은 다음 문장으로 전달된다.COMEFROM이 또한 조건이 충족되는 경우에만 통제를 통과하는 조건부일 수 있으며 IF 문 내의 GOTO와 유사하다.GOTO와의 주요 차이점은 GOTO는 코드의 로컬 구조에만 의존하는 반면, COMEO는 글로벌 구조에 의존한다는 것이다. GOTO는 GOTO 문장으로 라인에 도달했을 때 제어권을 이전하는 반면, COMEOFROM은 전체 프로그램 또는 스코프를 스캔하여 해당 라인에 대한 COMEFROM 문장이 적용범위에 있는지 여부를 확인해야 하며, 그 다음 검증해야 한다.조건이 맞는지 여부를 확인하는 것.이것의 효과는 주로 디버깅(및 프로그램의 제어 흐름을 이해하는 것)을 매우 어렵게 만드는 것이다. 문제의 라인이나 라벨 근처에는 통제가 이상하게 프로그램의 다른 지점으로 점프할 것이라는 표시가 없기 때문이다. – 어떤 COMEFROM 문장이 해당 라인을 참조하는지 또는 l을 참조하는지 확인하기 위해 전체 프로그램을 연구해야 한다.아벨의

디버거 후크는 유머러스한 파이톤 goto 모듈에서와 같이 COMEFROM 문을 구현하는 데 사용될 수 있다.[1] 아래를 참조하십시오.이는 리눅스 커널 구성 옵션 CONFIG_JUMP_LABEL에서 사용하는 gcc 기능 "asm goto"로도 구현할 수 있다.no-op에는 위치가 저장되어 있고, 실행 가능한 조각으로 대체되며, 마지막에는 no-op 이후 지침으로 되돌아간다.

역사

COMEFROM 처음에 'CMFRM'으로 표시된 농담 어셈블리 언어 지침 목록에서 확인되었다.그것은 1973년 R. Lawrence ClarkDatamisation 기사에서 Edsger Dijkstra의 "Go To Statement Substitute Substitute Substitute Substitute Substitute"에 대한 응답으로 쓰여진 것으로 상세하게 설명되었다.[2]COMEFROM은 결국 난해한 프로그래밍 언어의 C-INERCAL 변종에서 구현되었다.INRCAL은 더욱 모호한 '계산'과 함께COMEFROM포틀랜드의 '할당'에[3] 대한 제안도 있었다.COME FROM' 그리고 a 'DONT' 키워드(기존을 보완하기 위해)'DO'루프'.

2004년 4월 1일, 리치 힌들(Richie Hindle)은 두 가지 모두에 대한 구현을 발표했다.GOTO그리고COMEFROMPython 프로그래밍 언어.[1]만우절에 공개되고 심각한 사용을 위한 것이 아님에도 불구하고, 구문은 유효하고 실행은 충분히 효과가 있다.

실용화

다음은 가상의 BASIC 사투리로 「로 하는 프로그램의 예.COMEFROM" 대신 "GOTO".

10 ~에서 온 40 20 입력 "네 이름이 뭐니?"; A$ 30 프린트 "여보세요, "; A$ 40  

이 프로그램(하이포테이션을 통해)은 유저에게 이름을 묻고, 같은 이름으로 인사를 한 후, 계속하여 계속하는 방식으로 작동한다.지침 "REM" 온라인 40은 간단히 NOP(이 경우, REMark 또는 코멘트) — "COMEFROM"10호선의 문장은 그 내용에 관계없이 실행이 40호선에 도달하면 분기가 다시 그 선으로 돌아가게 한다.

Python에서 농담과 함께 완전히 실행할 수 있는 예goto설치된 모듈(디버거 후크를 사용하여 프로그램 실행을 제어)은 다음과 같다.

로부터 에 가다 수입하다 ~에서 온, 라벨을 붙이다  ~에서 온 .되풀이하여 말하다 이름을 붙이다 = 날것_날것('이름이 뭐야?') 만일 이름을 붙이다:     인쇄하다("여보세요", 이름을 붙이다)     라벨을 붙이다 .되풀이하여 말하다 인쇄하다("잘 가!") 

이것은 인터칼 COME FROM 성명의 루비에 구현된 것이다.

$come_from_lights = {}  반항하다 라벨을 붙이다(l)   만일 $come_from_lights[l]     $come_from_lights[l].부르다   종지부를 찍다 종지부를 찍다  반항하다 에서 오다(l)   콜록 하다  막다      $come_from_lights[l] = 막다   종지부를 찍다 종지부를 찍다 

OS/360 Fortran G

OS/360 Fortran G 컴파일러에는 디버그 패킷 기능이 있다.그것의 "AT" 문장은 제어 흐름을 디버그 블록으로 넘겨준다는 점에서 COMEFROM과 유사하다.일반적으로 중단점은 비슷하다.[4]

  • 예 1: SOLON, GFAR, EWEL의 값은 문장 10의 완성 시와 같이 검토한다.AT 성명은 성명서 11을 나타낸다.
      정수솔론, GFAR, 이웰          .          .          . 10    솔론 = GFAR * SQRT(플로트(이웰)) 11    IF (솔론) 40, 50, 60          .          .          .       디버그 구성 단위(3)       AT 11       디스플레이 GFAR, 솔론, 이웰        
  • 예 2: 모든 스톡 값은 문 35와 마주쳤을 때 표시된다.
      치수스톡(1000),아웃(1000)          .          .          .       DO30 I=1, 1000 25    스톡(I)=스톡(I) - 아웃(I) 30    계속 35    A = B + C          .          .          .       디버그 구성 단위(3)       AT 35       디스플레이 스톡        
  • 예 3: 추적이 문 10, 문 20에서 시작되고, 추적이 루프를 실행하는 동안 중지되고, 루프가 실행된 후에 재개된다.문 30이 실행되기 직전에 추적이 중지된다.
10    A = 1.5 12    L = 1 15    B = A + 1.5 20    DO22 I = 1,5          .          .          . 22    계속 25    C = B + 3.16 30    D = C/2       스톱          .          .          .       디버그 구성 단위(3), 트레이스 C 디버그 패킷 번호 1       AT 10       트레이스 켜기 C 디버그 패킷 번호 2       AT 20       트레이스 OFF       DO35 I = 1,3          .          .          . 35    계속       트레이스 켜기 C 디버그 패킷 번호 3       AT 30       트레이스 OFF        

참고 항목

COMEFROM과 유사한 아이디어가 포함된 심각한 프로그래밍 경쟁:

참조

  1. ^ a b Hindle, Richie (1 April 2004), goto for Python, Entrian.
  2. ^ Clarke, Lawrence, "We don't know where to GOTO if we don't know where we've COME FROM. This linguistic innovation lives up to all expectations.", Datamation (article), archived from the original on 2018-07-16, retrieved 2004-09-24.
  3. ^ Modell, Howard; Slater, William (April 1978). "Structured programming considered harmful". ACM SIGPLAN Notices. 13 (4): 76–79. doi:10.1145/953411.953418. Retrieved 18 July 2014.
  4. ^ IBM System/360 및 System/370 Fortran IV Language, GC28-6515-10, 1974년 5월
  5. ^ F. X. 리드, COMEFROM 성명의 공식 의미론에서.FASS Factions, 2006-1호, 18-20페이지, 2006년 3월.

외부 링크