Beaujolaisův efekt - Beaujolais effect
Beaujolaisův efekt je název daný třídě potenciálních sémantických chyb v Jean Ichbiah návrh specifikací pro programovací jazyk Ada. Jméno vzniklo z Ichbiahova slibu dát láhev Beaujolais nouveau červené víno každému, kdo by mohl najít takovou situaci v normě návrhu jazyka. Alespoň jedna láhev byla skutečně oceněna za takový objev.[1]
Definice
Efekt Beaujolais je situace, kdy přidání nebo odebrání singlu doložka o použití v programu Ada mění chování kompilovaného programu, což je velmi nežádoucí účinek v jazyce navrženém pro sémantickou přesnost. Když aktualizoval svůj návrh standardu a vytvořil finální jazykový standard Ada 83, Ichbiah podnikl kroky k zabránění účinku. Zbývající možné situace pro vytvoření efektu byly později identifikovány matematickou analýzou a řešeny jazykovým standardem Ada 95, takže každá situace, která stále vedla k efektu Beaujolais v Ada 83, byla v novějším jazykovém standardu Ada 95 nelegálním konstruktem.
V zásadě se efekt Beaujolais může vyskytovat v jiných jazycích, které používají jmenné prostory nebo balíčky, pokud specifikace jazyka nezajistí, aby byl nezákonný.
Pozadí
Programovací jazyk Ada umožňuje rozdělení zdrojového kódu balíčky knihoven obsahující definice dat a algoritmy, které mohou být použity programy nebo jinými knihovními balíčky. Definice v balíčku jsou viditelné pomocí a s doložkou. Například pokud řádek -
s Ada.Text_IO;
se zobrazí v horní části zdrojového kódu pro program nebo balíček, poté data, procedury a funkce deklarované v balíčku knihovny Ada.Text_IO lze vyvolat v rámci tohoto zdrojového kódu. Toto je implementace jmenný prostor koncept pro Adu.
Tedy program, který má s Ada.Text_IO; směrnice může "vidět" definice tam, a za účelem vyvolání Nový řádek postup v Ada.Text_IO lze na něj odkazovat jménem,
Ada.Text_IO.New_Line;
a podobně s procedurami nebo funkcemi, které vyžadují argumenty, nebo s čtením / zápisem do libovolných proměnných deklarovaných v Ada.Text_IO balík.
Takto plně specifikovaná jména však mohou být velmi podrobná, takže jazykový standard také podporuje a doložka o použití který říká kompilátoru, aby prohledal obsah balíčku, když se pokouší identifikovat jména, která se vyskytují ve zdrojovém kódu. Pokud tedy obě řádky -
s Ada.Text_IO;použití Ada.Text_IO;
se zobrazí v horní části programu, Nový řádek postup v balíčku Ada.Text_IO je nejen viditelný pro program, ale lze jej vyvolat zkrácenou formou -
Nový řádek;
protože klauzule použití řekne kompilátoru, jaký balíček obsahuje definici.
Nejednoznačnost však nastává, pokud více než jeden balíček definuje a Nový řádek postup se stejnými nebo podobnými profily parametrů. Pokud program nevyřeší nejednoznačnost, kompilátor by měl program odmítnout s chybovou zprávou. Zde je příklad:
balík A je postup New_Line (Number_Of_Lines: v Kladné: = 1);konec A;s A; použití A;s Ada.Text_IO; použití Ada.Text_IO;postup Dvojznačný jezačít Nový řádek; - chybakonec Dvojznačný;
Ve výše uvedeném příkladu je volání nejednoznačné, protože by mohlo odpovídat buď Ada.Text_IO.New_Line nebo A.New_Line s výchozí hodnotou parametru. Nejasnosti lze vyřešit dvěma způsoby. Jedním z nich je zadání názvu balíčku a druhým je výslovné zadání názvu parametru, pokud podprogram, který má být vyvolán, má parametry. Nejednoznačnost řeší všechny tři níže uvedené příklady.
Ada.Text_IO.New_Line; A.New_Line; New_Line (Number_Of_Lines => 1);
Reference
- ^ „Co je to„ Beaujolaisův efekt “?“. Archivovány od originál dne 2006-08-23. Citováno 2006-09-11.