Guido van Rossumin kahden sentin virhe



Olin kirjoittaa C.A.R. Hoaren miljardin dollarin virheestä

I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn’t resist the temptation to put in a null reference, simply because it was so easy to implement.

mutta tulin siihen tulokseen, että aiheesta on kirjoitettu jo ihan tarpeeksi. Sen sijaan haluan valittaa. Pythonissa

>>> False == 0
True

Joskus muinoin False Pythonissa oli ihan oikeasti sama kuin 0. Tästä on kuitenkin todella pitkä aika. Nykyään saakin erilaisen tuloksen, jos kirjoittaa

>>> False is 0
False

is antaa Pythonissa melko suoraviivaisen objektireferenssisemantiikan. Olen yrittänyt opetella käyttämään sitä asianmukaisissa tilanteissa. Pelkään vain, että saan aikaan enemmän haittaa kuin hyötyä, kun seuraava koodin muokkaaja tulee, eikä ymmärrä miksi tein noin. Parempi olisi, jos kieli itsessään olisi ehjä.

Javassakin kaikesta verböösiydestään ja muista pikkuongelmista huolimatta sentään sekä == että Object.equals() toimivat ennalta-arvattavalla tavalla. Tällaiset pienet jännitysmomentit ohjelmointikielissä voivat tuntua kielten kehittäjien mielestä mukavilta ja näppäriltä oikoteiltä. Usein kielen kehittäjä ei kuitenkaan pysty samaistumaan normaalin kielen käyttäjän asemaan lainkaan. Kehittäjä osaa kielensä etuperin ja takaperin. Käyttäjä nykymaailmassa saattaa käyttää työkseen viittä ohjelmointikieltä, ja toivoisi niiltä lähinnä konsistenssia, ei pelkästään itsensä kanssa, vaan myös ristiin niiden välillä.

Pythonin tilanne ei ole kauhean paha. PHP on yhtäsuuruuksien ja totuusarvokäsittelyjen kanssa ihan omaa luokkaansa. En lähde referoimaan, koska en PHP:ta osaa. En osaa PHP:ta, koska olen nähnyt asiasta joskus taulukon, ja se aiheutti niin voimakasta pahoinvointia, että päätin, etten vastaisuudessakaan opettele.

Tämän artikkelin on kirjoittanut Teemu Kalvas ja sitä ovat sittemmin muokanneet muut Codenton työntekijät.

Yksi kommentti artikkeliin ”Guido van Rossumin kahden sentin virhe

  1. Laitan is-operaattorin suhteen hieman lisää vettä myllyyn.

    >>> a, b = 1000, 1000; a is b
    True

    Mutta.

    >>> a = 1000
    >>> b = 1000
    >>> a is b
    False

    Jujuna tässä on se, että is-operaattori vertaa nimenomaan olioiden identiteettiä keskenään. Koska kokonaisluvut ovat muuttumattomia olioita, ei tulkki luo aina uutta oliota vaan käyttää juuri luomaansa oliota uudestaan.

    Tehokkuussyistä myös kaikki pienet positiiviset kokonaisluvut luodaan tulkin käynnistyessä muistiin. Niillä yllä oleva temppu ei onnistu.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *