<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Dieci buoni motivi per non utilizzare PHP</title>
	<atom:link href="http://www.andreagrandi.it/2008/10/09/dieci-buoni-motivi-per-non-utilizzare-php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andreagrandi.it/2008/10/09/dieci-buoni-motivi-per-non-utilizzare-php/</link>
	<description>Pensieri, progetti e qualche informazione su di me</description>
	<lastBuildDate>Sat, 04 Feb 2012 10:37:59 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Francesco</title>
		<link>http://www.andreagrandi.it/2008/10/09/dieci-buoni-motivi-per-non-utilizzare-php/comment-page-1/#comment-68713</link>
		<dc:creator>Francesco</dc:creator>
		<pubDate>Fri, 06 Jan 2012 14:23:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.andreagrandi.it/?p=129#comment-68713</guid>
		<description>Mi sono imbattuto per caso nel tuo articolo, sono uno sviluppatore di applicazioni Web; sono passato da ASP prima, poi ASP.NET e infine a PHP e devo dire di essere proprio felice della scelta!
Potrei dilungarmi a confutare le tue affermazioni, ma dico una sola cosa: se PHP fa così schifo perchè il tuo Blog è su WordPress??? WordPress è un&#039;applicazione scritta in PHP!!!</description>
		<content:encoded><![CDATA[<p>Mi sono imbattuto per caso nel tuo articolo, sono uno sviluppatore di applicazioni Web; sono passato da ASP prima, poi ASP.NET e infine a PHP e devo dire di essere proprio felice della scelta!<br />
Potrei dilungarmi a confutare le tue affermazioni, ma dico una sola cosa: se PHP fa così schifo perchè il tuo Blog è su WordPress??? WordPress è un&#8217;applicazione scritta in PHP!!!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Arialdo Martini</title>
		<link>http://www.andreagrandi.it/2008/10/09/dieci-buoni-motivi-per-non-utilizzare-php/comment-page-1/#comment-485</link>
		<dc:creator>Arialdo Martini</dc:creator>
		<pubDate>Wed, 15 Oct 2008 11:34:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.andreagrandi.it/?p=129#comment-485</guid>
		<description>Premessa. NON amo PHP, pur usandolo da anni per lavoro. NON lo ritengo un bel linguaggio.

Purtuttavia, mi sento di dovere delle precisazioni su quando scrivi.

Partiamo da quello che condivido:

4. Nessun supporto ai Namespace

Vero. Odioso.
L&#039;attuale versione 5.2 NON supporta i namespace, che però sono supportati dalla 5.3, in alfa stage, scaricabile da qui http://downloads.php.net/pierre/

6. Inconsistenza nei nomi delle funzioni
Vero. Vergognoso.







Quanto invece ritengo contestabile, poco preciso o decisamente sbagliato sono i punti seguenti:


1. Ricorsione?! Chi era costei…

La ricorsione, in ogni sua implementazione ed in ogni linguaggio, è una tecnica avida di risorse. Non esiste linguaggio o sistema al mondo che permetta una profondità di ricorsione arbitraria. Durante la ricorsione il sistema deve memorizzare, normalmente nello stack, i parametri della funzione che chiama se&#039; stessa, un numero di volte pari alle istanze chiamate. Wikipedia riporta:

&quot;La ricorsione ha un vantaggio fondamentale: permette di scrivere poche linee di codice per risolvere un problema anche molto complesso. Tuttavia essa ha anche un enorme svantaggio: le prestazioni.

Infatti la ricorsione genera una quantità enorme di overhead, occupando lo stack per un numero di istanze pari alle chiamate della funzione che è necessario effettuare per risolvere il problema. Funzioni che occupano una grossa quantità di spazio in memoria, pur potendo essere implementate ricorsivamente, potrebbero dare problemi a tempo di esecuzione. Inoltre la ricorsione impegna comunque il processore in maniera maggiore per popolare e distruggere gli stack

Pertanto, se le prestazioni sono obiettivo principale del programma e non si dispone di sufficiente memoria, si consiglia di non utilizzare la ricorsione.&quot;

http://it.wikipedia.org/wiki/Algoritmo_ricorsivo



E&#039; chiaro che PHP (come ogni altro linguaggio server side), dovendo girare in un contesto di multiutenza rispondendo a decine se non decine di migliaia di richieste, non dovrebbe permettere che un algoritmo che faccia uso pesante della ricorsione esaurisca la memoria del server, riempiendo lo stack o lo heap. Prima che il server si pianti per un algoritmo con una cattiva architettura, PHP (come molti altri linguaggi) permette di definire un limite di memoria utilizzabile per processi come la ricorsione.

Vuoi usare 200MB per la ricorsione?
ini_set(&#039;memory_limit&#039;, &#039;200M&#039;);


PHP permette anche di eliminare (a discrezione dell&#039;amministratore) il limite di cui parli

Basta un
ini_set(&#039;memory_limit&#039;, &#039;-1&#039;);

Ma l&#039;idea di base dovrebbe essere: se il tuo algoritmo ricorsivo ha bisogno di 200MB ad istanza significa che è scritto male ed è *un bene* che esista un limite (parametrizzabile ed opzionale) al consumo indiscriminato di memoria.

Mi spiego meglio.

L&#039;esempio del Quick Sort è illuminante.
Quick Sort è stato inventato (ed è tuttora definito) in termini ricorsivi.
Tuttavia, la sua implementazione ricorsiva è utilizzata solo per scopi didattici, perché è così avida di memoria da incorrere in stack overflow anche per pochi dati.
Tutte le implementazioni di QuickSort (compresa quella di PHP) sono quicksort iterativi.
Di nuovo, l&#039;idea è che se nel programma si sta usando un algoritmo di sort capace di bruciare megabyte di memoria, si sta lavorando male e, *fortunatamente*, PHP permette di porre dei limiti di consumi di memoria prima di mandare in palla il server.



2. Molti moduli PHP non sono thread safe


Vero. Come è vero per tutti i linguaggi di questa terra. Per Ruby, ad esempio.

C&#039;è un po&#039; di confusione sui binari thread safe e i binari non thread safe di PHP. L&#039;articolo sotto dovrebbe mettere un po&#039; di chiarezza

http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries

In brevissimo, PHP può essere completamente thread safe.
Ovviamente nessuna garanzia può essere fornita su moduli di terze parti, come del resto non può essere fornita per nessun altro linguaggio (Ruby è thread safe, Ruby On Rails e Camping no, a differenza di altri framework per Ruby come Og + Nitro e Merb).

Il suggerimento migliore è usare FastCGI, che permette di usare il multithreading senza incorrere nei problemi di thread.



3. PHP è azzoppato per motivi commerciali

Questa è semplicemente una leggenda metropolitana.
Zend pubblica PHP sotto licenza BSD. PHP ha nativamente lo Zend Engine, esattamente come la versione distribuita da Zend.
Ovvero, NON esiste differenza tra il PHP di Zend e il PHP che hai installato sul tuo PC.

Il refuso nasce dal fatto che Zend vende un&#039;estensione chiamata Zend Optimizer, un prodotto completamente separato da PHP che può essere acquistato ed usato con PHP (cioè, con l&#039;unica versione esistente di PHP).

Alla stregua di Zend Optimizer esistono altri prodotti (commerciali ed open source) che forniscono metodi di accelerazione. Uno dei migliori, APC, è open source e fornisce prestazioni molto superiori rispetto a Zend Optimizer.

Sarebbe bene chiudere con questa storia della versione azzoppata di PHP, perché non ha alcun fondamento.





5. Caratteri di formattazione delle date non standard

Non è vero.
Basta cercare bene ;)

http://www.php.net/manual/en/function.strftime.php



7. Assenza di un framework integrato

Temo questo punto sia completamente mal posto.
Forse Ruby ha un framework integrato? Ruby e Ruby On Rails sono due progetti separati, tanto che su Ruby si può decidere di utilizzare un framework differente (Camping, ad esempio).

E cosa significa &quot;integrato&quot;? Incluso nel core? Quale linguaggio possidere un framework integrato? Java? C++? Il fatto che &quot;altri linguaggi con Ruby o Python ci hanno ormai abituati a framework come Rails e Django&quot; non significa che questi siano integrati.
E, aggiungerei: fortunatamente! Perché io voglio scegliere quale framework usare.

E&#039; anche contestabile l&#039;affermazione &quot;le cose sono in miglioramento anche su PHP, grazie a framework come CakePHP o Symfony&quot;.

CakePHP è solo di un anno più giovane rispetto a RoR. PEAR, un altro framework MVC molto molto esteso e completo, per PHP, esiste dal 1999, anni prima che i framework che citi fossero anche solo stati concepiti.

E, se vogliamo proprio fare le pulci agli altri linguaggi, andrebbe anche detto che per PHP esistono qualcosa come 60 framework, contro la 15ina di Python e la decina per Ruby.



8. Mancanza del supporto Unicode

Non vero.
Dal manuale: http://www.phpbuilder.com/manual/en/ref.unicode.php


9. Lentezza

Non è così vero.
Andrebbe tenuto conto che PHP è un linguaggio di scripting e pertanto aspettarsi benchmark peggiori rispetto a linguaggi compilati. Infatti, PHP scompare accanto a C++ (come del resto scompaiono Ruby ed altri linguaggi di script).



Tuttavia alcuni test potrebbero stupire.

E&#039; più veloce e più parsimonioso nel consumo di memoria di Ruby e un po&#039; meno di Python.
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=ruby&amp;lang2=php

Ha grosso modo la stessa velocità e lo stesso consumo di memoria di Perl
http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&amp;lang=php


Con APC la situazione migliora ulteriormente.
Direi, insomma, che PHP si colloca, come prestazioni, come altri linguaggi di script (con la possibilità di miglioramenti tramite acceleratori).
In contesti di uso di framework, invece, è decisamente più performante di Ruby.





Che poi PHP sia un brutto linguaggio, convengo con te. Ma non per i motivi da te riportati.
Ciao!</description>
		<content:encoded><![CDATA[<p>Premessa. NON amo PHP, pur usandolo da anni per lavoro. NON lo ritengo un bel linguaggio.</p>
<p>Purtuttavia, mi sento di dovere delle precisazioni su quando scrivi.</p>
<p>Partiamo da quello che condivido:</p>
<p>4. Nessun supporto ai Namespace</p>
<p>Vero. Odioso.<br />
L&#8217;attuale versione 5.2 NON supporta i namespace, che però sono supportati dalla 5.3, in alfa stage, scaricabile da qui <a href="http://downloads.php.net/pierre/" rel="nofollow">http://downloads.php.net/pierre/</a></p>
<p>6. Inconsistenza nei nomi delle funzioni<br />
Vero. Vergognoso.</p>
<p>Quanto invece ritengo contestabile, poco preciso o decisamente sbagliato sono i punti seguenti:</p>
<p>1. Ricorsione?! Chi era costei…</p>
<p>La ricorsione, in ogni sua implementazione ed in ogni linguaggio, è una tecnica avida di risorse. Non esiste linguaggio o sistema al mondo che permetta una profondità di ricorsione arbitraria. Durante la ricorsione il sistema deve memorizzare, normalmente nello stack, i parametri della funzione che chiama se&#8217; stessa, un numero di volte pari alle istanze chiamate. Wikipedia riporta:</p>
<p>&#8220;La ricorsione ha un vantaggio fondamentale: permette di scrivere poche linee di codice per risolvere un problema anche molto complesso. Tuttavia essa ha anche un enorme svantaggio: le prestazioni.</p>
<p>Infatti la ricorsione genera una quantità enorme di overhead, occupando lo stack per un numero di istanze pari alle chiamate della funzione che è necessario effettuare per risolvere il problema. Funzioni che occupano una grossa quantità di spazio in memoria, pur potendo essere implementate ricorsivamente, potrebbero dare problemi a tempo di esecuzione. Inoltre la ricorsione impegna comunque il processore in maniera maggiore per popolare e distruggere gli stack</p>
<p>Pertanto, se le prestazioni sono obiettivo principale del programma e non si dispone di sufficiente memoria, si consiglia di non utilizzare la ricorsione.&#8221;</p>
<p><a href="http://it.wikipedia.org/wiki/Algoritmo_ricorsivo" rel="nofollow">http://it.wikipedia.org/wiki/Algoritmo_ricorsivo</a></p>
<p>E&#8217; chiaro che PHP (come ogni altro linguaggio server side), dovendo girare in un contesto di multiutenza rispondendo a decine se non decine di migliaia di richieste, non dovrebbe permettere che un algoritmo che faccia uso pesante della ricorsione esaurisca la memoria del server, riempiendo lo stack o lo heap. Prima che il server si pianti per un algoritmo con una cattiva architettura, PHP (come molti altri linguaggi) permette di definire un limite di memoria utilizzabile per processi come la ricorsione.</p>
<p>Vuoi usare 200MB per la ricorsione?<br />
ini_set(&#8216;memory_limit&#8217;, &#8217;200M&#8217;);</p>
<p>PHP permette anche di eliminare (a discrezione dell&#8217;amministratore) il limite di cui parli</p>
<p>Basta un<br />
ini_set(&#8216;memory_limit&#8217;, &#8216;-1&#8242;);</p>
<p>Ma l&#8217;idea di base dovrebbe essere: se il tuo algoritmo ricorsivo ha bisogno di 200MB ad istanza significa che è scritto male ed è *un bene* che esista un limite (parametrizzabile ed opzionale) al consumo indiscriminato di memoria.</p>
<p>Mi spiego meglio.</p>
<p>L&#8217;esempio del Quick Sort è illuminante.<br />
Quick Sort è stato inventato (ed è tuttora definito) in termini ricorsivi.<br />
Tuttavia, la sua implementazione ricorsiva è utilizzata solo per scopi didattici, perché è così avida di memoria da incorrere in stack overflow anche per pochi dati.<br />
Tutte le implementazioni di QuickSort (compresa quella di PHP) sono quicksort iterativi.<br />
Di nuovo, l&#8217;idea è che se nel programma si sta usando un algoritmo di sort capace di bruciare megabyte di memoria, si sta lavorando male e, *fortunatamente*, PHP permette di porre dei limiti di consumi di memoria prima di mandare in palla il server.</p>
<p>2. Molti moduli PHP non sono thread safe</p>
<p>Vero. Come è vero per tutti i linguaggi di questa terra. Per Ruby, ad esempio.</p>
<p>C&#8217;è un po&#8217; di confusione sui binari thread safe e i binari non thread safe di PHP. L&#8217;articolo sotto dovrebbe mettere un po&#8217; di chiarezza</p>
<p><a href="http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries" rel="nofollow">http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries</a></p>
<p>In brevissimo, PHP può essere completamente thread safe.<br />
Ovviamente nessuna garanzia può essere fornita su moduli di terze parti, come del resto non può essere fornita per nessun altro linguaggio (Ruby è thread safe, Ruby On Rails e Camping no, a differenza di altri framework per Ruby come Og + Nitro e Merb).</p>
<p>Il suggerimento migliore è usare FastCGI, che permette di usare il multithreading senza incorrere nei problemi di thread.</p>
<p>3. PHP è azzoppato per motivi commerciali</p>
<p>Questa è semplicemente una leggenda metropolitana.<br />
Zend pubblica PHP sotto licenza BSD. PHP ha nativamente lo Zend Engine, esattamente come la versione distribuita da Zend.<br />
Ovvero, NON esiste differenza tra il PHP di Zend e il PHP che hai installato sul tuo PC.</p>
<p>Il refuso nasce dal fatto che Zend vende un&#8217;estensione chiamata Zend Optimizer, un prodotto completamente separato da PHP che può essere acquistato ed usato con PHP (cioè, con l&#8217;unica versione esistente di PHP).</p>
<p>Alla stregua di Zend Optimizer esistono altri prodotti (commerciali ed open source) che forniscono metodi di accelerazione. Uno dei migliori, APC, è open source e fornisce prestazioni molto superiori rispetto a Zend Optimizer.</p>
<p>Sarebbe bene chiudere con questa storia della versione azzoppata di PHP, perché non ha alcun fondamento.</p>
<p>5. Caratteri di formattazione delle date non standard</p>
<p>Non è vero.<br />
Basta cercare bene <img src='http://www.andreagrandi.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://www.php.net/manual/en/function.strftime.php" rel="nofollow">http://www.php.net/manual/en/function.strftime.php</a></p>
<p>7. Assenza di un framework integrato</p>
<p>Temo questo punto sia completamente mal posto.<br />
Forse Ruby ha un framework integrato? Ruby e Ruby On Rails sono due progetti separati, tanto che su Ruby si può decidere di utilizzare un framework differente (Camping, ad esempio).</p>
<p>E cosa significa &#8220;integrato&#8221;? Incluso nel core? Quale linguaggio possidere un framework integrato? Java? C++? Il fatto che &#8220;altri linguaggi con Ruby o Python ci hanno ormai abituati a framework come Rails e Django&#8221; non significa che questi siano integrati.<br />
E, aggiungerei: fortunatamente! Perché io voglio scegliere quale framework usare.</p>
<p>E&#8217; anche contestabile l&#8217;affermazione &#8220;le cose sono in miglioramento anche su PHP, grazie a framework come CakePHP o Symfony&#8221;.</p>
<p>CakePHP è solo di un anno più giovane rispetto a RoR. PEAR, un altro framework MVC molto molto esteso e completo, per PHP, esiste dal 1999, anni prima che i framework che citi fossero anche solo stati concepiti.</p>
<p>E, se vogliamo proprio fare le pulci agli altri linguaggi, andrebbe anche detto che per PHP esistono qualcosa come 60 framework, contro la 15ina di Python e la decina per Ruby.</p>
<p>8. Mancanza del supporto Unicode</p>
<p>Non vero.<br />
Dal manuale: <a href="http://www.phpbuilder.com/manual/en/ref.unicode.php" rel="nofollow">http://www.phpbuilder.com/manual/en/ref.unicode.php</a></p>
<p>9. Lentezza</p>
<p>Non è così vero.<br />
Andrebbe tenuto conto che PHP è un linguaggio di scripting e pertanto aspettarsi benchmark peggiori rispetto a linguaggi compilati. Infatti, PHP scompare accanto a C++ (come del resto scompaiono Ruby ed altri linguaggi di script).</p>
<p>Tuttavia alcuni test potrebbero stupire.</p>
<p>E&#8217; più veloce e più parsimonioso nel consumo di memoria di Ruby e un po&#8217; meno di Python.<br />
<a href="http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&#038;lang=ruby&#038;lang2=php" rel="nofollow">http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&#038;lang=ruby&#038;lang2=php</a></p>
<p>Ha grosso modo la stessa velocità e lo stesso consumo di memoria di Perl<br />
<a href="http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&#038;lang=php" rel="nofollow">http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&#038;lang=php</a></p>
<p>Con APC la situazione migliora ulteriormente.<br />
Direi, insomma, che PHP si colloca, come prestazioni, come altri linguaggi di script (con la possibilità di miglioramenti tramite acceleratori).<br />
In contesti di uso di framework, invece, è decisamente più performante di Ruby.</p>
<p>Che poi PHP sia un brutto linguaggio, convengo con te. Ma non per i motivi da te riportati.<br />
Ciao!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrea Grandi</title>
		<link>http://www.andreagrandi.it/2008/10/09/dieci-buoni-motivi-per-non-utilizzare-php/comment-page-1/#comment-470</link>
		<dc:creator>Andrea Grandi</dc:creator>
		<pubDate>Thu, 09 Oct 2008 20:30:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.andreagrandi.it/?p=129#comment-470</guid>
		<description>@Tabris: i namespace in verità sono stati appena introdotti nella 5.3 che però è ancora in ALPHA e quindi non rilasciata come stabile. Purtroppo anche se ci sono le classi, senza namespace che li separa non puoi avere due classe diverse con un nome uguale di metodo :(</description>
		<content:encoded><![CDATA[<p>@Tabris: i namespace in verità sono stati appena introdotti nella 5.3 che però è ancora in ALPHA e quindi non rilasciata come stabile. Purtroppo anche se ci sono le classi, senza namespace che li separa non puoi avere due classe diverse con un nome uguale di metodo <img src='http://www.andreagrandi.it/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tabris</title>
		<link>http://www.andreagrandi.it/2008/10/09/dieci-buoni-motivi-per-non-utilizzare-php/comment-page-1/#comment-469</link>
		<dc:creator>Tabris</dc:creator>
		<pubDate>Thu, 09 Oct 2008 20:27:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.andreagrandi.it/?p=129#comment-469</guid>
		<description>Hai messo in luce alcuni punti che non conoscevo, ma per altri concordo pienamente con te: l&#039;eccessiva semplicità è dovuta alla mancanza di una linea teorica del linguaggio e questo lo rende un po&#039; il regno dei niubbi. Per i namespace probabilmente non sono stati introdotti perchè con le classi ce la si può cavare in modo simile... poi non so.</description>
		<content:encoded><![CDATA[<p>Hai messo in luce alcuni punti che non conoscevo, ma per altri concordo pienamente con te: l&#8217;eccessiva semplicità è dovuta alla mancanza di una linea teorica del linguaggio e questo lo rende un po&#8217; il regno dei niubbi. Per i namespace probabilmente non sono stati introdotti perchè con le classi ce la si può cavare in modo simile&#8230; poi non so.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

