-
Brève interview du Dr Brian Kernighan, créateur d'AWK
-
Présentation du Dr Brian Kernighan
- Le Dr Brian Kernighan est un informaticien canadien qui a contribué au développement d'UNIX chez Bell Labs
- Il a coécrit avec Dennis Ritchie l'ouvrage de référence sur le langage de programmation C, "The C Programming Language"
- Depuis 2000, il forme la nouvelle génération de programmeurs à Princeton University
- Il est célèbre pour avoir écrit le tout premier programme "Hello World!"
-
La nouvelle idée d'AWK
- L'idée principale d'AWK est celle des tableaux associatifs (associative arrays)
- À l'époque, c'était un concept nouveau, mais aujourd'hui il est utilisé dans la plupart des langages, soit via des fonctions de bibliothèque (
hashmapsen Java ou en C++), soit directement dans le langage lui-même (dictionariesen Perl et en Python) - Les tableaux associatifs sont des structures très puissantes, qui peuvent servir à simuler diverses structures de données
- Le paradigme pattern-action n'était pas non plus largement utilisé à l'époque, mais constitue une manière efficace d'organiser certains calculs
-
Références utilisées lors de la création du langage
- Dr Kernighan : "Aucune"
- Dans les années 1970, il existait beaucoup de nouveaux langages spécialisés, et il n'y avait presque aucun travail antérieur vraiment pertinent sur lequel s'appuyer
- Yacc était un outil important, car il permettait de créer et d'expérimenter facilement des grammaires
- Lex jouait le même rôle au niveau lexical, en remplaçant une grande quantité de code fastidieux par un ensemble de règles
- Lex et Yacc étaient des exemples de langages pattern-action, créant entre eux une boucle vertueuse
-
Conseils aux jeunes intéressés par la conception de langages de programmation
- Il conseille de concevoir et d'implémenter un petit langage spécialisé
- C'est très amusant et utile, et bien plus facile que de créer un langage alternatif à Rust ou à C++
- Il recommande de repérer une tâche pouvant être automatisée, puis de créer un compilateur simple et un runtime
- Un article connexe écrit il y a longtemps par Jon Bentley reste toujours d'actualité
-
Source de l'image
- Wikimedia Commons
-
Le résumé de GN⁺
- Le Dr Brian Kernighan est une figure majeure ayant contribué au développement d'UNIX et du langage C, ainsi que le créateur du langage AWK, qui a introduit les tableaux associatifs et le paradigme pattern-action
- Les tableaux associatifs sont aujourd'hui des structures de données puissantes utilisées dans la plupart des langages de programmation
- Pour les jeunes programmeurs, concevoir et implémenter un petit langage spécialisé est un exercice très bénéfique
- Yacc et Lex sont des outils qui facilitent l'analyse grammaticale et lexicale, et constituent de bons exemples de langages pattern-action
1 commentaires
Commentaires sur Hacker News
Quelques anecdotes peu connues sur Brian Kernighan : il a rejoint le département d’informatique de Princeton en 2000, mais enseignait déjà au moins un cours à Princeton vers 1993 alors qu’il était encore chez Bell Labs Research
Un étudiant apportait souvent un portable 386sx faisant tourner Linux pre-1.0, et quand Brian ne se souvenait plus du comportement précis d’awk, cet étudiant lançait une commande awk pour lui montrer « l’implémentation correcte ». Brian a donc découvert Linux relativement tôt
Il existe aussi un texte de l’automne 1994 où il a mis l’annuaire gratuit d’AT&T sur Internet : https://www.cs.princeton.edu/~bwk/800.html
Si ça vous intéresse, l’interview d’1 h 30 de Lex Fridman avec BK est très bien : https://www.youtube.com/watch?v=O9upVbGSBFo
Par moments, j’ai l’impression que vivre à notre époque est un privilège immense. C’est un peu comme si un mathématicien pouvait interviewer Euler, ou un physicien Newton
Le livre Masterminds of Programming contient une interview plus large, avec Aho et Weinberger aussi. Je le recommande vivement
https://en.wikipedia.org/wiki/Brian_Kernighan
http://www.linuxjournal.com/article/7035
http://www-2.cs.cmu.edu/~mihaib/kernighan-interview/index.html
https://web.archive.org/web/20090428163341/https://www.princeton.edu/~mike/unixhistory
https://web.archive.org/web/20131126220450/http://princetonstartuptv.com/post/49379235060/the-legendary-brian-kernighan-on-teaching-writing
Cette semaine, je lis The Unix Programming Environment de 1983, avec environ 35 ans de retard. awk y ressort vraiment, et semble être l’ancêtre le plus proche des langages populaires actuels comme JavaScript, Lua, Python, Perl ou Tcl
Ce qu’awk appelle des « tableaux associatifs », JavaScript l’appelle simplement des « objets ». Le code source d’awk dans Unix version 7 de 1979 ne fait que 2680 lignes selon https://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/awk, et c’est impressionnant de voir que l’exécutable ne faisait que 46 KB et tournait dans l’espace d’adressage de 64 KB du PDP-11. Il semble que ni cette version ni l’awk du livre, quatre ans plus tard, n’avaient de fonctions définies par l’utilisateur, et il me semble que c’était aussi le cas du shell Bourne de V7. En revanche,
bcen avaitUn exécutable de 46 KB, c’était aussi un peu plus gros que Turbo Pascal 3.02 : https://prog21.dadgum.com/116.html même si, bien sûr, Turbo Pascal n’avait pas de moteur d’expressions régulières
function,for e in a, la syntaxe sans point-virgule, la gestion des types centrée sur les chaînes, ou encoredelete x[e], il semble assez clair que JavaScript s’est appuyé sur awk, et Brendan Eich l’a lui-même dit : https://brendaneich.com/2010/07/a-brief-history-of-javascript/01983,01979comme ça, ce n’est pas une manière d’écrire les années, et à vrai dire c’est même étrange comme façon d’écrire des nombresJe me souviens que, il y a longtemps, quelqu’un avait écrit dans une signature Usenet : « Perl est la margarine, awk est le beurre ». C’était peut-être l’inverse
Perl a beaucoup de défauts, mais après avoir découvert Perl, j’ai beaucoup moins utilisé awk
J’ai un exemplaire de K&R dédicacé par le Dr Kernighan lors d’une conférence Unix en Australie dans les années 1980. C’est l’un des objets auxquels je tiens le plus
Ce livre, ainsi que The Practice of Programming de Kernighan/Pike et le magazine Byte, constituaient mon « Stack Overflow » des années 1980
Je trouve intéressant qu’il parle des tableaux associatifs comme de quelque chose de « relativement nouveau ». Lisp en avait déjà depuis presque 20 ans
Même quand j’ai commencé à programmer dans les années 1990, une bonne partie du monde C voyait encore des structures de données associatives comme les tables de hachage comme quelque chose d’assez exotique, qu’on ne sortait que lorsqu’on n’avait vraiment pas le choix. On imagine que le monde de la programmation avance vite, mais en réalité ce n’est pas le cas, et c’était encore plus lent à l’époque. Il a souvent fallu plusieurs décennies pour que des fonctionnalités apparues dans certains langages des années 1960–70 soient largement adoptées. Lisp aussi avait alors des performances assez médiocres par rapport aux autres options, ce qui n’en faisait peut-être pas le meilleur ambassadeur pour promouvoir ses fonctionnalités
awk est né sur des machines lentes avec peu de mémoire, et les propriétés de ses tableaux sont aussi le résultat de cet environnement. Le fait de limiter les indices aux chaînes de caractères et, malgré un peu de sucre syntaxique, de rester limité à une dimension en est un exemple. Une implémentation plus générale aurait probablement permis les tableaux multidimensionnels, ou au minimum des tableaux comme éléments de tableau. La version stable de SNOBOL4 date de 1967 : https://en.wikipedia.org/wiki/SNOBOL
Donc, si l’on n’inclut pas dans les tableaux associatifs natifs de Lisp les alist ou les listes de propriétés, cela semble être presque contemporain de la naissance de awk, voire légèrement postérieur
Dans n’importe quel langage, on peut bricoler en quelques minutes quelque chose qui ressemble à un tableau associatif avec une recherche linéaire, mais c’est totalement différent de ce qui est intégré comme fonctionnalité du langage dans SNOBOL4, MUMPS, awk, Perl, Python, Tcl, Lua ou JavaScript. Ce que les premiers Lisp fournissaient pour structurer les données, c’était
cons,car,cdr, et ce n’est pas la même chose. Même dans l’Unix d’avant awk, il existait déjà des programmes contenant des tableaux associatifs, comme les symboles de l’éditeur de liens, le compilateur C, l’assembleur, le noyau avec ses répertoires de système de fichiers, ou les variables du shell, mais ce n’était pas proposé comme fonctionnalité de langage. Le shell Bourne était ce qui s’en rapprochait le plus, puisqu’on pouvait l’imiter en concaténant des noms de variables, avec quelque chose commeeval myarray_$key=$val, et la gestion des variables du shell Bourne V7 était implémentée par recherche dans un arbre binaireLe fil de développement qui mène des expressions régulières à lex, yacc, puis awk, est extrêmement marquant. On sent de manière convaincante la construction par couches successives sur des travaux antérieurs pour produire un résultat plus général
Je vais peut-être dire quelque chose qui va me valoir des critiques, mais j’ai l’impression qu’il y a sur GitHub énormément de programmeurs avec des dépôts mieux écrits que ceux de ces légendes du code. Le vivier de talents était bien plus réduit à l’époque