-
Breve entrevista com o Dr. Brian Kernighan, criador do AWK
-
Apresentação do Dr. Brian Kernighan
- Dr. Brian Kernighan é um cientista da computação canadense que contribuiu para o desenvolvimento do UNIX no Bell Labs
- Coescreveu com Dennis Richie o livro fundamental sobre a linguagem de programação C, "The C Programming Language"
- Desde 2000, vem formando a próxima geração de programadores na Princeton University
- É famoso por ter escrito o primeiro programa "Hello World!"
-
A nova ideia do AWK
- A principal ideia do AWK são os arrays associativos (
associative arrays) - Na época, era um conceito novo, mas hoje é usado na maioria das linguagens como função de biblioteca (
hashmapsem Java ou C++) ou como parte da própria linguagem (dictionariesem Perl e Python) - Arrays associativos são estruturas muito poderosas e podem ser usados para simular vários tipos de estruturas de dados
- O paradigma pattern-action também não era amplamente usado na época, mas é uma forma eficaz de organizar certos tipos de computação
- A principal ideia do AWK são os arrays associativos (
-
Referências usadas ao criar a linguagem de programação
- Dr. Kernighan: "Nenhuma"
- Na década de 1970, havia muitas novas linguagens de propósito específico, e quase não existiam referências anteriores que servissem de base
- Yacc foi uma ferramenta importante por permitir criar e experimentar gramáticas com facilidade
- Lex desempenhava o mesmo papel no nível lexical, substituindo muito código tedioso por um conjunto de regras
- Lex e Yacc são exemplos de linguagens pattern-action e formavam um ciclo positivo entre si
-
Conselho para jovens interessados em design de linguagens de programação
- Ele aconselha projetar e implementar uma pequena linguagem de propósito específico
- Isso é muito divertido e útil, além de ser bem mais fácil do que criar uma linguagem alternativa ao Rust ou ao C++
- Recomenda encontrar uma tarefa que possa ser automatizada e criar um compilador simples com runtime
- Um artigo relacionado escrito por Jon Bentley há muito tempo ainda continua atual
-
Fonte da imagem
- Wikimedia Commons
-
Resumo do GN⁺
- Dr. Brian Kernighan é uma figura importante que contribuiu para o desenvolvimento do UNIX e da linguagem C, além de ser o criador da linguagem AWK, que introduziu os arrays associativos e o paradigma pattern-action
- Arrays associativos são estruturas de dados poderosas usadas hoje na maioria das linguagens de programação
- Para jovens programadores, projetar e implementar uma pequena linguagem de propósito específico pode ser muito proveitoso
- Yacc e Lex são ferramentas que facilitam a análise gramatical e lexical e são bons exemplos de linguagens pattern-action
1 comentários
Opiniões no Hacker News
Curiosidades pouco conhecidas sobre Brian Kernighan: ele entrou para o departamento de Ciência da Computação de Princeton em 2000, mas, quando ainda estava na Bell Labs Research, por volta de 1993, já havia dado pelo menos uma disciplina em Princeton.
Um aluno costumava levar com frequência um notebook 386sx rodando Linux pré-1.0, e dizem que, quando Brian não se lembrava dos detalhes do comportamento do awk, esse aluno executava comandos awk e mostrava a “implementação correta”. Então Brian acabou tendo contato com Linux relativamente cedo.
Há também um texto de 1994 em que ele colocou na internet a lista telefônica gratuita da AT&T: https://www.cs.princeton.edu/~bwk/800.html
Se houver interesse, a entrevista de uma hora e meia que Lex Fridman fez com BK é muito boa: https://www.youtube.com/watch?v=O9upVbGSBFo
Às vezes sinto que viver nesta época é um privilégio enorme. É parecido com um matemático poder entrevistar Euler, ou um físico poder entrevistar Newton
O livro Masterminds of Programming traz uma entrevista mais abrangente, incluindo Aho e Weinberger. Recomendo muito
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
Nesta semana estou lendo The Unix Programming Environment, de 1983, ou seja, com uns 35 anos de atraso. No livro, o awk realmente se destaca, e parece ser o que há de mais próximo das linguagens populares de hoje, como JavaScript, Lua, Python, Perl e Tcl.
O que awk chama de “arrays associativos”, JavaScript chama simplesmente de “objetos”. O código-fonte do awk no Unix 7ª edição, de 1979, tem apenas 2.680 linhas segundo https://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/awk, e é impressionante que o executável tivesse 46 KB e rodasse no espaço de endereçamento de 64 KB do PDP-11. Parece que essa versão, e o awk apresentado no livro quatro anos depois, ainda não tinham funções definidas pelo usuário; o mesmo provavelmente valia para o V7 Bourne shell. Mas o bc tinha
O executável de 46 KB também era um pouco maior que o Turbo Pascal 3.02: https://prog21.dadgum.com/116.html Claro que o Turbo Pascal não tinha motor de expressões regulares
function,for e in a, sintaxe sem ponto e vírgula, tratamento de tipos centrado em strings edelete x[e], fica bem claro que o awk foi uma base do JavaScript, e Brendan Eich também disse isso: https://brendaneich.com/2010/07/a-brief-history-of-javascript/01983,01979não é uma forma de escrever anos e, na verdade, é estranho até como forma de escrever númerosLembro que, muito tempo atrás, alguém escreveu numa
.sigda Usenet: “Perl é margarina, awk é manteiga”. Talvez a ordem fosse a inversaPerl tem muitos defeitos, mas, depois que descobri Perl, passei a usar awk muito menos
Tenho um exemplar de K&R autografado pelo Dr. Kernighan em uma conferência Unix na Austrália nos anos 80. É uma das coisas de que mais gosto
Esse livro, The Practice of Programming, de Kernighan/Pike, e coisas como a revista Byte eram meu “Stack Overflow” dos anos 1980
É interessante vê-lo falar de arrays associativos como algo “relativamente novo”. Afinal, eles já existiam em Lisp havia quase 20 anos
Mesmo quando comecei a programar nos anos 1990, uma boa parte do mundo C via estruturas de dados associativas, como tabelas hash, como algo meio exótico, para ser usado só quando realmente não havia alternativa. Achamos que o mundo da programação se move rápido, mas na prática não é bem assim — especialmente naquela época, era ainda mais lento. Muitas vezes, recursos que surgiram em alguma linguagem nos anos 1960–70 levaram décadas para ser amplamente adotados. O Lisp também tinha desempenho bem pior que outras opções da época, então talvez não fosse um bom caso para promover seus recursos
O awk nasceu em máquinas lentas e com pouca memória, e as propriedades de seus arrays também foram resultado desse ambiente. Exemplos disso são limitar os subscritos a strings e, apesar do açúcar sintático, restringi-los a uma dimensão. O texto diz que uma implementação mais geral teria permitido arrays multidimensionais ou, no mínimo, arrays como elementos de arrays. A versão estável do SNOBOL4 é de 1967: https://en.wikipedia.org/wiki/SNOBOL
Portanto, se não incluirmos alists ou listas de propriedades como arrays associativos embutidos em Lisp, isso parece ser praticamente da mesma época em que o awk nasceu, ou um pouco posterior
Em qualquer linguagem, dá para criar em poucos minutos algo parecido com um array associativo usando busca linear, mas isso é completamente diferente de algo embutido como recurso da linguagem, como em SNOBOL4, MUMPS, awk, Perl, Python, Tcl, Lua e JavaScript. O que o Lisp inicial oferecia para estruturar dados era
cons,car,cdr, e isso não é a mesma coisa. Antes do awk, dentro do Unix também havia programas com arrays associativos, como símbolos do linker, compiladores C, assemblers, o kernel em forma de diretórios do sistema de arquivos e variáveis do shell, mas isso não era oferecido como recurso de linguagem de programação. O Bourne shell era o que chegava mais perto, pois dava para simular concatenando nomes de variáveis, como emeval myarray_$key=$val, e o tratamento de variáveis de shell no Bourne shell do V7 era implementado com busca em árvore bináriaO fluxo de desenvolvimento que vai de expressões regulares para lex, yacc e awk é muito impressionante. Fica convincente a sensação de que eles construíram sobre trabalhos anteriores para chegar a resultados mais gerais
Sei que vou apanhar por dizer isso, mas acho que no GitHub há muitos programadores com repositórios mais bem escritos do que os desses lendários nomes da programação. Naquela época, o conjunto de talentos era muito menor