Cabeçalho do índice de posts

Post arquivado

@augustocc@social.br-linux.org
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881649740546925

O AWK original (o descendente "oficial" da versão incorporada ao Unix em 1977) começou a receber suporte a Unicode - com código novo desenvolvido pelo próprio Brian Kernighan, um dos 3 autores originais da linguagem.

Eu escrevi uma longa thread sobre a linguagem no inverno do ano passado, e hoje vou transplantá-la aqui pro Mastodon, porque não quero que ela se perca.

É uma história longa e repleta de personagens interessantes. Vem comigo!

🧶 1/

Capa do livro The AWK programming language
Capa do livro The AWK programming language
17/02/2023 16:08:35 ♥︎ 5 ↺ 5

Thread deste post

avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881654798670047
Em resposta a @augustocc/statuses/109881649740546925.

🧶 2/

Não tenho dúvida de que awk é a linguagem na qual eu escrevi mais programas na minha vida.

O awk serve basicamente para definir padrões a serem procurados em textos, e tratá-los quando os encontra; o programa típico em awk tem poucas linhas, e faz bastante uso de expressões regulares.

Muitas linguagens mais modernas permitem fazer o mesmo, mas a abordagem do awk é diferenciada, como ilustra esse zine da @b0rk:

Página de um zine da Julia Evans descrevendo o awk em formato de história em quadrinhos
Página de um zine da Julia Evans descrevendo o awk em formato de história em quadrinhos
17/02/2023 16:09:52 ♥︎ 5 ↺ 1
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881658232513216
Em resposta a @augustocc/statuses/109881654798670047.

🧶 3/

O awk tem o diferencial de fazer parte da especificação do Unix (e do Posix, e da LSB), então você pode esperar encontrá-lo pré-instalado na maioria dos sistemas.

Quem usa distribuições Linux em geral tenderá a encontrar o gawk (GNU Awk), que é a versão na qual houve desenvolvimento mais ativo ao longo dos anos, com extensões e suporte a vários recursos típicos das linguagens contemporâneas (inclusive internacionalização – e Unicode).

Uma motosserra com a palavra GAWK escrita em sua haste
Uma motosserra com a palavra GAWK escrita em sua haste
17/02/2023 16:10:44 ♥︎ 5 ↺ 0
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881662103203450
Em resposta a @augustocc/statuses/109881658232513216.

🧶 4/

Quem usa os BSDs, MacOS, iOS, Android – e outros descendentes modernos do Unix menos simpáticos ao GNU–, tende a encontrar o BWK awk, também conhecido como nawk ou one-true-awk, que é a versão ainda desenvolvida por um dos 3 autores originais.

Talvez você reconheça o nome dele de algum lugar: junto com Dennis Ritchie, Brian Kernighan escreveu o livro original sobre a linguagem C (1978), origem do termo "K&R C", além de ter sido influente no Unix e autor do primeiro programa Hello, World

foto de 2 exemplares do livro The C Programming Guide, lado a lado
foto de 2 exemplares do livro The C Programming Guide, lado a lado
17/02/2023 16:11:43 ♥︎ 4 ↺ 0
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881669250632064
Em resposta a @augustocc/statuses/109881662103203450.

🧶 5/

O one-true-awk (nawk) não teve desenvolvimento muito ativo nas últimas décadas, mas Kernighan aparentemente se incomodou com a ausência de suporte a Unicode (realmente me faz falta, quando tenho que usar nawk!) a ponto de resolver implementar suporte a UTF-8.

É um trabalho em andamento, mas os patches já começaram a aparecer no Github (github.com/onetrueawk/awk/comm), e este e-mail de Brian Kernighan mostra o ponto em que o desenvolvimento se encontra:

imagem da transcrição de um e-mail de Kernighan, cujo texto está disponível no link do Github, acima.
imagem da transcrição de um e-mail de Kernighan, cujo texto está disponível no link do Github, acima.
17/02/2023 16:13:32 ♥︎ 4 ↺ 1
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881673089646941
Em resposta a @augustocc/statuses/109881669250632064.

🧶 6/

Curiosidade: o mantenedor do repositório do nawk é Arnold Robbins, que há décadas é também o mantenedor do GNU awk, e autor de vários livros sobre a linguagem, como o da foto. Ele e Kernighan são amigos de longa data.

Aliás, por falar em bons livros sobre linguagens, o Brian Kernighan também anda trabalhando numa nova edição do The AWK Programming Language, de 1988 - ele contou isso, e mais, nesta entrevista publicada há alguns meses: youtube.com/watch?v=GNyQxXw_oM

Capa da 4ª edição do livro Effective awk programming
Capa da 4ª edição do livro Effective awk programming
17/02/2023 16:14:31 ♥︎ 3 ↺ 0
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881677424074123
Em resposta a @augustocc/statuses/109881673089646941.

🧶 7/

A minha implementação preferida do awk é o Gawk, do GNU, cuja versão 5.2.0 saiu no final de 2022, com novidades que incluem o pma, um armazenamento persistente (opcional) entre execuções: o script termina, mas ao rodar novamente, ainda pode ter acesso às variáveis definidas na execução anterior.

Como curiosidade, a versão 5.2.0 também removeu suporte ao OS/2 e ao DJGPP (GNU no MS-DOS), e avisou que subiram no telhado os suportes a VAX/VMS e à aritmética com precisão arbitrária (MFPR)

ícone representando a linguagem awk, sobre disposto sobre um trecho de programa em awk
ícone representando a linguagem awk, sobre disposto sobre um trecho de programa em awk
17/02/2023 16:15:37 ♥︎ 3 ↺ 0
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881681513108847
Em resposta a @augustocc/statuses/109881677424074123.

🧶 8/

Como curiosidade², recentemente passei pela experiência real de ter que portar um script para 3 ambientes diferentes, cada um com sua versão de awk: tinha o one-true-awk, o gawk e o mawk. Precisou de ajustes devido a sintaxes ligeiramente diferentes de expressões regulares entre os 3.

Na prática, a minha maior dificuldade é quando preciso portar algum script pra rodar onde esteja instalada só a versão do awk incorporada ao Busybox, típica de sistemas embarcados ou de pequeno porte.

Imagem representando o BusyBox
Imagem representando o BusyBox
17/02/2023 16:16:40 ♥︎ 3 ↺ 0
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881686232569215
Em resposta a @augustocc/statuses/109881681513108847.

🧶 9/

Consta que as versões atuais do veloz mawk já têm suporte completo ao que o POSIX define que o AWK deveria fazer com expressões regulares.

Na versão instalada que precisei suportar na ocasião acima, ele não implementava classes de caracteres POSIX, tipo [:upper:] ou [:blank:]. Ajuste simples, ainda bem.

Uma cola para referência de expressões regulares, incluindo as classes POSIX
Uma cola para referência de expressões regulares, incluindo as classes POSIX
17/02/2023 16:17:52 ♥︎ 5 ↺ 1
avatar
@augustocc@social.br-linux.org
https://social.br-linux.org/@augustocc/109881690764641069
Em resposta a @augustocc/statuses/109881686232569215.

🧶 10/

E pra quem gosta de arqueologia digital, curta essa FAQ do comp.lang.awk, da virada do século, que tem dicas bem interessantes sobre a linguagem, mas também é um panorama de um tempo que superamos, com sistemas Unix incompatíveis entre si, discar para modems de instituições pra fazer downloads, versões para Palm Pilot etc.
faqs.org/faqs/computer-lang/aw

print do cabeçalho da faq do link acima
print do cabeçalho da faq do link acima
17/02/2023 16:19:01 ♥︎ 4 ↺ 1
Posts