2009-11-29 15 views
12

Qual è il motivo storico per cui lo last viene chiamato in Perl anziché break come viene chiamato in C?Perché 'last' è chiamato 'last' in Perl?

Il design di Perl è stato influenzato da C (oltre a awk, sed e sh - vedere la pagina man in basso), quindi ci deve essere stato qualche ragionamento dietro non andare con la familiare denominazione in stile C di break/last.

Un po 'di storia del Perl 1.000 (rilasciato 18 Dicembre 1987) pagina man:

[Perl] mietitrebbie (nella opinione dell'autore, almeno) alcune delle migliori caratteristiche di C, sed, awk, e sh, quindi le persone che hanno familiarità con quelle lingue dovrebbero avere poche difficoltà con esso. (Gli storici delle lingue noteranno anche alcune vestigia di csh, Pascal e anche BASIC | PLUS.)

+14

Perché Perl non è C? –

+8

Perl è stato influenzato da molte cose. Ci sono volute le cose che piaceva a Larry e ha lasciato dietro di sé le cose che non gli piacevano. Non dare troppo peso al patrimonio culturale. –

+3

Come è possibile che questa domanda abbia una taglia quando una delle risposte ha una citazione direttamente da Larry Wall che risponde esattamente a questa domanda? Quale migliore risposta spera di ottenere? –

risposta

33

La semantica di 'rottura' o 'ultima' sono definito dal linguaggio (in questo caso Perl), non da te.

Perché non pensare di "ultimo" come "questo è l'ultima istruzione da eseguire per il ciclo ".

Mi sembra sempre strano che l'istruzione "continua" in "C" avvii il passaggio successivo di un ciclo a . Questo è decisamente uno strano uso del concetto di "continua" . Ma è la semantica di "C", quindi lo accetto.

Cercando di mappare particolari concetti di programmazione in singoli parole in inglese con significato esistente ci sta andando sempre essere una sorta di stranezza mismatching

Source

Inoltre, Larry Wall è un pò strano. Hai visto la sua foto?

Larry Wall http://www.wired.com/images/article/full/2007/12/larry_wall_250px.jpg

+7

+1 per la foto. Questa è una risposta sufficiente per me;) – ThisSuitIsBlackNot

+4

Pensavo che gli avessero bruciato tutte le foto di lui in altre camicie hawaiane. – ysth

+20

La foto di Larry è strana? In confronto a questi ragazzi? http://upload.wikimedia.org/wikipedia/commons/3/36/Ken_n_dennis.jpg – Rook

5

Perché va all'ultimo loop. E perché Larry Wall era un tipo strano.

+2

Beh, volevo dire che era strano quando lo ha chiamato, ma punto ben preso. –

+13

Perché era strano quando chiamò un operatore dopo una parola che le persone normali avrebbero usato per descriverlo? Sono i fanatici del computer che pensano che dovremmo pensare come microprocessori che sono strani. –

+0

@brian: buon punto. Tuttavia, se non è rotto - non aggiustarlo! –

17

Mi aspetto che questo è perché il Perl è stato creato da un linguista, non un informatico. Nell'uso normale in inglese, il concetto di dichiarare di aver completato il passaggio finale attraverso un loop è più strettamente collegato alla parola "last" ("questo è lo pass") dello ultimo ("" break ") break il ciclo "?" break out of the loop "? - non è nemmeno chiaro come" break "si intende relazionarsi all'uscita dal ciclo).

+1

Dalla pausa libera? – larelogio

+4

"Perl è stato creato da un linguista" è per questo che sembra rumore? – LiraNuna

+4

Per favore, possiamo saltare il linguaggio bashing? Non mi piacciono gli spazi bianchi sintatticamente significativi, quindi non uso Python, ma non vado in giro alla ricerca di opportunità per dire a tutti che Python fa schifo. Se non ti piacciono i sigilli (la mia ipotesi migliore su cosa intendi per "sembra rumore di linea"), allora va benissimo. Non utilizzare Perl, PHP, Ruby o qualsiasi altra lingua che li utilizza. Ma devi davvero andare in giro a fare commenti off-topic sulla tua antipatia per loro? –

10

Theres un motivo in più si potrebbe prendere in considerazione:

Ultimo non si limita a controllo ad anello.

sub hello { 
    my ($arg) = @_; 

    scope: { 
     foo(); 
     bar(); 
     last if $arg > 4; 
     baz(); 
     quux(); 
    } 
} 

Ultimo quanto tale è un meccanismo di controllo di flusso generale non limitati a loop.Mentre, naturalmente, è possibile generalizzare quanto sopra come un ciclo che viene eseguito al massimo 1 volte, l'assenza di un loop per me indica "Break? Da cosa stiamo uscendo?"

Invece, penso a "last" come "saltare alla posizione del ultima brace", che è per questo scopo, più semanticamente sensibile.

+0

In questo caso, in realtà penso che "break" abbia senso - stiamo uscendo dal blocco, per arrivare a qualsiasi cosa succeda dopo, nello stesso modo in cui usciremo da un loop per arrivare a qualsiasi cosa arrivi Il prossimo. È solo che la sintassi di C non può utilmente supportare questo uso di last/break, a causa di come funzionano le istruzioni e l'assenza di 'break

14

Il termine "ultimo" ha più senso quando si ricorda che è possibile utilizzarlo con oltre il controllo di ciclo immediato. Si può applicare ai blocchi etichettati uno o più livelli al di sopra il blocco è in:

LINE: while(<>) { 
     WORD: foreach (split) { 
      last LINE if /^__END__\z/; 
      ... 
      } 
     } 

Si legge in modo più naturale di dire "ultimo" in inglese quando si legge come "ultima riga se corrisponde .. . ".

+2

Vedete, è quello che considero strano a riguardo. "last LINE" non va a LINE per un'ultima volta, va alla parentesi graffa di qualsiasi controllo che LINE sta etichettando. Sta andando da qualche parte che ha una connessione molto tenue con l'etichetta menzionata. –

+4

Beh, lo vedo in modo diverso. Mi dice "La cosa a cui stai lavorando è l'ultima". È come nel poker se dico "questa è la mia ultima mano"; non significa che ne giocherò un altro. –

+2

@Paul: Penso che capisca che deve venire dalla tua esperienza di programmazione esistente. Non conosco alcun linguaggio con un'istruzione che dice "Ok, esci dall'iterazione corrente, quindi inizia un'altra iterazione, ma fermati dopo." Quindi non mi aspetterei "ultimo" per farlo. Data la scelta tra qualcosa come "continua" e qualcosa come "pausa", è più ovvio ciò che "prossimo" e "ultimo" di Perl devono significare. –

6

Stavo facendo la stessa domanda a Damian Conway su say. Perl 6 introdurrà say, che non è altro che print che aggiunge automaticamente una nuova riga. La mia domanda era perché non usare semplicemente echo, perché questo è ciò che echo fa in Bash (e probabilmente altrove).

La sua risposta è stata: echo è il 33% più lungo di say.

Ha un punto lì. :)

+1

Penso che questo spieghi perché il Perl sia usato come linguaggio del golf. – LiraNuna

+1

Puoi anche usare say con Perl 5.10. 'usa funzione qw'say'' o' usa funzione ': 5.10' o' usa 5.010' o 'usa 5.10.1' ('uso 5.10.0' dà un avvertimento su Perl 5.10.0) –