Sky
Vittorio vb Bertola
Fasendse vëdde an sla Ragnà dal 1995

Giò 25 - 8:15
Cerea, përson-a sconòssua!
Italiano English Piemonteis
chi i son
chi i son
guida al sit
guida al sit
neuve ant ël sit
neuve ant ël sit
licensa
licensa
contatame
contatame
blog
near a tree [it]
near a tree [it]
vej blog
vej blog
përsonal
papé
papé
fotografie
fotografie
video
video
musica
musica
atività
net governance
net governance
consej comunal
consej comunal
software
software
agiut
howto
howto
internet faq
internet faq
usenet e faq
usenet e faq
autre ròbe
ël piemonteis
ël piemonteis
conan
conan
mononoke hime
mononoke hime
vej programa
vej programa
travaj
consulense
consulense
conferense
conferense
treuvo travaj
treuvo travaj
angel dj'afé
angel dj'afé
sit e software
sit e software
menagé
login
login
tò vb
tò vb
registrassion
registrassion
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
Cost sit a l'è (C) 1995-2024 ëd Vittorio Bertola - Informassion sla privacy e sij cookies
Certidun drit riservà për la licensa Creative Commons Atribussion - Nen comersial - Condivide parej
Attribution Noncommercial Sharealike