Come z – Wikipedia
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.
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.
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.
- ^ Lawrence Clarke, DataMation (artykuł), Fortran. URL skonsultowano się z 10 lipca 2012 r. (Zarchiwizowane przez Oryginał URL 16 lipca 2018 r.) . .
- ^ Richie Hindle, Goto dla Pythona , W Enrian , 1 kwietnia 2004 r. .
- ^ C2: Przyjdź z
- ^ IBM System/360 i System/370 Fortran IV Language, GC28-6515-10, maj 1974
Recent Comments