[C++] Quali lingue hanno livelli più alti di astrazione e richiedono meno gestione della memoria manuale rispetto al C ++?


Answers

Direi che dalla tua domanda probabilmente non hai ancora finito di studiare il C ++. Se stai ancora gestendo la tua memoria, hai ancora molta strada da fare per il mio amico!

Dai un'occhiata a auto_ptr e shared_ptr - controlla le librerie Boost.

Allo stesso modo con l'astrazione - di cosa ti stai particolarmente lamentando? AFAIK non c'è molto che non puoi fare con C ++ che è presente in altri linguaggi fortemente tipizzati .

So che questo non risponde alla tua domanda - vuoi spostarti in avanti, ma il C ++ è una di quelle cose in cui non smetti mai veramente di imparare. Se ti annoi, fai una breve incursione nei modelli e nella meta-programmazione dei modelli ...

Question

Ho imparato C ++ per un po 'ora, lo trovo molto potente. Ma il problema è che il livello di astrazione non è molto e devo gestire me stesso la memoria. Quali sono le lingue che posso usare che usano un livello più alto di astrazione.




idem Lisp, .. o schema

Anche se non lo usi mai, è utile. Ho appena ricevuto la programmazione dei template dopo averla imparata.

Un altro è prologo. ti mette in una mentalità non sequenziale.




Piuttosto che suggerire una lingua specifica, ti consiglio di scegliere qualsiasi lingua o lingua che offra le seguenti 4 funzionalità:

  1. Gestione automatica della memoria
  2. Riflessione / Introspezione
  3. Costrutti dichiarativi / funzionali (ad es. Funzioni lambda)
  4. Duck Typing

L'idea qui è di espandere la tua prospettiva di programmazione per includere concetti che il linguaggio C ++ non ti offre immediatamente.




se vuoi astrarre la gestione della memoria, Java mi viene in mente all'istante.




Provare qualcosa di veramente estraneo come Haskell ti permetterà di pensare in modi diversi. Ti aiuta anche a pensare in modo ricorsivo. Il C ++ ha ricorsione ma si infiltra in molte altre parti dei linguaggi funzionali.




Personalmente, ho programmato in Java, Python, C / ++ e il mio preferito deve essere python. Sebbene C ++ possa fare tutto ciò che Python può fare e molto altro, ho scritto un programma Python con circa 10 linee che impiegherebbero circa 50 in C ++. Quindi, morale della storia, usa python.




Dato che sei già in C ++, il prossimo passo sarebbe quello di imparare. Net attraverso C ++ gestito o estensioni gestite per C ++. Questo ti farà fare un passo nel grande mondo di .Net framework. Una volta capito il framework, lo rende più comodo per imparare altri linguaggi .Net come C #, VB.Net ecc.

Una delle aree in cui MC ++ eccelle ed è, in effetti, unica tra i linguaggi .NET, è la capacità di prendere un'applicazione non gestita (C ++) esistente, ricompilarla con l'opzione / clr, farla generare MSIL e quindi eseguire sotto il CLR. Questa prodezza straordinaria è giustamente definita "It Just Works (IJW)!" Ci sono alcune limitazioni, ma per la maggior parte, l'applicazione verrà semplicemente eseguita. Il codice C ++ può essere costituito da istruzioni printf vecchio stile, MFC, ATL o persino modelli!




Direi che iniziare con Python. Ha un livello più alto di astrazione e ti insegna l'importanza del rientro e del codice "carino". Non che "carina" sia molto importante, ma renderà il futuro manutentore del tuo codice molto più felice :)

C'è un sacco di codice di esempio là fuori, e se sei in Linux ci sono varie distribuzioni là fuori che hanno tutti (o la maggior parte) dei loro strumenti basati sulla lingua. Se ti piace esplorare come funziona un sistema operativo (qualcosa che molti programmatori fanno) è un buon inizio. Prima di ottenere le fiamme ho detto che gestivo, non le reali risorse del kernel per cui per lo più hai bisogno di C e dovresti farlo.

D'altra parte potrebbe essere bello immergersi nel lato C delle cose, ignorare le cose OO e apprendere la programmazione funzionale. Se percorri quella strada ti suggerisco anche di iniziare con il linguaggio di assemblaggio di base come uno dei post in alto suggeriti. Forse l'HLA (Assemblea di alto livello di Randall Hyde, ha scritto un grande libro chiamato Art of Assembly Language Programming) è un buon inizio. Imparerai ad amare la gestione della memoria o ad odiarla per il resto della tua vita. Buono a sapersi se vuoi iniziare una carriera nella programmazione :)

Tuttavia, se stai cercando di fare un lavoro fuori dalla programmazione, Java e J2EE sono facili da guadagnare se sai cosa stai facendo. IMHO diventa noioso davvero veloce però.







Devo presentare una risposta separata per Perl. Mentre Python è approssimativamente equivalente nella funzionalità e considerato più pulito e moderno, Perl ha un'eleganza tutta sua: l'eleganza del puro pragmatismo. Vanta anche un supporto per le librerie davvero eccezionale. Dai un'occhiata a Perl per espandere il tuo cervello nella direzione opposta a Haskel :) (sebbene gli appassionati di Perl sostengano che possa essere usato per la programmazione funzionale).




Beh, se stai cercando un livello molto alto di astrazione e gestione della memoria, direi che la lisp sarebbe un candidato ideale. Lo sto imparando ora, lentamente, ed è il più divertente che ho avuto con una nuova lingua.

Detto questo, Python o Ruby potrebbero essere un miglior compromesso tra espressività e popolarità. Il framework Django di Python è uno dei migliori framework RAD se cerchi applicazioni web.