[gull] les langages de programmations made in switzerland.

Marc SCHAEFER schaefer at alphanet.ch
Wed May 2 09:19:18 CEST 2018


On Wed, May 02, 2018 at 07:43:51AM +0200, Laurent Franceschetti wrote:
> Anecdote: A propos de Newton, les étudiants de 2ème année que nous étions étaient confondus par le contenu du cours du professeur Charles Rapin, malgré ses talents de narrateur. Les manuels du langage n???étaient malheureusement pas très pédagogiques. Il y avait une incantation mystérieuse, qu???on trouvait à la fin des méthodes de classes:

En ce qui me concerne j'avais adoré ce cours, très complet[1], vue d'ensemble de tout ce
qu'il fallait savoir (suivi autour de 1992-1993).  Les explications étaient toujours claires.

Il y avait toutefois deux écueils:

   - il rajoutait chaque semaine un opérateur (je me souvient du | qui m'avait
     choqué, ça faisait quelque chose avec le polymorphisme, de mémoire)

   - il fallait absolument éviter d'essayer de se raccrocher à un langage
     existant, mais comprendre les concepts.

L'opérateur "nouer" était génial.

Toutefois, le cours de base (en 1992-1993) ne traitait pas beaucoup
d'orienté objet. J'ai suivi toutefois son cours avancé Construction
de compilateurs, ce qui fait qu'encore aujourd'hui, quand je vois
du code orienté-objet, je réfléchis à l'implémentation: table de saut
ou la résolution absolue (inline) est-elle possible à la compilation ? :)

Et Newton se compilait avec un compilateur Newton, bootstrappé il y
a des années depuis un autre langage, mais qui depuis se compilait
lui-même en code machine (ok, le runtime était, en partie, en C sur
les versions UNIX).

> take moi done

Si je me rappelle bien, la difficulté c'était que Newton était un langage
d'expression, donc tout pouvait être retourné (beaucoup de programmes
avancés finissaient par push programme ou take programme).

Mais il y avait des problèmes syntaxiques où le `take' était explicitement
nécessaire, c'était ça que j'avais trouvé compliqué à l'époque.

De tous les profs d'informatique que j'ai eux à l'époque, c'est celui qui

   a) m'a le plus appris

   b) était le plus modeste

Il est décédé en 1997, je crois.

> Ca nous aurait fait gagner du temps si on nous avait expliqué cet idiotisme, et surtout à quoi il servait (à faire des chaînes de méthodes, maclasse.foo().bar().baz())??? Une chose que qui m???intrigue toujours, c???est pourquoi on n???utilisait pas « me » ou « self » pour la variable conventionnelle? 

Cela ne m'avait pas choqué :)

En Perl, et je crois en Python[2], on peut définir le nom de la variable
conventionnelle:

[ ... ]

sub take {
   # self dans certains langages
   my $moi = shift;

   return $moi;
}

my $whatever = new whatever();
my $lui = $whatever->take();

Comme application moderne du take moi, un petit peu de web scraping avec
Mojolicious (en particulier le grep() et le map()), ici il s'agit
de tableaux de résultats (qui sont des objets), pas d'objets eux-mêmes,
mais le principe marche aussi.

my $ua = new Mojo::UserAgent();

my %truc =
   $ua->get($base_url)->res->dom->find('td > a')
      ->grep(sub { $_->attr('href') =~ /google.com/ })
      ->map(sub { $_->attr('href') => length($_) });

# truc contiendra un tableau associatif
#    url => longueur d'URL
# pour tous les URLs attributs href de tous les éléments a dont le
# parent est un élément td dans le document pointé par l'URL $base_url
# (dans grep et map et foreach, par défaut dans Perl, $_ est la
#  variable de contrôle)

[1] https://fr.slideshare.net/ebruchez/programmes-et-objets-informatiques-prof-ch-rapin-juillet-1989
[2] http://sametmax.com/pourquoi-self-en-python/


More information about the gull mailing list