Pourquoi "dernier" s'appelle-t-il "dernier" en Perl?
-
06-07-2019 - |
Question
Quelle est la raison historique pour que dernier
soit appelé comme dans Perl plutôt que break
comme il est appelé dans C?
Le design de Perl a été influencé par C (en plus de awk, sed et sh - voir la page de manuel ci-dessous). Il doit donc y avoir une certaine raison à ne pas utiliser la dénomination familière de C / Style, break / last.
Un peu d’histoire tirée de la page de manuel Perl 1.000 (publiée le 18 décembre 1987):
[Perl] combine (de l’avis de l’auteur, en tout cas) certaines des meilleures fonctionnalités de C, sed, awk et sh, de sorte que les personnes familiarisées avec ces langues ne devraient avoir aucune difficulté à l’utiliser. (Les historiens des langues noteront également quelques vestiges de csh, Pascal et même de BASIC | PLUS.)
La solution
La sémantique de 'break' ou 'last' est défini par la langue (dans ce cas Perl), pas par vous.
Pourquoi ne pas penser à "dernier" en tant que "cela est la dernière instruction à courir pour le boucle ".
Il m’a toujours semblé aussi étrange que le La déclaration 'continue' en 'C' commence la prochain passage d'une boucle. C'est certainement une utilisation étrange de la concept de "continuer". Mais c'est le sémantique de 'C', alors je l'accepte.
En essayant de mapper un particulier concepts de programmation en single Mots anglais avec sens existant il y aura toujours une sorte d'incohérence discordante
De plus, Larry Wall est un peu bizarre. Avez-vous vu sa photo?
(source: wired.com )
Autres conseils
Je suppose que cela tient au fait que Perl a été créé par un linguiste et non par un informaticien. En anglais normal, l’idée de déclarer que vous avez terminé votre dernière passe dans une boucle est plus étroitement liée au mot "last". ("Ceci est le dernier dernier") au mot "pause". ( rompre la boucle " rompre en dehors de la boucle" - on ne sait même pas exactement comment "pause" est censé se rapporter à la sortie de la boucle) .
Le terme "dernier" prend tout son sens lorsque vous vous rappelez que vous pouvez l'utiliser avec davantage que le contrôle de boucle immédiat. Vous pouvez l'appliquer à des blocs étiquetés d'un ou plusieurs niveaux supérieurs le bloc dans lequel il se trouve:
LINE: while( <> ) {
WORD: foreach ( split ) {
last LINE if /^__END__\z/;
...
}
}
Il est plus naturel de dire "dernier" en anglais lorsque vous le lisez en tant que "dernière ligne si elle correspond ...".
Voici une raison supplémentaire à considérer:
Last ne se limite pas au contrôle de boucle.
sub hello {
my ( $arg ) = @_;
scope: {
foo();
bar();
last if $arg > 4;
baz();
quux();
}
}
Le dernier en tant que tel est un mécanisme général de contrôle de flux qui ne se limite pas aux boucles. Bien sûr, vous pouvez généraliser ce qui précède comme une boucle qui s'exécute au plus une fois, l'absence de boucle pour moi indique "Break?" De quoi sortons-nous? "
À la place, je pense à " dernier
". en tant que "Aller à la position de la dernière accolade", ce qui est plus sage sur le plan sémantique.
Je posais la même question à Damian Conway à propos de dire
. Perl 6 présentera say
, qui n'est autre que print
qui ajoute automatiquement une nouvelle ligne. Ma question était pourquoi ne pas simplement utiliser echo
, parce que c'est ce que echo
fait dans Bash (et probablement ailleurs).
Sa réponse était: echo
est 33% plus long que dites
.
Il a un point là-bas. :)
Parce que ça va jusqu'au dernier bout de la boucle. Et parce que Larry Wall était un gars étrange.