Autore Topic: VC++ Implementation of Switch Statement  (Letto 16487 volte)

Offline fulvio

  • Tech
  • *****
  • Post: 68
  • Karma: +0/-0
    • Mostra profilo
Re:VC++ Implementation of Switch Statement
« Risposta #30 il: 01 Maggio 2014, 17:55:37 »
Inoltre io non sono il programmatore ideale da un punto di vista dell'imprenditore, per il quale il tempo è denaro; sono molto lento: mi piace pensare alla soluzione ottimale anziché buttare lì righe di codice e aspettare che funzionino (credo sia una paranoia degli ultimi anni, più piccolo producevo di più e velocemente). Comunque i risultati si stanno vedendo a fine progetto, il mio codice funziona senza problemi e non presenta bug di funzionalità lievi/gravi; invece si sta impiegando un sacco di tempo per il bug fixing (soprattutto funzionali) nel codice di altri.
Non è un vanto, perché continuo ugualmente a reputarmi inadeguato per l'imprenditore: per me un software che richiede 6 mesi o più di sviluppo non può essere fatto in 2 mesi con poco man-power e senza una forte progettazione iniziale (semplicemente, perché non ci sono le specifiche prima, ma vengono chieste sul momento dal cliente: ciò significa che spesso non sappiamo cosa ci troviamo a sviluppare e certe decisioni iniziali sbagliate portano frustrazione dopo).

Aggiungo poi che per come fanno i colloqui, non potrei superarli. Fanno domande troppo approfondite sulle API di vari framework, io sviluppo con il manual reference davanti e con l'autocompletition dell'editor, non imparo mai nulla a memoria (e per le complessità che ha raggiunto la programmazione di oggi, sarebbe impossibile almeno per me).
Cambiare stato comunque mi alletta parecchio, prima di trovare questa occasione avevo intenzione di trasferirmi in UK, ma.. negli ultimi tempi sono cambiate tante cose e ci sono tanti punti interrogativi, si vedrà.. se devo cambiare però, qualcosa che non abbia a che fare con l'informatica :-)

Devo dire che anche io ho lo stesso modo di programmare. D'altronde le possibilità sono due: o ti specializzi in un prodotto e speri che non scompaia dal mercato in poco tempo, o impari i fondamenti e alla fine ti trovi a tuo agio con tutto, magari dovrai chiedere come fare una certa cosa, ma almeno non ti mancheranno le domande e qualcuno che sa a memoria il reference manual di qualcosa lo trovi sempre :P

Io adesso sono in UK, con un coinquilino siciliano per giunta (che però lavora in finance). In fin dei conti non si sta male, ma venendo anch'io dal SUD (provincia di Napoli) ho sempre da lamentarmi del tempo e del cibo. E purtroppo anche quelle volte che si raggiungono i 28/30 gradi, non hai proprio l'opzione di andare al mare (ovviamente c'è a Brighton per esempio, ma non è niente di lontanamente comparabile  :()

Offline fulvio

  • Tech
  • *****
  • Post: 68
  • Karma: +0/-0
    • Mostra profilo
Re:VC++ Implementation of Switch Statement
« Risposta #31 il: 01 Maggio 2014, 20:33:12 »
Io adesso sono in UK

Credo che tra qualche anno gli italiani saranno circa il 30-40% della popolazione inglese :D che lavoro fai lì?


Eheh mi sa che ci siamo già vicini, in pratica alcuni italiani vivono qui da anni senza aver imparato una parola di inglese. Io al momento lavoro in una piccola software house che fa principalmente software di catalogazione principalmente orientate ai musei e librerie, ma abbiamo anche sistemi di catalogazione di asset digitali (anche customizzati, alcune forze di polizia lo utilizzano qui). Ma è stato il primo lavoro che ho trovato in attesa di migliorare la lingua. Tra poco mi guardo intorno, qui di opportunità nel nostro campo ce ne sono a bizzeffe, dalle piccole alle grosse società ;)

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:VC++ Implementation of Switch Statement
« Risposta #32 il: 01 Maggio 2014, 21:41:17 »
I container sono fatti per conservare oggetti, non per farci dei calcoli di sopra. Un buon programmatore si copia il tipo di dato in una struttura locale (o direttamente in delle variabili) se c'è una lunga computazione da fare

Però devi avere il programmatore bravo! :P
A parte gli scherzi, quella idea va bene finché devi prendere un valore ogni tanto e farci tanti conti, meno quando devi lavorare su tantissimi dati e dei fare poche elaborazioni per ognuno.

Una cosa che proprio non sopporto del Java è proprio l'inefficienza di memoria (sopratutto visto che lo uso per scrivere programmi su Android): per esempio tempo fa stavo sviluppando una piccola app insieme ad altre persone*, e mi serviva tornare da una funzione due valori, un float e un int.

In C++ avrei scritto std::pair<float, int>, in Java ho fatto Pair<Float, Integer> (mi sembra che Pair sia una cosa fornita da Android).

Analizziamo le due soluzioni: in C++ la struttura occupa esattamente 1 float e 1 intero, quindi il assolutamente il minimo. In Java hai:
- Un oggetto Float, che consiste in un float, più i dati per il garbage collector e il lock che ogni oggetto Java si porta dietro;
- Un oggetto Integer, che ha un int, più il garbage collector etc.
- Un oggetto Pair, che contiene un puntatore riferimento a Float e uno a Integer, più i dati del GC etc.
- Il riferimento verso Pair effettivamente ritornato dalla funzione.
Tra una cosa e l'altra ci saranno almeno 32 byte usati in tutto per qualcosa che contiene 8 byte di dati.
In più l'accesso ai campi della pair in C++ è "banale", mentre il Java non ti permette di fare tante conversioni automatiche tra il valore boxato e il valore nativo, aumentato l'irritazione del programmatore (i.e. io).

Pensa ora se dovessi creare un ArrayList di queste piccole strutture: sarebbe un array di riferimenti , quindi la dimensione totale sarebbe lunghezzaArray*(dimensionePair&Co + dimensioneRiferimento), che quindi sarebbe qualcosa tipo lunghezza*36.
In C++ posso creare un std::vector<> di quei std::pair, e la memoria occupata sarà esattamente lunghezza*(sizeof(float) + sizeof(int)) = lunghezza*8 (tipicamente).
In più il vector<> garantisce che gli elementi siano consecutivi in memoria, quindi posso fornire il puntatore a un'API C come ad esempio OpenGL.


* Era un progetto dell'università, quindi dovevo lavorare con gente estremamente inesperta; ti risparmio il raccontarti di come il programma consumava così tanta memoria (se non fosse abbastanza già di suo doveva lavorare su immagini abbastanza grandi!) che non partiva nemmeno nel mio LG Optimus Dual da 512 MB di RAM; a loro funzionava solo perchè avevano tutti cellulari nuovissimi con 2+ GB oppure perchè giravano sul simulatore; son dovuto andare in giro per il codice a togliere e =null tanti di quei riferimenti solo per permettere al GC di girare.

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:VC++ Implementation of Switch Statement
« Risposta #33 il: 01 Maggio 2014, 22:10:35 »
@Z80Fan:
Java consuma tanta RAM, ma nel caso di Android c'è anche l'Heap di Dalvik limitato a 32MB per processo/Activity nei cellulari vecchi e 64 o 128MB in quelli nuovi.
Comunque a me non dispiace il Java perchè mi permette di scrivere codice molto velocemente, mantenendo comunque una buona organizzazione. Chiaramente non è il miglior linguaggio e ha tanti difetti, ma la comodità che si porta dietro è fondamentale quando devi lavorare in tempi molto stretti. Per fare analisi d'immagini puoi sempre scrivere il tuo algoritmo in un linguaggio nativo come il C++ e poi chiamarle le sue funzioni da Java tramite JNI (in Android c'è un tool già pronto in "Android NDK" per integrare classi C++ e Java).

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:VC++ Implementation of Switch Statement
« Risposta #34 il: 01 Maggio 2014, 23:00:24 »
@Z80Fan:
Java consuma tanta RAM, ma nel caso di Android c'è anche l'Heap di Dalvik limitato a 32MB per processo/Activity nei cellulari vecchi e 64 o 128MB in quelli nuovi.

Esatto. In realtà Android promette almeno solo 16 MB, anche se la maggioranza ne ha molti di più (sul mio LG sono 48) e solo dispositivi molto vecchi scendono sotto i 24.

Comunque a me non dispiace il Java perchè mi permette di scrivere codice molto velocemente, mantenendo comunque una buona organizzazione. Chiaramente non è il miglior linguaggio e ha tanti difetti, ma la comodità che si porta dietro è fondamentale quando devi lavorare in tempi molto stretti.

Io non so come fai; ogni volta che devo fare qualcosa mi scontro con qualche piccola idiozia che mi costringe a girarci intorno o a rendere il codice meno efficiente; non parliamo poi di Android che ha delle API insulse e contorte, con pure documentazione di scarsa qualità e esempi sbagliati.

Cerco sempre di farmi piacere Java (visto che mi tocca usarlo), ma ogni volta che programmo ho sempre una sensazione di pesantezza, di dover scrivere nel modo che vuole il compilatore piuttosto che nel modo che mi sembra più logico a me. :(

Dai, come prossimo telefono mi comprerò il Jolla, che si programma in C++ e Qt. ;D

Per fare analisi d'immagini puoi sempre scrivere il tuo algoritmo in un linguaggio nativo come il C++ e poi chiamarle le sue funzioni da Java tramite JNI (in Android c'è un tool già pronto in "Android NDK" per integrare classi C++ e Java).

Ma infatti è quello che avrei fatto io; lasciamo perdere quella storia che se dovessi raccontarvi tutto il fail che c'è stato in quel progetto non basterebbero 10 pagine. ::)

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re:VC++ Implementation of Switch Statement
« Risposta #35 il: 01 Maggio 2014, 23:29:41 »

Dai, come prossimo telefono mi comprerò il Jolla, che si programma in C++ e Qt. ;D


OT
Ma usare C# e XAML invece? ;)
/OT
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:VC++ Implementation of Switch Statement
« Risposta #36 il: 02 Maggio 2014, 00:39:36 »
@Z80Fan: con il tempo e l'esperienza impari a distoglierti dalle questioni di "accademia" ed a concentrarti sui clienti e le loro scadenze. Per quanto interessanti e importanti certi argomenti diventano solo un "dettaglio tecnico" trascurabile e irrilevante, quello che conta è fatturare :D
Chiaramente questo se sceglierai di fare lo sviluppatore professionista. Se invece ti butti in campi diversi magari puoi cercare di mantenere un livello più alto, o magari sempre nel campo professionale ma in qualche fortunata azienda che ha grandi budget e punta alla qualità del software (sono molto rare ma esistono).

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:VC++ Implementation of Switch Statement
« Risposta #37 il: 02 Maggio 2014, 01:33:51 »
@Z80Fan: con il tempo e l'esperienza impari a distoglierti dalle questioni di "accademia" ed a concentrarti sui clienti e le loro scadenze.

Infatti proprio per questo Java mi sta stretto: perdo tempo a combattere con il linguaggio più scrivere il programma in modo logico; anche solo delle puttanate tipo dover fare .equals invece che == su delle stringhe per dire.

Il conto dei byte di memoria non era collegato all'altra frase sulla praticità di programmazione; il discorso del progettino fallito è più complesso, anche se farebbe un'interessante storiella: in 3 mesi avremmo dovuto fare un'applicazione completa e forse rilasciabile sul market, scadenza completamente mancata visto che quasi non c'erano le funzionalità base. I motivi del fallimento son stati tanti: la lentezza di partenza, la difficoltà di amministrare una ventina di persone con 0 esperienza, obiettivi fin troppo grandiosi etc.

Alla fine però ho ricevuto un ottimo voto, quindi non mi lamento più di tanto! ;D

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:VC++ Implementation of Switch Statement
« Risposta #38 il: 02 Maggio 2014, 01:34:56 »
Stai però confrontando due cose totalmente diverse, Java è un linguaggio platform independent mentre C++ è multiplatform e tendente a generare codice (spesso inutilmente e scomodamente) ottimizzato.
Dovresti confrontare quella tipologia di genericity con un linguaggio simile

Infatti sarebbe interessante vedere gli altri linguaggi se riescono a essere più efficienti in termini di memoria, anche se non dubito che Java sia il peggiore in questo ambito. ::)

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:VC++ Implementation of Switch Statement
« Risposta #39 il: 02 Maggio 2014, 15:09:25 »
@Z80Fan:
tu sicuramente, per quello che vedo dai tuoi progetti personali, hai una preparazione molto superiore alla media del tipico studente universitario e non mi stupisce la difficoltà che hai avuto in un team di 20 "caproni" :D
Però ti posso assicurare che in un ambiente di programmatori esperti, un progetto Java impiega metà del tempo di sviluppo e con meno bug rispetto ad un equivalente progetto C++, e una volta acquisita la giusta esperienza con il linguaggio non ci devi più combattere :)
Questo accade facendo qualsiasi switch da linguaggio A a linguaggio B, anch'io nei primi tempi cercavo di scrivere C++ "in Java", tirando bestemmioni epici, poi ho imparato la mentalità Java e sono diventato 3 volte più produttivo.

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:VC++ Implementation of Switch Statement
« Risposta #40 il: 02 Maggio 2014, 16:17:54 »
Però ti posso assicurare che in un ambiente di programmatori esperti, un progetto Java impiega metà del tempo di sviluppo e con meno bug rispetto ad un equivalente progetto C++, e una volta acquisita la giusta esperienza con il linguaggio non ci devi più combattere :)
Questo accade facendo qualsiasi switch da linguaggio A a linguaggio B, anch'io nei primi tempi cercavo di scrivere C++ "in Java", tirando bestemmioni epici, poi ho imparato la mentalità Java e sono diventato 3 volte più produttivo.

Mi fido. :)

Non ho motivi "religiosi" per cui odiare Java, ho tutto l'interesse a farmelo piacere in modo da programmare meglio queste piattaforme che son sempre più importanti. :D

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:VC++ Implementation of Switch Statement
« Risposta #41 il: 03 Maggio 2014, 18:52:29 »
@dsar
Lo uso perchè mi ci trovo bene, per quello che ci devo fare. Magari te lo odi ma io no.

Io non ho detto che il C++ è un linguaggio perfetto, e mi sembra che ti abbia anche spiegato vari punti che toglierei/sistemerei se fossi io a dirigere il linguaggio, e non ho neanche detto che il resto dei linguaggi sia una merda. (Ovviamente ci sono alcuni linguaggi che oggettivamente e sopra ogni forma di dubbio sono una merda, come PHP e Objective-C :P)

Non uso neanche il C++ per qualsiasi cosa: C++ per codice ad alte/altissime prestazioni e per cose a relativo basso livello, Java su Android1, Lua come scripting sopra un motore C++, Python+Web.py per siti web etc.

Non ho detto che mi piace SOLO il C++ e tutto il resto è uno schifo (come molti dicono, sopratutto programmatori C), anzi, son sempre contento di vedere come funzionano altri linguaggi e come implementano cose.

Però, per quello che programmo tipicamente, ovvero cose di basso livello oppure che richiedono alte prestazioni, la mia scelta principale rimane sempre il C++ sia perchè lo conosco già, sia perchè mi permette di scrivere codice leggibile2 e efficiente3, sia (sopratutto) perchè è supportato praticamente da un po' tutti; come si diceva, è molto più facile trovare un compilatore C++ in ambito embedded rispetto a uno ADA, Modula etc. Allo stesso modo, la compatibilità con codice e librerie C viene molto comoda quando devo interfacciarmi con tali librerie, tipo OpenGL.

Ma se devo scrivere un sito web, non lo scrivo in C++, uso Python (o PHP se proprio mi tocca); se ho bisogno di parsare dei file di testo per estrarre e/o riformattare dei valori, non uso il C++, uso qualche linguaggio di scripting fatto apposta per questo, etc.

Il mio linguaggio ideale prende sicuramente tanto dal C++, ma lo semplifica e espande in altre cose; avevo già cominciato a scrivere molte idee che inserirei in questo linguaggio: principalmente riguardavano la semplificazione della sintassi (la si rendeva un po' meno ambigua e un po' più facile da parsare, ma nessuna rivoluzione), la semplificazione nel creare template e/o fare elaborazioni a compile time (introducevo uno static if come il D e qualche altro dettaglio), miglioravo l'uso di bitfield e la specifica più precisa di strutture dati in memoria a livello di bit (importantissimo se si lavora a basso livello; allo stesso modo specificavo dimensioni esatte per i tipi base di dato come fa Java), e introducevo veri moduli software (per rimuovere l'inclusione testuale).
Se vi interessa apro un thread così vi mostro le idee. :)

Però anche se mi creassi il mio linguaggio perfetto, poi lo potrei usare solo io perchè non è supportato da nessuna parte; al massimo potrei scrivere un front-end per LLVM ma sarei lo stesso limitato alle architetture supportate da quest'ultimo.


1. Il fatto che Java non mi sta proprio a genio è anche questo: è un linguaggio staticamente e fortemente tipizzato che riprende la sintassi (e le limitazioni) da linguaggi di medio-alto livello come C e C++, eppure senza le prestazioni e con gran uso di memoria; a questo punto preferirei tanto di più usare un linguaggio più semplice e pratico come Python.

2. per leggibile intendo poter scrivere delle classi o funzioni e usarle in modo naturale; ad esempio con la ridefinizione degli operatori posso avere una classe vettore (std::vector) che si usa come un vettore nativo (con i []), oppure classi numeriche che usano i +/- etc.

3. Efficienza sia nello spazio che nel tempo, importanti sopratutto quando si elaborano grandi quantità di dati oppure le risorse hardware sono limitate.

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:VC++ Implementation of Switch Statement
« Risposta #42 il: 03 Maggio 2014, 19:59:40 »
certo che si  ;D

anche se … non ti offendere, ma sei di due spanne oltre i miei limiti, ti ricordo che ho gia' sputato l'anima per cavar fuori e far pedalare l'interprete bovino, e ora di farlo evolvere … mi sa che vengon fuori cose suine se non equine (o ancora + equivoche con la maestrina)

Dubito che verrà mai fuori un'implementazione: è una bella quantità di lavoro per far il tutto; io sicuramente non ne ho il tempo in questo periodo o nell'immediato futuro.
Per me già solo la discussione soddisfa. ;D

Tags: