Come z – Wikipedia

before-content-x4

W językach programowania, POCHODZIĆ Z (O POCHODZIĆ Z ) to ciemna struktura sterowania używana w niektórych językach programowania, pierwotnie zaprojektowana jako żart.

after-content-x4

POCHODZIĆ Z Przeciwieństwo IŚĆ DO ponieważ może nabyć stan wykonania z dowolnego punktu kodu w kierunku instrukcji POCHODZIĆ Z . Punkt kodu, z którego przesyłany jest stan aktywny, był zwykle przekazywany jako parametr POCHODZIĆ Z . Fakt, że przeniesienie odbywa się przed lub po wykształceniu wskazanym do punktu pochodzenia, zależy od używanego języka. Zawsze zależne od języka, możliwości zgłoszenia większej liczby instrukcji POCHODZIĆ Z Przy tym samym pochodzeniu w kodzie może być nieprawidłowe, nie bądź deterministyczny, przywołać różne punkty kodu sekwencji lub uruchom równoległe procesy lub konkurent.

Prosty przykład edukacji ” Przyjdź z x „Zapewnia użycie etykiety, umieszczonej w jednym punkcie kodu innego niż względny POCHODZIĆ Z , który działa jak „pułapka”. Gdy wykonywanie kodu dotrze do etykiety, wykonanie jest przenoszone do edukacji po POCHODZIĆ Z . Głównym efektem jest debugowanie (i niezwykle trudna kompresja przepływu oprogramowania, biorąc pod uwagę, że w pobliżu etykiety nie ma żadnych wskazówek, że wykonanie w tajemniczy sposób skakać z innej części programu.

POCHODZIĆ Z Początkowo było to widoczne na liście żartów w różnych instrukcjach montażu (takich jak „CMFRM”). Został przeanalizowany w artykule opublikowanym na temat danych przez R. Lawrence Clark w 1973 r., [Pierwszy] Napisane w odpowiedzi na list Edsgera Dijkstry Przejdź do oświadczenia uważanego za szkodliwe . Jak został zaimplementowany w wariancie interkalutowym interkalnego języka programowania ezoterycznego wraz z najbardziej tajemniczym ‘ POCHODZIĆ Z ‘.

W dniu 1 kwietnia 2004 r. Richie Hindle opublikował wdrożenie instrukcji IŚĆ DO To jest POCHODZIĆ Z przez Python. [2] Chociaż został rozpowszechniony jako kwietnia i nie jest przeznaczony do realnego użytku, składnia jest poprawna, a implementacja jest całkowicie funkcjonalna.

Aczkolwiek POCHODZIĆ Z Jest to składniowe i semantycznie prawidłowe polecenie i potencjalnie może wymienić IŚĆ DO W niektórych programach o wiele trudniej jest zarządzać nim w fazie projektowania i rozwoju w języku programowania. Najbardziej powszechne użycie konstrukcji podobnych POCHODZIĆ Z Jest to ustawienie punktu przerwania podczas fazy debiutanckiej. Wdrożenie Fortrana przewidziano edukację POCHODZIĆ Z , z nazwą ” NA „Jako pomoc debugowania, z oczywistymi powiadomieniami, które doradzały jego wykorzystanie w kodzie produkcyjnym. Ponadto wiele nowoczesnych procesorów ma obsługę sprzętu dla punktów przerwania.

Niektóre elementy programowania zorientowane na aspekty zostały porównane z instrukcjami POCHODZIĆ Z . [3]

W kompilatorach korzystających z SSA węzeł phi jest zasadniczo podobny do polecenia POCHODZIĆ Z . Lista, z której podstawowe blokuje bieżący blok podstawowy, można było osiągnąć i powiązaną wartość do tego do zrobienia.

after-content-x4

Przykłady [[[ zmiana |. Modifica Wikitesto ]

Poniższy kod jest przykładem programu w hipotetycznym podstawowym dialekcie z użyciem ” POCHODZIĆ Z ” w miejscu ” IŚĆ DO “.

dziesięć  POCHODZIĆ Z  40  20  WEJŚCIE  "JAK MASZ NA IMIĘ? " ;  A $  30  WYDRUKOWAĆ  "CZEŚĆ, " ;  A $  40  Rem  

Program hipotetycznie wymaga użytkownika jego imienia, a następnie wita go i powtarza operację na czas nieokreślony. Edukacja ” Rem „W wierszu 40 jest po prostu poleceniem typu NOP – edukacja” POCHODZIĆ Z „W wierszu 10 przywołuje wykonanie tej linii po osiągnięciu linii 40, niezależnie od jej treści.

Zabawny przykład wykonany w Pythonie z modułem/żartem iść do Zainstalowany (który używa debugera do sprawdzenia wykonania programu) byłby następujący:

z  iść do  import  pochodzić z W  etykieta  pochodzić z  . powtarzać  nazwa  =  raw_input ( 'jak masz na imię? ' )  Jeśli  nazwa :  wydrukować  "Cześć" W nazwa  etykieta  . powtarzać  wydrukować  "Do widzenia!"  

Jest to wdrożenie w Ruby Education, jak z interakcji.

$ come_from_labels  =  {}  def  etykieta ( L )  Jeśli  $ come_from_labels [[[ L ]  $ come_from_labels [[[ L ]. dzwonić  koniec  koniec  def  pochodzić z ( L )  Callcc  Do  |. blok |.  $ come_from_labels [[[ L ]  =  blok  koniec  koniec  

Niektóre przykład debiutu kompilatora Fortran OS/360: [4]

Przykład  Pierwszy :   LICZBA CAŁKOWITA Solon W  GFAR W  Ewell   .   .   .  dziesięć  Solon  =  GFAR  *  Sqrt ( PLATFORMA ( Ewell ))  11  JEŚLI  ( Solon )  40 W  50 W  60           .
         .
         .
      DEBUG UNIT(3)
      AT 11
      DISPLAY GFAR, SOLON, EWELL
      END

Example 2:

      DIMENSION STOCK(1000),OUT(1000)
         .
         .
         .
      DO 30 I=1, 1000
25    STOCK(I)=STOCK(I) - OUT(I)
30    CONTINUE
35    A = B + C
         .
         .
         .
      DEBUG UNIT(3)
      AT 35
      DISPLAY STOCK
      END

Example 3:

10    A = 1.5
12    L = 1
15    B = A + 1.5
20    DO 22 I = 1,5
         .
         .
         .
22    CONTINUE
25    C = B + 3.16
30    D = C/2
      STOP
         .
         .
         .
      DEBUG UNIT(3), TRACE
C     DEBUG PACKET NUMBER 1
      AT 10
      TRACE ON
C     DEBUG PACKET NUMBER 2
      AT 20
      TRACE OFF
      DO 35 I = 1,3
         .
         .
         .
35    CONTINUE
      TRACE ON
C     DEBUG PACKET NUMBER 3
      AT 30
      TRACE OFF
      END

W przykładzie 1 wartości Solona, ​​GFAR i Ewella są badane po całkowitej edukacji 10. Edukacja odnosi się do wiersza 11.

W przykładzie 2 wszystkie wartości zapasów są wyświetlane po wykonaniu wiersza 35.

W przykładzie 3 śledzenie jest wykonywane od rzędu 10 do wiersza 20. Śledzenie jest przerywane podczas wykonywania pętli i następnie reaktywowane. Śledzenie jest ostatecznie przerwane podczas wykonywania edukacji w Riga 30.

DSP SHARC Computer wspiera edukację RÓB DOPÓKI , zaprojektowany do wdrożenia cykli typu DO, ale które są zasadniczo instrukcjami POCHODZIĆ Z . Przykład:

LCNTR = 42;
    Wykonaj x aż do LCE; / * Przyjdź z x, chyba że licznik pętli wynosi zero */
    F12 = f0*f4, f8 = f8+f12, f0 = dm (i0, m3), f4 = pm (i8, m9);
    Jeśli NZ DM (I2, M2) = F12;
    Jeśli ZF DM (i2, M2) = f1;
X: R2 = R3 + 76; / * Etykieta „x” nie istnieje w kodzie maszyny */ 

Należy zauważyć, że warunek końca pętli, wskazany tutaj jako LCE (Licznik pętli wygasł), można ustawić na inne wartości, w tym true lub zawsze fałszywe. Z zawsze prawdziwym stanem edukacja typu jest realizowana w praktyce POCHODZIĆ Z . Sprzęt obsługuje do sześciu POCHODZIĆ Z aktywny jednocześnie.

  1. ^ Lawrence Clarke, DataMation (artykuł), Fortran. URL skonsultowano się z 10 lipca 2012 r. (Zarchiwizowane przez Oryginał URL 16 lipca 2018 r.) . .
  2. ^ Richie Hindle, Goto dla Pythona , W Enrian , 1 kwietnia 2004 r. .
  3. ^ C2: Przyjdź z
  4. ^ IBM System/360 i System/370 Fortran IV Language, GC28-6515-10, maj 1974

after-content-x4