PDA

Visualizza la versione completa : C++ perché non si è evoluto e ha sviluppato strumenti per la programmazione lato server?


giannino1995
21-07-2014, 16:01
C++ perché non si è evoluto e ha sviluppato strumenti per la programmazione lato server? Perché chi sviluppa lato server è costretto ad usare php e java o altri linguaggi simili?

Da C è nato C++ ma da C++ non è sorto nessun nuovo linguaggio scritto in C per il web nonostante C++ sia e resti, al momento, il linguaggio più completo e raffinato che l'uomo abbia mai creato.

paolino_delta_t
21-07-2014, 20:05
Perchè dici "non evoluto"? C++ può ed è usato ANCHE per sviluppare web services, ma ovviamente l'espressività del linguaggio è bassa e sviluppare roba ad alto livello costa tanto tempo-uomo e produce molti bug. Perchè dovrei usare C++ quando faccio lo stesso con Python, più velocemente e con molti meno bug nel codice?

Ad ogni software bisogna dare un'architettura, la quale impone dei limiti nel numero di grado di libertà che puoi consentirti. Se vuoi degli array che siano accessibili come blocchi di memoria contigua, non puoi poi pretendere di avere lo slicing ed altre funzionalità avanzate built-in. E non dimentichiamo che le funzionalità avanzate richiedono operazioni, cioè cicli di cpu, quindi programmi più lenti. E infatti un programma Python sarà sempre e comunque più lento di uno C++ ( anche se si riuscisse a compilarlo ).

giannino1995
21-07-2014, 22:36
E' proprio quello il motivo. Usando python perdo delle funzionalità nella programmazione e soprattutto fatico ad usare il codice python insieme al codice C++. Perché non creare un framework di C++ o semplicemente delle nuove classi o altro ancora capace di dare più forza al linguaggio? PHP di fatto cos'é? E' un "qualcosa" che deriva dal C/C++! Java cosè? Un programma che permette di scrivere codice fatto in C/C++! Sempre di C++ si parla, di diversi approcci, questo si. Puoi dirmi che non tutti siano fermamente convinti sull'approccio progettuale e che quindi per evitare di litigare si siano scelti più standard, PHP, JAVA, ecc... però resto dell'ipotesi che si dovrebbe cominciare con più forza a pensare ad un solo linguaggio e non a 1200 versioni della stessa frittata.
Io non sono un programmatore e studio da autodidatta con entisiasmo ma non condivido questo pensiero di settorializzare invece di standardizzare.

MItaly
21-07-2014, 23:37
Usando python perdo delle funzionalità nella programmazione
Uhm, no, ottieni roba diversa. Non hai la tipizzazione statica, le performance di un linguaggio compilato e diverse altre cose, ma guadagni un sacco di possibilità a livello di espressività del linguaggio, librerie pronte all'uso, semplicità di utilizzo, facilità di deployment, portabilità del linguaggio, minori problemi di sicurezza... non a caso, se non ci sono problemi di performance (ed è questo in genere il caso di molte applicazioni web) si preferisce lavorare con linguaggi di livello più alto.

e soprattutto fatico ad usare il codice python insieme al codice C++.
Perché dovresti usarli insieme, se non per problemi di performance? Di base lavora in Python, se ti serve velocità scriverai in C++ usando software come SIP per generare il binding.

Perché non creare un framework di C++ o semplicemente delle nuove classi o altro ancora capace di dare più forza al linguaggio?
Al di là del fatto che gli script CGI si scrivono in C o C++ dalla notte dei tempi, comunque un framework relativamente noto per fare siti in C++ esiste - cerca CppCMS. Ma in generale, sono molto pochi quelli che lo utilizzano, perché in ambito web in genere si preferisce lavorare con qualcosa di più comodo e meno rischioso (a livello di undefined behavior, buffer overflow & co.) del C++ (oltre al fatto che il deployment è una menata, devi sapere esattamente per che piattaforma compili).

PHP di fatto cos'é? E' un "qualcosa" che deriva dal C/C++!
Stai partendo per una tangente non molto sensata - sì, l'interprete PHP è scritto in C, ma questo non significa che tu puoi scrivere dentro ad un programma C come se fosse PHP; in altre parole, usi il C per costruire un interprete che ti consente di usare una sintassi e una semantica che tu dentro ad un programma C non potresti mai avere. Sì, il C++ con tutti i giochini di template, overload degli operatori e compagnia è molto più flessibile, ma comunque ci sono delle limitazioni grosse (niente garbage collection, scarsissima reflection, in generale poca dinamicità a runtime, macro poco potenti, ...) a cui i rimedi "dentro al linguaggio" tendono ad essere peggiori del male.
In generale, la stragrande maggior parte dei compilatori e degli interpreti è scritta in C o C++, ma questo non vuol dire assolutamente che direttamente in C o C++ tu possa lavorare come fai, che so, in Lisp, Ruby o Erlang.
In generale, ci sono paradigmi di programmazione che C++ non può nemmeno provare a simulare proprio per come è impostato (prova ad implementare delle continuation o coroutine in C++ standard).

Java cosè? Un programma che permette di scrivere codice fatto in C/C++!
Uhm, la questione è discretamente più complicata... è vero che gran parte della JVM è scritta in C o C++, ma c'è di mezzo anche un JIT-compilatore, che dal bytecode Java genera direttamente codice macchina ottimizzato...

Sempre di C++ si parla, di diversi approcci, questo si. Puoi dirmi che non tutti siano fermamente convinti sull'approccio progettuale e che quindi per evitare di litigare si siano scelti più standard, PHP, JAVA, ecc... però resto dell'ipotesi che si dovrebbe cominciare con più forza a pensare ad un solo linguaggio e non a 1200 versioni della stessa frittata.
Non è questione di evitare di litigare, è questione che diversi linguaggi sono indicati per fare cose diverse, hanno punti di forza e debolezza diversi e riflettono impostazioni mentali diverse. Non è vero che tutti sono una qualche ribollitura del C++ - quando scrivo in C, in C++, in Python, in bash, in JavaScript, ... spesso imposto le cose in maniera radicalmente diversa, perché il linguaggio tende a spingere in una direzione o nell'altra; ora che sto studiando Erlang, vedo che un buon 50% del modo di pensare dei linguaggi imperativi viene completamente buttato via in un linguaggio funzionale.


Io non sono un programmatore e studio da autodidatta con entisiasmo ma non condivido questo pensiero di settorializzare invece di standardizzare.
Seguendo questo ragionamento oggi staremmo tutti scrivendo in Cobol. :cry:

M.A.W. 1968
22-07-2014, 12:41
Sfortunatamente spesso thread di questo tenore derivano con troppa facilità verso fallacie come "...alla fine, tutto diventa linguaggio macchina". Come spesso avviene, la differenza più insormontabile non consiste nella capacità di scrivere codice, ma nel mancato possesso di una visione globale dell'universo informatico e della naturale biodiversità non solo dei linguaggi e dei paradigmi di programmazione, ma anche di interi ecosistemi tra loro sempre più separati (dal mondo burotico a quello del web, dai multitier enterprise ai sistemi embedded altamente critici, al calcolo scientifico...).

In questo caso, per giunta, sono totalmente errate le assunzioni di base. Ho già spiegato innumerevoli volte (ad esempio qui (http://forum.ubuntu-it.org/viewtopic.php?f=33&t=558762&p=4400199#p4400199)) che C++ è un pessimo linguaggio ad oggetti (anche java gli fa ottima compagnia, ma lasciamo correre) secondo criteri asseverati nella comunità dell'engineering e dei teorici dei linguaggi: inoltre si possono citare altri difetti esiziali come il design by commitee, i mille problemi della libreria standard (ai quali non sempre Boost o altre alternative forniscono soluzioni brillanti), una sfilza di undefined behavior, una metaprogrammazione impresentabile, per non dire dei problemi di parsing, della mancanza del garbage collector, della amletica e perversa indecisione se fare di C++ un vero HLL o meno a dispetto della sua genesi dal C, che genera una caterva di incoerenze e coesistenze forzate tra low e high level... si potrebbe poi scoperchiare il vaso di Pandora aprendo il capitolo "prestazioni", magari da un punto di vista un po' più ampio rispetto all'assurda impredicibilità imposta dalle "migliorie" di IA64, per smitizzare le leggende urbane sulla "superiorità" di C++ rispetto ad un oculato mix Assembly +C, ma occorrerebbe molto più spazio (rimando gli interessati ai lavori della commissione WG21, come pure alla vasta letteratura dei vari Agner Fog, Steve Heller, Randall Hyde, Herb Sutter etc.).

Inoltre non sarà inutile ricordare che intere legioni di professionisti, specialmente i più maturi e più influenti nel campo della creazione di compilatori, framework ed estensioni ai linguaggi di programmazione, generalmente considerano lo sviluppo web dequalificante, e ciò ha chiaramente importanza notevole nella formazione delle opinioni e degli orientamenti nella comunità di sviluppo.

giannino1995
22-07-2014, 20:01
Mi spiace ma non condivido. Per ora ho solo studiato java per il desktop e php per il web e mi sto accorgendo che alla fine, a meno di differenze, i linguaggi si assomigliano tutti. Non condivido neppure il fatto che possano essere utili approcci diversi alla programmazione e che questo sia un bene. Un linguaggio di programmazione per essere un buon strumento deve avere gli oggetti, le classi, i cicli, le altre cosette che conoscete meglio di me, un framework e le librerie. Quasi tutti i linguaggi hanno queste cose qui ma nessuno è veramente completo. Perdonate il termine ma quando realizzo un programma in Matlab perché quel linguaggio ha una libreria matematica che C++ non ha e poi mi accorgo che le interfacce grafiche di Matlab fanno schifo e non sono carine come quelle di Visual C# mi girano le balle. Allo stesso modo quando uso php per fare un programma per cui ho bisogno di performance e mi accorgo che il linguaggio non mi permette di gestire applicazioni multitread sfruttando la predisposizione del sistema operativo mi girano le balle. Quando realizzo un software in java anche piccolino che magari decido di commercializzare e mi accorgo che a differenza di C++ il codice si può solo offuscare mi girano le balle. Se un domani decidessi di realizzare un software in C++ e mi accorgessi che alcuni dei miei clienti usano Apple continuerebbero, senza dubbio, a girarmi le balle e sempre allo stesso modo ovvero sempre con gli stessi strumenti (classi, cicli, ecc…). Siamo proprio sicuri che non si possa fare un’unica cosa che inglobi il meglio di tutto? Siamo proprio sicuro che sia veramente necessario avere una diversa faccia della stessa medaglia? Per me no… Ci serve veramente avere il C++, il C#, Visual Basic ed il C della Apple?!?! Pyton, php, java, asp, ecc... tutti veramente necessari per fare siti internet? Mah... secondo me ne basta uno...

M.A.W. 1968
22-07-2014, 21:54
Mi spiace ma non condivido. Per ora ho solo studiato java per il desktop e php per il web e mi sto accorgendo che alla fine, a meno di differenze, i linguaggi si assomigliano tutti.

La conoscenza di un paio di linguaggi è una posizione decisamente troppo debole per la formazione di un giudizio complessivo.
Da un lato è assolutamente lapalissiano che i linguaggi di programmazione presentino elementi comuni: non foss'altro per l'arcinoto teorema di Boehm-Iacopini (http://www-ictserv.poliba.it/piscitelli/doc/lucidi_fi/FIparIV.pdf) che stabilisce il minimo mutuabile di caratteristiche che un linguaggio deve possedere per garantire l'equivalenza secondo Church-Turing - ovvero, in soldoni, per poter eseguire ogni tipo di algoritmo convenzionale.

Dall'altro lato, tra le centinaia di linguaggi che non conosci, ve ne sono diverse dozzine che non assomigliano minimamente ai vari java, php, eccetera: dai linguaggi paralleli a quelli funzionali puri, ai linguaggi dichiarativi, a quelli constrained, ai linguaggi di descrizione hardware, ai linguaggi vettoriali, e così via. Linguaggi nei quali è in genere difficilissimo delineare i costrutti condizionali e pressoché impossibile reperire perfino i più banali costrutti di loop, perché implementati in modo implicito (tipicamente ricorsivo).

Suggerire, come primo passo, di studiare molto bene il Sebesta (http://www.amazon.com/Concepts-Programming-Languages-10th-Edition/dp/0131395319), un riferimento pressoché obbligatorio per chiunque voglia iniziare a chiarirsi le idee sul panorama dei linguaggi di programmazione convenzionali e sulla necessità di un approccio multiparadigmatico.

L'unico linguaggio assolutamente "universale", comunque limitato ad una singola famiglia di piattaforme, è l'Assembly col relativo linguaggio macchina. Ma fin da quando "il calcolatore" era un oggetto che pesava diverse decine di tonnellate, occupava un intero piano di un edificio e assorbiva più energia elettrica di uno stabilimento industriale ci si è preoccupati di inventare linguaggi specialistici e di alto livello, come COBOL. Certo non senza motivi assolutamente sensati!
Peraltro C e C++ sono, dopo il già citato Assembly, tra i linguaggi in assoluto più flessibili e totipotenti. Il linguaggio C è praticamente l'unico esempio serio di linguaggio di livello intermedio, più vicino all'hardware e all'Assembly di qualsiasi altro HLL (incluso lo stesso C++). Esistono librerie e framework per ogni tipo di utilizzo di C e C++, dal calcolo scientifico su architetture a parallelismo massivo al controllo di sistemi embedded in tempo reale, dalla grafica tridimensionale alla topologia computazionale, e migliaia di altri campi applicativi - sovente altamente specialistiche e disponibili solo a costi molto elevati, in non disclosure. Ma nonostante tutto questo, corposi studi di engineering economico dimostrano, dati alla mano, come risulti enormemente più conveniente e razionale, sul medio periodo, l'uso di linguaggi, paradigmi e framework alternativi per taluni tipi di applicazioni e di mercati.

giannino1995
23-07-2014, 09:45
Però trascuri il fatto che possano esistere linguaggi diversi (php e java sono un chiaro esempio) e progettati per lo stesso tipo di esigenza (siti internet) che sono inutili (semplici doppioni). Premetto che non conosco java per il web ma sono sempre più convinto che php sia inutile se uno conosce java. Il problema è che tutti i cms sono in php per cui per certi lavoretti devo digerire questo mattone senza supporto al multitread e senza la possibilità di inizializzare una variabile (mi spieghi l'utilità e la sicurezza che ne potrebbe derivare? io non la capisco!)

P.S.: C'è veramente gente che spende tutto quel denaro per un libro! :facepalm:

M.A.W. 1968
23-07-2014, 12:36
Il thread si è effettivamente dilungato più del necessario. Cerchiamo di andare alla radice del problema. Non è molto chiaro, infine, se alla base vi sia un problema di professionalizzazione e scarsa plasticità, o la semplice mancanza di una seria cronotassonomia dei linguaggi di programmazione.

Se la domanda è "Perché devo usare tanti linguaggi?" la risposta è: Perché tutti i professionisti usano senza troppe storie i linguaggi e gli strumenti a disposizione. Si chiama, appunto, professionalità. Negli anni Ottanta, nelle prime softwarehouse con le quali collaboravo da studente, si programmava (anche nella stessa giornata) in C per DOS, VMS, Xenix e SystemV, in Assembly Z80, 6502, 68xx, 8086, senza dimenticare i vari clipper, basic, pascal e i primi vagiti di OCCAM, nonché ovviamente ABEL, Verilog e VHDL, avendo ogni linguaggio e piattaforma i suoi inerenti limiti. Ancor oggi, in un anno, mediamente sviluppo progetti usando una ventina di linguaggi diversi, e senza contare la varietà degli Assembly.


Se invece la domanda è "Perché esistono linguaggi orribili come java e php?" la risposta breve è "shit happens". Quella più articolata è che hai scelto di operare in uno dei segmenti di mercato più dequalificati, nei quali appunto imperano codesti linguaggi mal progettati (o mai progettati, è il caso di PHP) ed esteticamente piuttosto ripugnanti.


Per concludere, è la tua domanda finale che merita un grosso facepalm. I libri si acquistano, come qualsiasi altro bene di consumo. Nessuno entra in un concessionario di automobili e salta su una Jaguar portandosela a casa senza pagare, perché - pur non potendo permettersela - gli piace o addirittura crede di averne bisogno. La facilità di commettere un reato non ne giustifica né la diffusione, né tantomeno l'apologia pubblica. I libri si pagano, altrimenti gli autori prima o poi smetteranno di scriverli. I libri si pagano e pensare di non farlo è idiota, perché se tutti i "furbetti" cercano altre vie, i prezzi di copertina salgono, poiché l'editore deve comunque rientrare nei costi. E se i prezzi di copertina salgono, chi paga quei soldi alla fine? I contribuenti, cioè tutti noi che paghiamo le tasse, perché i maggiori acquirenti di testi tecnoscientifici sono le università, le biblioteche pubbliche, gli enti pubblici e le grandi aziende statali e parastatali. Tutte finanziate con le tasse pagate da noi. Non esistono pasti gratis nell'universo. La conoscenza è libera ma ha comunque una contropartita, non è totalmente gratuita ed è una assurdità ideologica pretendere il contrario.
Quindi è opportuno comportarsi in modo responsabile, ed evitare discorsi totalmente assurdi.

Con ciò, temo che non potrò dedicare ulteriore tempo al presente thread.

Alex'87
23-07-2014, 13:22
P.S.: C'è veramente gente che spende tutto quel denaro per un libro! :facepalm:

Non ci vedo nulla di male...

Fai un salto alla facoltà di medicina della tua città e chiedi agli studenti quanto costa il loro libro di anatomia...
Te ne compri 3 di Sebesta con quei soldi :D

(scusate l'OT)

Loading