( persicsb | 2016. 03. 20., v – 16:11 )

Azért szemantikai változás, mert írhatsz olyan kódot, ami az egyik esetben elhasal, a másik esetben meg nem, attól függően, hogy melyik verzióját használod a libnek (plusz validáció van, vagy nincs). Mondjuk elhal egy unit teszt, ami eddig lefutott. Ez azt jelenti, hogy változott az API, mivel változott a metódusod jelentése. Méghozzá visszafelé nem kompatibilis módon: szűkebb értékkészletet fogad el, mint eddig elfogadott.

" Ha az API leírásban korábban szerepelt, hogy dobhat kivételt, ha (biztosan) érvénytelen értéket kap a setZip, akkor volt-e szemantikai változás attól, hogy ezt elkezdted betartatni [akár csak néhány országra, ahol biztosan ismered a zip formátumot]?"

Hogyne lett volna: A korai verzióval nem halt el egy kódom, most meg elhal ugyanarra az inputra. Az egy dolog, hogy a linker és már egyebek (classloader) számára binárisan nincs inkompatibilis változás.

Lásd: https://en.wikipedia.org/wiki/Cluster_(spacecraft)#Launch_failure
Egy Ariane 4 platformot használtak Ariane 5 rakétához. Mivel az Ariane 5 inputja bővebb volt, ezért hibázott a kód. Pedig "semmilyen" API változás nem történt.