A ja uz se po nekolikate snazim rict, ze to nemusi byt pravda. Kdyz budu mit vhodny typovy system a budu chtit, tak muzu zaridit aby kazda nekompatibilni zmena implementace nutne znamenala zmenu API.
Ano, vy jste už poněkolikáté zaměnil kompatibilitu API a kompatibilitu implementace. Já stále píšu o kompatibilitě API a vy na to pokaždé reagujete kompatibilitou implementace. Ne každá změna implementace znamená změnu API.
To rekne kompilator co je kompatibilni a co je nekompatibilni. To nemuze byt vec nazoru.
Možná to nemůže být věc názoru, ale je to tak. Je změnou API třeba to, jak je funkce rychlá, jak dlouho trvá, než se provede? Třeba u webových stránek se v JavaScriptu hlavně dříve spousta věcí, která měla být asynchronní, řešila voláním
setTimeout – daný kód se odložil a zavolal třeba za 100 ms. Nebo i dneska to často lidé používají v init skriptech – „dej tam pauzu minutu, za tu dobu ta závislost určitě naběhne“. Spousta lidí k tomu má přístup „teď mi to funguje, tak je to v pořádku“. No a někde místo explicitní pauzy funguje kód, který se provádí delší dobu. A teď si představte, že někdo takový kód optimalizuje a zrychlí. Ten kód, který závisel na tom, že to trvá určitou dobu, se rozbije.
Je to zrychlení nekompatibilní změna API? I když ta doba trvání nikde nebyla zdokumentovaná, nebyl to účel té funkce a jenom to tak náhodou vyšlo. Dá se na takový případ napsat jednotkový test? Mohl by to typový systém řešit jinak, než že by každá změna implementace znamenala nekompatibilní změnu, a tím pádem by veškerá typovost šla k šípku, protože by nic nezáviselo na typech ale na konkrétních implementacích?