|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
essendo io partito dal basic, so benissimo che si può essere dei mostri nell'implementare programmi senza sapere molto di come funziona il sistema a basso livello però se si vuole conoscere quel "basso livello" non c'è altra strada se non sporcarsi le mani con C e assembly |
|
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Conoscere i dettagli di basso livello non è più indispensabile, a meno che non si faccia un certo tipo di lavoro.
L'informatica tende sempre più verso l'alto livello, a raggiungere idealmente quello pseudocodice che da decenni viene usato per astrarre, eliminando proprio i dettagli di basso di livello.
__________________
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 |
|
|
|
|
|
#23 | |||||||
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
Quote:
Quote:
Quote:
E' la sintassi veramente barbara il dramma del VB... Quote:
Quote:
|
|||||||
|
|
|
|
|
#24 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
detto questo, beh, se si dev'essere degli esperti bisogna esserlo....nessun corso di laurea salta architettura dei calcolatori |
|
|
|
|
|
|
#25 | |||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
L'ultima volta che ho controllato il manuale del GCC è stato un po' di mesi fa, e non era totalmente compliant col C99.
Quote:
Oltre, si va direttamente di C++. Quote:
Quote:
Esperto <> laureato <> conoscente architettura degli elaboratori.
__________________
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 |
|||
|
|
|
|
|
#26 | ||||
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6333
|
Quote:
Quote:
Quote:
Ti lega alla piattaforma in cambio di una maggior velocità di codifica di applicazioni "una botta e via". Quote:
Se "possiedi il software" (nel senso che è tuo o che ne hai la responsabilità) è meglio evitare di legarsi mani e piedi ad un "fornitore di tool" con priorità e precedenti come quelli di Microsoft. |
||||
|
|
|
|
|
#27 | ||||
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
Quote:
Quote:
Non mi scandalizza tanto la riscrittura di librerie per un'altra piattaforma perchè se così non fosse saremmo ancora fermi a lavorare in C/C++ con i pro (pochi) ed i contro (tanti) che questo vuol dire. Quote:
So bene cosa ci sta dietro le quinte e cosa LINQ fa per me e forse proprio perchè lo so cosa fa posso dire di preferire la possibilità di scrivere una chiamata del genere al dover creare una routine che 1) esegua l'accesso al database, dopo aver validato i parametri da passare alla query e concatenato ad uopo le stringhe 2) esegua qualche elaborazione in memoria 3) crei il file xml certo, lo posso scrivere anche così, ma cosa ci guadagno? la possibilità di migrare questo codice? ma forse questo non è mai stato un requisito e quindi mi trovo un codice portabilissimo da 40/50 linee di codice (dipende da quanto vuoi sporcare il tuo portabilissimo codice). Se la portabilità non è un requisito, quel zuccherino sintattico mi sta più che bene perchè aumenta la mia produttività e la qualità del mio codice visto che assumo che il codice terzo che utilizzo (microsoft e non) sia stato testato. Quote:
Da un lato hai un framework che ti offre tantissima roba già pronta, una piattaforma web stabile ed in continua evoluzione, features sempre all'avanguardia che semplificano il lavoro di ogni giorno (per dirne una, abbiamo spostato un servizio remoto da una macchina remota alla stessa macchina e nel frattempo siamo passati da comunicazione SOAP a Named Pipes: 2 click on WCF), dall'altro hai la possibilità di avere il codice tuo e sapere che non verrà cambiato da qui all'estinzione della Città del Vaticano (perchè Microsoft ad ogni nuova release di .NET dà un 10 anni minimo di supporto, poca roba vero?). Cosa scegliamo? una bella CGI scritta in C++? Ripeto, non so con chi sto parlando, magari sei il CEO di Facebook o di chissà quale altro famoso sito, ma ad occhio mi sembra una di quelle discussioni che facevamo stesi a prendere il sole nel giardino dell'università dove i puristi del software libero e compilabile ovunque provavano a convincere quelli che con il software già ci portavano il pane a casa o comunque avevano una visione un po' più profonda della Lista a Puntatori fatta il giorno prima in laboratorio. Ma sono felice di essere smentito. |
||||
|
|
|
|
|
#28 | |||||
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6333
|
Quote:
Una riscrittura è decisamente più radicale di un porting (in cui dove possibile si cercano di evitare le riscritture complete). Ed in questo caso stai parlando pure di un cambio del linguaggio di codifica dei sorgenti. Quote:
Ci sono moltissime librerie scritte in C/C++ ed utilizzabili da altri linguaggi e pure dal runtime .Net senza essere costretti a riscrivere il tutto in C#. Persino .Net si appoggia su un fottio di librerie scritte in C/C++, pensa un po. Quote:
Dal mio punto di vista .Net non è "il male", ma più semplicemente sotto certi aspetti è nato male in origine e poi si sta evolvendo come è successo con il "vecchio" VB (tanto zucchero sintattico che con il tempo diventerà sempre più difficile da gestire). Ad esempio, il team di .Net ha sottovalutato in modo clamoroso l'importanza del codice unmanaged (con tutti i casini che comporta, basta vedere quanto hanno faticato per supportare anche i 64bit con il loro nuovo runtime "nato per essere portabile"), potevano prevedere "puntatori nativi" in modo esplicito e gestirli in modo molto più sicuro e portatile ed invece non hanno saputo fare di meglio che consigliare di usare interi a 64bit per memorizzare puntatori unamanaged in modo "portabile". Certo, se ti limiti a web application non ti accorgerai mai di simili limitazioni, ma ci sono e creano parecchi grattacapi quando ti devi interfacciare in modo non banale con codice unmanaged (ed in alcuni casi crea problemi anche quando la cosa in teoria sarebbe banale). Quote:
Ti lega alla piattaforma in cambio di una maggior velocità di codifica di applicazioni "una botta e via". Quote:
Più seriamente, io sviluppo applicazioni in ambito industriale, su Windows, Windows CE, Linux, ed anche firmware "senza sistema operativo" scritto in C ed assembly, attualmente dove possibile sui frontend utilizzo C++ e Qt, ma ho ancora parecchia roba legacy "in supporto prolungato" (inclusi frontend e tool vari scritti in VB6). Un settore molto diverso dal tuo sotto parecchi aspetti ma dove puoi star certo che se si usa un certo software o un certo linguaggio non è certo per motivazioni ideologiche. |
|||||
|
|
|
|
|
#29 | |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21933
|
Quote:
io personalmente piuttosto che imbarcamenarmi con qt e c++ uso tranquillamente .net per i backend e il c++ lo relego al firmware
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
|
#30 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6333
|
Dipende da che target hai in termini di clientela e tipologie di pacchetti software e soluzioni che proponi, non puoi "preferire" .Net se non può girare sull'hardware che ti permette di essere più competitivo sui grandi numeri, tanto per fare un esempio.
|
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Dipende, appunto, dai requisiti che hai, come diceva giustamente Kralizek. Se non ci sono impedimenti, e per un progetto puoi utilizzare strumenti più produttivi, perché non usarli? Solo perché sono diffusi su Windows? Non ha alcun senso.
Riguardo allo zucchero sintattico, poi, mi sembra una scusa oltre che un'argomentazione surreale. Qualunque linguaggio offre costrutti sintattici per semplificare la vita degli sviluppatori. E' la differenza che passa anche fra linguaggi di più basso livello e quelli di livello più alto. Te la sentiresti di sviluppare un'applicazione web in brainfuck? E' disponibile per qualunque piattaforma, dunque perché non adottarlo? Tra l'altro la teoria della computazione ha dimostrato che per essere Turing-completi basta una macchina in grado di eseguire tre sole istruzioni (incremento di un registro, azzeramento di un registro, salto se due registri sono diversi; ad esempio, ma ce possono essere altre "architetture" dotate sempre di 3 istruzioni, ma diverse). Se oggi uso (Iron)Python piuttosto che l'assembly x86, penso che avrò i miei buoni motivi. E se a lavoro mi diverto con le query di LINQ quando manipolo collezioni di dati, avrò anch'io i miei buoni motivi. Forse non mi piace scrivere PAPIRI per fare cose che si risolvono con un paio di righe LINQ, per pattern abbastanza ricorrenti nella programmazione di tutti giorni. Con ciò NON voglio dire che i linguaggi dovrebbero implementare qualunque costrutto sintattico; tutt'altro. Ma se la pratica dimostra la ricorrenza di certe situazioni, offrire uno strumento per risolvere velocemente il problema può essere una gran comodità, che comporta un miglioramento della produttività e, quindi, del time-to-market. D'altra parte il riuso del codice è un fondamento della programmazione. Si fa di tutto per astrarre e riutilizzarlo il più possibile. Strumenti come LINQ nascono apposta allo scopo: non reinventare ogni volta la ruota, ma semplificare notevolmente la scrittura di pattern comuni. In tutto ciò, pur con tutta la fantasia e la buona volontà, non riesco a capire come si possa parlare di maggior difficoltà di gestione del codice, quando il risultato ottenuto è l'esatto contrario: fra manutenere un paio di righe di codice, peraltro estremamente leggibili, col papiro equivalente, non c'è proprio paragone; ma a favore della prima soluzione! Questo "lega" a una determinata piattaforma? A parte che l'esistenza di progetti come Mono dimostra il contrario, mi viene in mente il ritornello di una celebre canzone di Celentano e di sua moglie: "siamo la coppia più bella del mondo, e ci dispiace per gli altri..." Come dicevo, se non vincoli di piattaforma e devo risolvere un problema prima possibile, non mi faccio alcuno scrupolo a utilizzare strumenti come questi. Sarei, al contrario, stupido a non farlo. Ovviamente si tratta di scelte che DEVONO tener conto della prospettiva futura in termini di supporto, manutenibilità ed estensione del codice. Cose che può garantire Microsoft per un lungo arco di tempo, come dimostra la storia. Non mi è nemmeno chiara la questione del codice unmanaged, dei 64 bit, e della memorizzazione dei puntatori. Anche perché fin dall'inizio .NET mette a disposizione un tipo intero (intptr, se non ricordo male il nome) che nasce proprio allo scopo. E anche la gestione del codice unmanaged non mi sembra roba dell'altro mondo (sebbene NON ne abbia mai fatto uso: mai sentita questa necessità, anche grazie alle reference e ai parametri di input/output). Pertanto condivido, e chiudo, anche il messaggio di !fazz.
__________________
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 |
|
|
|
|
|
#32 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
Quote:
|
|
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6333
|
Quote:
E' un escamotage aggiunto dopo che si sono accorti che a troppi sviluppatori (pure ai loro che mangiano pane e volpe) era necessario interfacciarsi in modo portabile con codice unmanaged. La prima soluzione ufficiale di Microsoft era stata del tipo: "Veh! Se volete la portabilita dei puntatori unamanaged usate interi a 64bit per memorizzarli in codice managed" Cioè avevano progettato una virtual machine ed un runtime "da zero" e non avevano minimamente considerato che prima o poi capita di dover "uscir fuori la dove ci sono puntatori ed handle" e che doveva essere fatto in modo portabile ed indipendente dalla piattaforma visto che .Net doveva essere multipiattaforma (all'interno delle piattaforme di Microsoft). Dopo hanno cercato di metterci una pezza proprio con IntPtr come "tipo standard per rappresentare puntatori ed handle" e non contenti hanno pure aggiunto UIntPtr ... sconsigliandone l'uso (per la serie: complichiamo anche la pezza). Non sto scherzando, nella documentazione si trova scritto: "Il tipo IntPtr è conforme a CLS, mentre il tipo UIntPtr non lo è. Solamente il tipo IntPtr viene utilizzato in Common Language Runtime. Il tipo UIntPtr viene fornito principalmente allo scopo di mantenere la simmetria di architettura con il tipo IntPtr." In ogni caso IntPtr serve solo come promemoria di "questo in realtà è un handle o un puntatore", ma non hai nessuna vera protezione o check aggiuntivo. Questa non-gestione è anche uno dei motivi per cui era usciti parecchio in ritardo con la versione a 64bit di .Net (tante bug legate alla dimensione dei puntatori). |
|
|
|
|
|
|
#34 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Scusami, ma io leggo questo:
Codice:
.NET Framework 1.1 Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework Se consideri tutte le versioni che ci sono state e quanto tempo è passato, non mi sembra una tragedia il fatto che sia stato messo a disposizione dalla 1.1, cioè circa UN anno dopo la 1.0. UIntPtr, poi, non è una pezza. In .NET tutti i tipi interi, di qualunque dimensione, sono disponibili signed o unsigned. Per cui è stato aggiunto anche questo, per "simmetria", come hanno sottolineato. Ma per lo scopo per cui è nato IntPtr, è sufficiente far uso soltanto di questo tipo. Anche qui, non mi sembra il caso di stracciarsi le vesti. Devi usare codice unmanaged? Usa IntPtr per infilarci i puntatori. Poi qual è il problema con la mancanza di protezione? Cosa ti saresti aspettato?
__________________
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 |
|
|
|
|
|
#35 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6333
|
Quote:
In buona parte sono dovuti a quella enorme svista iniziale che ha portato poi all'introduzione di IntPtr tra i vari rimedi "post-disastro". L'accesso a puntatori ed handle poteva essere reso più sicuro (e pure più semplice) ma erano troppo presi dal realizzare la loro "risposta a Java" (perchè .Net quello è in ultima analisi) e come è successo con Java hanno sottovalutato le esigenze (e le problematiche) di chi ha necessità di interfacciarsi con codice unmanaged/nativo/legacy (in primo luogo chi dentro Microsoft deve interfacciarsi con il codice di più basso livello e mixare dati managed con dati unmanaged). Tieni comunque presente che per me non è un problema visto che nel mio settore mi da un notevole vantaggio sulla concorrenza. |
|
|
|
|
|
|
#36 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non m'è ancora chiaro cosa e come avrebbero dovuto fare.
Comunque .NET è senza dubbio una risposta a Java (Microsoft fu costretta a eliminare la sua JVM e le estensioni a essa apportate), ma fortunatamente è diverso.
__________________
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 |
|
|
|
|
|
#37 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6333
|
Gestire come tipi nativi distinti puntatori ed handle ed impedire che si possa manipolarli in modo incontrollato dal lato managed.
Attualmente con IntPtr viene esposto al programmatore se si tratta di puntatori o handle a 32bit oppure a 64bit e li puoi manipolare in tutti i modi possibili con degli interi. Le operazioni "corrette" su puntatori ed handle sono un sottoinsieme più facile da controllare rispetto a quelle su generici interi e quindi (se ci avessero pensato mentre definivano la VM ed il runtime) in primo luogo avrebbero implementato handle e puntatori come due tipi separati con metodi ed operatori specifici (es: sugli handle non si dovrebbero fare operazioni di aritmetica dei puntatori) ed in secondo luogo avrebbero anche potuto includere nei puntatori informazioni sui range di indirizzi validi per operazioni su di esse (es: se la funzione nativa restituisce un puntatore ad una struct, il "puntatore" del CLR include indirizzo base e dimensione della struct in modo da impedire letture/scritture al di fuori di essa). Dal punto di vista computazionale l'aggravio sarebbe quasi nullo e tutto il runtime sarebbe stato molto più robusto nei confronti di codice malevole o semplicemente di errori di programmazione nell'accesso a dati e/o codice unmanaged. |
|
|
|
|
|
#38 | |
|
Senior Member
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
|
Quote:
http://msdn.microsoft.com/it-it/libr...afehandle.aspx http://blogs.msdn.com/b/bclteam/arch...15/396335.aspx ?
__________________
In a world without fences, who needs Gates? Power by: Fedora 8 - Mac OS X 10.4.11 Ultima modifica di nico159 : 15-10-2011 alle 00:28. |
|
|
|
|
|
|
#39 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6333
|
Quote:
Notare come nella documentazione stessa di Safehandle sia scritto esplicitamento che serve per porre rimedio a certi "problemini" di IntPtr. Notare anche come serve al programmatore per rendere "più sicuro" il proprio codice, ma non rende il runtime più sicuro e robusto come sarebbe stato se la cosa fosse gestita come tipi nativi del runtime (quindi da codice managed puoi ancora fare un sacco di porcate con handle e puntatori se è quello l'obiettivo come succede con codice malevole). Notare infine come Safehandle è presente solo a partire da .Net 2.0 quando invece il problema doveva essere decisamente ovvio già durante la progettazione iniziale di .Net (con tutto quel codice unmanaged su cui si appoggiavano era decisamente difficile non accorgersene, solo che come al solito hanno preferito prendere qualche scorciatoia). |
|
|
|
|
|
|
#40 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
OK, ma la 2.0 ha già 6 anni sulle spalle, ed è nata per rimpiazzare completamente le precedenti 1.x (o sviluppi per 1.x oppure 2.0+), rimediando anche ad altri errori di progettazione.
Comunque non mi sembra che SafeHandle crei problemi, per lo meno da quel che ho letto, e il codice rimane "safe" / managed. Mentre quando usi IntPtr il codice è necessariamente "unsafe" / unmanaged. Fermo restando che questo tipo avrebbero potuto implementarlo in modo migliore, come dicevi prima. Le differenze e, soprattutto, la "divisione" del codice nell'uso dei due tipi sono nette.
__________________
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 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:39.












)








