„ esac
” Kończy wcześniejsze ”, case
tworząc„ blok kodu ”.
W Algol68 są one używane, na ogół odwrócona sekwencja znaków słowa kluczowego wprowadzającego służy do zakończenia obudowy, np ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Nazwałbym ich „Strzeżonymi blokami” po Edsgerze Dijkstrze i jego Guarded Command Language .
od
prawdopodobnie nie był używany w powłoce Bourne'a z powodu wcześniejszego istnienia uniksowego polecenia „od” .
Historia:
Wygląda na to, że pomysł „Guarded Block” pochodzi z ALGOL 68, np. Angielski:
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;
Sowiecka implementacja LGU Algol68 zrobiła to samo: w języku angielskim pełen szacunku przypadek Algol68 brzmi: case ~ in ~ out ~ esac
cyrylica to brzmi выб ~ в ~ либо ~ быв
.
Następnie w 1975 r. Bloki kodu Algol68 zostały pożyczone przez Edsger Dijkstra dla jego Guarded Command Language . na przykład
if a ≥ b → max := a
| b ≥ a → max := b
fi
Przypuszczalnie Dijstra używane „strzeżonego bloków”, aby przezwyciężyć błędnych innego niejasności realizowany w Algol60 a następnie ponownie zaprojektowany w C Programming Language . (por . konflikt shift-redukcja ).
Wreszcie - z Algol68 - „ esac
” trafił do powłoki Bourne'a z 1977 r. (Gdzie odkryłeś esac
) dzięki uprzejmości Stephena R. Bourne'a, który opracował wczesny kompilator Algol68 o nazwie ALGOL 68C .
Słynny Stephen używał również tych samych bloków bezpieczeństwa w „pliku nagłówkowym C” o nazwie macro.h
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
Znani geniusze oprogramowania, Landon Curt Noll i Larry Bassel, natknęli się na kod macro.h Steve'a w 1984 r., Kiedy zostali zatrudnieni w grupie portali Genix firmy National Semiconductor i starali się zrozumieć jego zastosowanie. I tak Landon i Larry stworzyli Międzynarodowy Konkurs Obfuscated C Code ...
Od 1984 r. Do dnia dzisiejszego istniało kilka tysięcy innych „lepszych” języków programowania, które nie używają poleceń strzeżonych Dijkstry. Wykorzystanie ich przez Stevena Bourne'a macro.h
jest często cytowane w „Rozprawach programistycznych” studentów IT jako dowód, że nie spali na wykładach. :-)
esac
punktów dokładnie tam, gdzie powinien - do linii, która go definiuje i pokazuje, że jest on wymagany.