Sky
Vittorio vb Bertola
Affacciato sul Web dal 1995

Sab 12 - 6:12
Ciao, essere umano non identificato!
Italiano English Piemonteis
home
home
home
chi sono
chi sono
guida al sito
guida al sito
novità nel sito
novità nel sito
licenza
licenza
contattami
contattami
blog
near a tree [it]
near a tree [it]
vecchi blog
vecchi blog
personale
documenti
documenti
foto
foto
video
video
musica
musica
attività
net governance
net governance
cons. comunale
cons. comunale
software
software
aiuto
howto
howto
guida a internet
guida a internet
usenet e faq
usenet e faq
il resto
il piemontese
il piemontese
conan
conan
mononoke hime
mononoke hime
software antico
software antico
lavoro
consulenze
consulenze
conferenze
conferenze
job placement
job placement
business angel
business angel
siti e software
siti e software
admin
login
login
your vb
your vb
registrazione
registrazione
mercoledì 11 Aprile 2007, 09:39

Linguaggi intelligenti

Da un remoto angolo del manuale di PHP:

“If you compare an integer with a string, the string is converted to a number.”

Ciò significa che, in PHP, il seguente test:

if ("pippo" == 0) {

è sempre vero.

A loro discolpa, devono già essersi accorti che questa era una stupidaggine di prim’ordine: difatti già dal PHP 4 hanno introdotto l’operatore === che vuol dire “uguali e dello stesso tipo”. Ma all’incauto programmatore che ci perde una mezz’ora viene lo stesso voglia di fustigarli.

divider

17 commenti a “Linguaggi intelligenti”

  1. Fabrizio:

    Se tu usassi asp/js non avresti di questi problemi…

  2. BlindWolf:

    Sono i difetti del dynamic typing in genere.
    (PHP rulez comunque… ha la potenza del Perl e l’eleganza del C. Ormai anche gli script per automatizzare Windows o Linux li scrivo in PHP.)

  3. NRK:

    vb: oh beh, fosse l’unica stupidaggine di prim’ordine di PHP :)

    blindwolf: per il caso specifico riportato da vb direi piuttosto che è un difetto dovuto alla stupidità del sistema di conversione dinamica tra tipi adottato da PHP, comunque in generale più che di caratteristica della tipizzazione dinamica parlerei di caratteristica della tipizzazione debole (php è dynamic e weak typed), tanto è vero che altri linguaggi a tipizzazione dinamica come Python o Ruby non permettono magheggi di questo genere (in uno slancio di bontà li chiamerò così) proprio perchè, al contrario di PHP, sono a tipizzazione forte.

  4. sciasbat:

    Viva il dynamic typing di python ;)

  5. BlindWolf:

    @NRK: yep, sulla tipizzazione dinamica/debole hai ragione. Comunque “it’s not a bug… it’s a feature!” :-) Gli ideatori di PHP evitendemente hanno implementato questa conversione allegra per semplificare la vita a chi maneggia stringhe numeriche (es: parametri GET/POST, probabilmente anche l’accesso alle tuple di un DB); purtroppo quando le cose sono troppo facili (ed il PHP è facile) è facile anche fare caxxate.

    Comunque, quanti di noi sono impazziti in C/C++/PHP e simili a debuggare il seguente baco?

    for(i=0;i
    e nonostante la nostra vita sessuale possa essere migliore di quella di Rocco Siffredi questo frammento di codice ci permette di bullarci una sola volta (e vale anche per i vergini, boia faos!).

    Noto comunque con piacere che finalmente in questo blog da nerd si ritorna a parlare di cose da nerd!

    Nerd power!

  6. NRK:

    Sì sì è una feature non mettevo in dubbio questo, il mio discorso riguardava piuttosto l’implementazione di questa conversione che secondo me lascia un pò a desiderare in quanto a coerenza. Voglio dire, se “pippo” == 0 e 0 == false, perché false != “pippo”? :D

    Che poi questo renda la vita più facile è indubbiamente vero, ma penso sia un’arma a doppio taglio se non si è perfettamente consapevoli di ciò che si sta facendo. Mi dirai: “ma per programmare bisogna essere consapevoli di ciò che si sta facendo”… beh, in un mondo ideale sì :)

    PS: nerd a chi? :p

  7. BlindWolf:

    Non è detto che “per programmare bisogna essere consapevoli di ciò che si sta facendo”. Ci sono linguaggi per esperti che richiedono consapevolezza (una sola lettera: C!) e linguaggi orientati ai non-programmatori (Basic…)

  8. Mir:

    Non e’ il linguaggio che fa il programmatore. Dove lavoro si fa in Java e in Visual Basic, ma i programmatori lavorano in un certo modo sia con l’uno che con l’altro, se invece la stoffa non ce l’hai un progetto di un certo spessore non riesci a gestirlo con nessun linguaggio, perche’ non gli dai la struttura giusta e alla fine per ogni modifica di un certo peso che devi fare inizi col copia incolla a raffica o a dover riscrivere interi pezzi di codice perche’ non andavano bene. Se ti capita questo, e’ meglio che cambi mestiere..
    (cosa che in effetti non dovrebbe essere nemmeno cosi’ male, si torna a programmare per passatempo, a smanettare per curiosita’..)

  9. Lobo:

    Ciao NRK, sei venuto anche tu a forumizzare il blog di VB? ne avrebbe decisamente bisogno.

    FF

  10. NRK:

    BlindWolf: non ne faccio una questione di esperienza o di quantosòfficoiocheprogrammoinC, sono semplicemente convinto che la maggior semplicità di PHP non debba illudere l’utilizzatore portandolo a dare per scontati più dettagli del dovuto proprio perché PHP stesso ha in realtà eccezioni o comportamenti strani piuttosto subdoli che possono fregarti in qualsiasi momento. L’origine del problema non è tanto di chi lo utilizza (oddio magari sì se il programmatore di turno intende sviluppare qualcosa di un certo spessore o livello, ma mica tutti hanno certe pretese), quanto dell’implementazione di PHP che per certi versi ne ha dentro di cotte e di crude.

    Lobo: sì sì, anzi per forumizzarlo meglio se potessi metterei quelle belle signature con immagini da 400KB l’una e lunghe 1KM :p

  11. vb:

    Fantastico! Devo fare più spesso post da nerd, funzionano un casino!

  12. BlindWolf:

    @vb: quelli sul Lidl funzionano ancora di più

    @NRK: ogni linguaggio ha le sue depravazioni (ed il C lo dichiara esplicitamente…). Lo Shuttle Challenger è esploso anche per colpa di una depravazione sintattica del Fortran.

  13. simonecaldana:

    Il primo Ariane5 si era autodistrutto per un qui-pro-quo su una funzione Ada (ma li’ non era propriamente colpa del linguaggio, anche se un supporto per NaN avrebbe fatto risparmiare un tot di soldi…).

  14. MCP:

    E’ l’effetto Punto Informatico: i suoi forum sono frequentatissimi e anche la minima notizia tecnica d i tre righe scatena torme di nerd. Purtroppo la maggior parte sono nerd flammeggianti che non hanno mai superato la fase “Mio Vs. Tuo”, e quindi le discussioni degenerano quasi tutte, ma si sa: nessuno e’ perfetto.

  15. BlindWolf:

    @simonecaldana: in effetti Ada ha la fama di essere molto robusto. Ma nel caso dell’Ariane5 un integer era andato in overflow…

    @MCP: è per questo che io ho preso le seguenti precauzioni relativamente a Punto Informatico (che leggo tutti i giorni e lo reputo ben fatto):
    1) elaboro il feed con uno script PHP in modo di avere tutta la notizia (nella versione stapabile) nel feed, anzichè solo l’intestazione
    2) se accedo al sito tramite Firefox ho lo script GreaseMonkey che mi rimuove la tabellina “le ultime dal forum”.
    In questo modo evito di leggere i deliri di troppi trolloni.

    BTW, ci sono in Italia 2 siti che se la danno ancora di santa ragione sull’argomento “è meglio lo Spectrum o il Commodore 64?”.

  16. Lobo:

    Decisamente il C64.

  17. simonecaldana:

    @Blindwolf: no, una funzione restituiva un valore numerico oppure -1 in caso di errore. Il chiamante non controllava la condizione di errore e usava -1 (ma unsigned, quindi MAXINT/2) in elaborazioni successive.
    Il risultato ha fatto scattare gli allarmi di integrita’ sul primo computer. L’unita’ di controllo lo ha messo offline e ha rifatto l’elaborazione sul secondo computer. Essendo l’errore deterministico ed essendo terminati i computer l’unita’ di controllo ha autodistrutto il prototipo del piu’ moderno grande vettore esistente.

    La storia e una analisi dal punto di vista tecnio e progettuale del problema e’ stata pubblicata su un vecchio numero di Computer Programming. Quell’articolo valeva piu’ di un corso di ingegneria informatica.

 
Creative Commons License
Questo sito è (C) 1995-2024 di Vittorio Bertola - Informativa privacy e cookie
Alcuni diritti riservati secondo la licenza Creative Commons Attribuzione - Non Commerciale - Condividi allo stesso modo
Attribution Noncommercial Sharealike