|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#181 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
|
|
|
|
|
#182 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Comunque chiunque ne capisce qualcosa di architetture e Sistemi Operativi capisce che quella frase lascia il tempo che trova. Come ho detto prima, qualunque cosa avesse o non avesse detto Bill Gates al tempo e' ininfluente. Avrebbe potuto pensare che 640k andavano bene, come anche che andassero bene 64k o non bastassero 4GB. Tanto la decisione su quanta RAM poter montare e quindi indirizzare con il suo DOS non stava a lui ma alla Intel e alla IBM. La quale non ha limitato l'indirizzamento a 1MB perche' gli piaceva cosi'. Semplicemente se oggi portare 1 segnale e poi anche un pin in piu' di Address Bus costa qualcosa, allora costava molto ma molto di piu'. Non per niente il databus dell 8086 era addirittura in comune con l'address bus (con somma gioia dei memory controller)
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#183 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Internamente poteva benissimo usare i registri di segmento come facevano tante altre architetture a 16 bit dell'epoca: come BANCHI di memoria e non come aree sovrapponibili. Quindi indirizzando "linearmente" la memoria (potenzialmente fino a 4GB internamente). Tra l'altro non avrebbe avuto neppure la necessità di aggiungere un sommatore in ogni parte del chip in cui doveva esserci la logica di generazione dell'indirizzo della memoria fisica, risparmiando ulteriori transistor. Esternamente poi poteva tranquillamente continuare limitare il numero di bit di indirizzamento a 20, e continuare a indirizzare soltanto 1MB di memoria, come facevano già altre architetture (esempio la Motorola, che col 68000 "troncava" gli indirizzi a 24 bit e col 68008 a 20 bit, e col 68010 a 30 bit, ma internamente rimanevano sempre a 32 bit). Alla Intel gli ingegneri dovevano essere masochisti autolesionisti, visto che hanno continuato a fare cazzate anche con gli altri processori (vedi 286, a che indirizzava virtualmente 24 bit: gran passaggio quello da 20 a 24 bit, non c'è che dire).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
|
|
|
|
|
#184 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quoto tutto. L'ho sempre pensato anche io.
Anche se forse adesso avremmo ancora i 16bit e neppure i 32, altro che i 64. E magari saremmo tutti piu' contenti e piu' veloci. Ma forse no. Boh.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#185 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Il passaggio ai 32 bit sarebbe arrivato ugualmente, e probabilmente negli stessi tempi: è il codice che spinge verso certe soluzioni architetturali, man mano che le esigenze cambiano (e si "complicano" le cose da fare).
Per il resto, sarei stato MOLTO più felice sicuramente da un'architettura "più lineare", e penso che anche la velocità ne avrebbe giovato (un'architettura meno complicata è più facile da "spingere" in termini di velocità di esecuzione).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#186 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
La prima dice ad esempio che non si deve adeguare solo il programmatore, ma anche il framework che usa (e, in conclusione, la libreria standard del linguaggio), perche' altrimenti farlo diventa una perdita di tempo che non porta vantaggi. E' se non altro fattibile, in generale, senza portare tanti cambiamenti al linguaggio. Un buon esempio e' il lisp, che viene geralmente considerato funzionale, ma in realta' e' multiparadigma (il goto esiste anche in lisp ), solo che ha come "right default" l'approccio funzionale. In generale ci cascano dentro un po' tutti i linguaggi funzionali, compresi quelli non puri, visto che, quando non si tratta di side-effects, tendono verso questo approccio.La seconda e' ben ancora peggiore, in quanto dice ci deve essere una distinzione netta tra funzioni(/metodi) con side effects e quelle che non ce l'hanno, che una funzione che prende una stringa e la converte in numero e' sostanzialmente diversa da una che quel numero te lo ritorna da un file, perche' quest'ultima interagisce con il mondo esterno e non puoi usarla quando vuoi in vece della prima. Questa distinzione la fanno pochissimi linguaggi mainstream (Haskell e mi sembra Clean) e, oltre a cambiare radicalmente il modo in cui ci programma, e' difficile da aggiungere in modo ragionevole ad un linguaggio senza cambiarlo profondamente
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#187 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Ma poi un linguaggio puramente funzionale è ben difficile da programmare: ti costringe a tanti "contorsionismi" che con linguaggi già non puramente funzionali (è sufficiente l'operazione di assegnazione per rendere la vita più facile
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#188 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Alcune cose sono piu' complesse, altre piu' semplici. In un linguaggio puramente funzionale alcune cose come iteratori, revisioning (tenere vecchie versioni di un oggetto) vengono praticamente gratis. La memoria viene allocata e condivisa tra oggetti diversi automaticamente. Altre cose sono proprio impossibili da ottenere o richiedono algoritmi differenti (le code ad esempio) Ovvio che per chi e' abituato in modo diverso sono contorsionismi. In ogni caso trovo che una volta presa mano i vantaggi siano notevoli, soprattutto quando ci si rende conto di quanto sforzo mentali porti via il dover considerare i side effects. Attenzione comunque che sopra non si parlava di linguaggi puramente funzionali, ma di preferire la programmare in modo puramente funzionale quando possibile. Quel che volevo dire quanto questo sia possibile dipende molto dal supporto che viene dal linguaggio e dalla sua libreria. In python ad esempio possiamo considerare la list comprehension come qualcosa di puramente funzionale, ma d'altra parte il metodo sort delle liste non lo e', per cui uno dovrebbe farsi sempre una copia della lista prima di ordinarla.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#189 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Esattamente, ma spesso si opera in locale, cioé non è necessario mantenere anche la vecchia lista.
Per un approccio puramente funzionale basta usare la funzione built-in sorted(). Comunque all'università non mi sono trovato male con la programmazione funzionale, e il mio prof. di linguaggi di programmazione (il mitico Giovanni Gallo Debbo dire che ho apprezzato e mi affascina molto, tanto che spesso tendo a esagerare (e Fran per questo mi prende a mazzate un giorno sì, e l'altro pure ).Soprattutto mi affascina il fatto che con la programmazione funzionale pura è più facile testare la correttezza del codice.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#190 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Per ritornare in topic ho trovato goto anche nel codice per creazione dei processi e in quasi tutti i metodi dei Socket.
Ah e chi sostiene che con la programmazione ad oggetti eviti gli if? Vedo sempre controlli del tipo Codice:
if (nonRispettaIRequisiti) throw EccezioneDiQualcheTipo() |
|
|
|
|
|
#191 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Ne avevemo già parlato del perché serva almeno un if: http://www.hwupgrade.it/forum/showpo...4&postcount=48
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#192 | ||
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
E quotando il tuo post: Quote:
|
||
|
|
|
|
|
#193 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non è certo la stessa cosa che ripetere gli n controlli necessari per tutti i "livelli"...
Comunque quelli che riporti sono ovviamente slogan: la programmazione OOP non può eliminare gli if, ma certamente contribuisce, se ben usata, a ridurli anche di molto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#194 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Assolutamente no. Dipende dal design del codice.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#195 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
E questo design come lo definiresti?
Codice:
if (this.disposed)
{
throw new ObjectDisposedException(base.GetType().Name);
}
if (!string.IsNullOrEmpty(startInfo.UserName) || (startInfo.Password != null))
{
throw new InvalidOperationException(SR.GetString("CantStartAsUser"));
}
if ((startInfo.RedirectStandardInput || startInfo.RedirectStandardOutput) || startInfo.RedirectStandardError)
{
throw new InvalidOperationException(SR.GetString("CantRedirectStreams"));
}
if (startInfo.StandardErrorEncoding != null)
{
throw new InvalidOperationException(SR.GetString("StandardErrorEncodingNotAllowed"));
}
if (startInfo.StandardOutputEncoding != null)
{
throw new InvalidOperationException(SR.GetString("StandardOutputEncodingNotAllowed"));
}
if (startInfo.environmentVariables != null)
{
throw new InvalidOperationException(SR.GetString("CantUseEnvVars"));
}
Codice:
ShellExecuteHelper helper = new ShellExecuteHelper(executeInfo);
if (helper.ShellExecuteOnSTAThread())
{
goto Label_0304;
}
int errorCode = helper.ErrorCode;
if (errorCode != 0)
{
goto Label_0282;
}
long hInstApp = (long) executeInfo.hInstApp;
if (hInstApp <= 8L)
{
if (hInstApp < 2L)
{
goto Label_0276;
}
switch (((int) (hInstApp - 2L)))
{
case 0:
errorCode = 2;
goto Label_0282;
case 1:
errorCode = 3;
goto Label_0282;
case 2:
case 4:
case 5:
goto Label_0276;
case 3:
errorCode = 5;
goto Label_0282;
case 6:
errorCode = 8;
goto Label_0282;
}
}
if ((hInstApp <= 0x20L) && (hInstApp >= 0x1aL))
{
switch (((int) (hInstApp - 0x1aL)))
{
case 0:
errorCode = 0x20;
goto Label_0282;
case 1:
goto Label_0276;
case 2:
case 3:
case 4:
errorCode = 0x484;
goto Label_0282;
case 5:
errorCode = 0x483;
goto Label_0282;
case 6:
errorCode = 0x485;
goto Label_0282;
}
}
Label_0276:
errorCode = (int) executeInfo.hInstApp;
Label_0282:
throw new Win32Exception(errorCode);
Ultima modifica di tomminno : 07-04-2008 alle 14:57. |
|
|
|
|
|
#196 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Cosi':
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#197 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#198 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Se mi passa sotto gli occhi una catena di if cosi' ad una review, io non faccio fare il commit. E puo' piangere in tutte le lingue che vuole.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#199 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Però scusa il null object pattern non solleva eccezioni, semplicemente crea un oggetto che non fa niente, ma come farebbe il framework a sollevarti una eccezione? E' chiaro che deve controllare se un oggetto è nullo, se il valore è fuori range ecc... E questo lo può fare solo con una catena di if che controlli che ogni parametro passato non sia nullo, ecc... |
|
|
|
|
|
|
#200 | ||
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Quote:
Codice:
Redirector redirector = object.GetRedirector();
redirector.WriteSomething("bla bla bla");
Codice:
class NullRedirector: public Redirector
{
...
void WriteSomething(String string)
{
throw NOOOOWAYException("WriteSomething called on a NullRedirector, you twat");
}
}
Good design is simple and communicate intensions well and clearly.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:14.












), solo che ha come "right default" l'approccio funzionale. In generale ci cascano dentro un po' tutti i linguaggi funzionali, compresi quelli non puri, visto che, quando non si tratta di side-effects, tendono verso questo approccio.








