Sky
Vittorio vb Bertola
Wandering on the Web since 1995

Fri 3 - 12:51
Hello, unidentified human being!
Italiano English Piemonteis
home
home
home
about me
about me
site help
site help
site news
site news
license
license
contact me
contact me
blog
near a tree [it]
near a tree [it]
old blogs
old blogs
personal
documents
documents
photos
photos
videos
videos
music
music
activities
net governance
net governance
town council
town council
software
software
help
howto
howto
internet faq
internet faq
usenet & faqs
usenet & faqs
stuff
piemonteis
piemonteis
conan
conan
mononoke hime
mononoke hime
ancient software
ancient software
biz
consultancy
consultancy
talks
talks
job placement
job placement
business angel
business angel
sites & software
sites & software
admin
login
login
your vb
your vb
register
register
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
This site (C) 1995-2020 by Vittorio Bertola - Privacy and cookies information
Some rights reserved according to the Creative Commons Attribution - Non Commercial - Sharealike license
Attribution Noncommercial Sharealike