O " esac
" termina um " case
" anterior para formar um " bloco de códigos ".
Em Algol68 eles são usados, geralmente a sequência de caracteres invertida da palavra-chave introdutora é usada para terminar o invólucro, e. ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Eu os chamaria de "Blocos Guardados" depois de Edsger Dijkstra e seus Guarded Command Language .
od
presumivelmente não foi usado no Bourne Shell devido à pré-existência do "od" do Unix comando .
A história:
A ideia de "bloqueio vigiado" parece ter vindo de ALGOL 68 Inglês:
proc days in month = (int year, month)int:
case month in
31,
if year mod 4=0 ∧ year mod 100≠0 ∨ year mod 400=0 then 29 else 28 fi,
31, 30, 31, 30, 31, 31, 30, 31, 30, 31
esac;
A implementação da LGU Algol68 do Soviete fez o mesmo: Em Inglês, a declaração de caso reverente do Algol68 mostra case ~ in ~ out ~ esac
, em Cirílico, este lê выб ~ в ~ либо ~ быв
.
Então, em 1975, os blocos de código do Algol68 foram emprestados por Edsger Dijkstra por seus Guarded Command Language . por exemplo.
if a ≥ b → max := a
| b ≥ a → max := b
fi
Presumivelmente, Dijstra usou "Blocos Guardados" para superar a Outra ambiguidade implementada em Algol60 e, em seguida, reengenharia na Linguagem de programação C . (cf. mudança-reduza o conflito. )
Finalmente - de Algol68 - " esac
" entrou no shell Bourne de 1977 (onde você descobriu esac
) cortesia de Stephen R. Bourne que desenvolveu um compilador Algol68 inicial chamado ALGOL 68C .
Famoso Stephen também usou esses mesmos Guarded Blocks em um "arquivo de cabeçalho C" chamado macro.h
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
Os notáveis gênios de software Landon Curt Noll e Larry Bassel tropeçou no código macro.h de Steve em 1984 enquanto trabalhava no grupo de portas Genix da National Semiconductor e se esforçou para entender sua aplicação. E assim Landon & Larry criou então o Concurso Internacional de Código C Ofuscado ...
De 1984 até hoje tem havido vários milhares outras linguagens de programação "melhores" que não usam os Comandos Guardados de Dijkstra. E o uso de Steven Bourne em macro.h
é agora frequentemente citado nas "Dissertações de Desenvolvimento de Software" dos estudantes de TI como prova de que eles não dormem em palestras. : -)