2010-04-23 16 views
8

Ciao sto imparando C++ e all'inizio ho usato una riga di comando ... poi ho iniziato a usare Xcode (e da allora non sono riuscito a tornare alla riga di comando) e mi chiedevo solo alcune ragioni/situazioni specifiche per usare Command -line invece di IDE ...Perché le persone usano Command-line invece di IDE?

risposta

30

Più efficiente per sistemi di grandi dimensioni - Provare ad aprire una soluzione VS con 100 progetti e 10.000 file.

Più semplice per un sacco di attività, si modifica in una finestra, si esegue make in un altro, si ha gdb in un terzo.

Più facile per automatizzare le attività, spesso più facili da lavorare in team o cross-platform, se ognuno di noi ha gcc e VI (o Emacs)

+8

+1 Esattamente, il mio flusso di lavoro consiste principalmente nel passaggio da una finestra all'altra (usando [GNU Screen] (http://www.gnu.org/software/screen/)) e premendo uparrow-enter. –

+9

Perché dovresti mettere i tuoi 100 progetti in un'unica soluzione? (non qualcosa che dovresti/dovresti fare) Inoltre, pensi che la gestione di 100 progetti e 10k file dalla riga di comando sarebbe più facile? Penso di no.Se mai l'IDE ti renderebbe 10k volte più produttivo :-) –

+10

@Miguel, sottostimi la potenza di BASH, find, grep, xargs, awk, sed e tutti gli altri comandi UNIX. Certo, saresti terribilmente inefficiente sulla linea di comando di Windows che fa schifo, ma su qualsiasi variante UNIX, le utility di autocompletamento + UNIX di BASH + batteranno qualsiasi GUI in termini di potenza e velocità. –

0

Si utilizza la riga di comando quando si desidera automatizzare le build del software. In genere ciò avviene quando sei pronto per rilasciare il software e devi eseguire altre operazioni, come la confezione dell'installatore, oltre alla compilazione del software, prima di poter consegnare il software agli utenti.

Oltre a questo, è necessario utilizzare sempre un IDE per il debug, la compilazione e la modifica del codice.

+4

Sempre? È un po 'troppo generico :) Posso pensare a molte istanze, con prodotti reali, in cui un IDE è eccessivo (e quindi non necessario) – KevinDTimm

+4

Non posso dire di essere d'accordo. Potrebbe essere solo la mia eredità UNIXy, ma sono molto produttivo con 'gdb' +' vim' + 'make' - e inoltre, usando questi mezzi, posso essere produttivo con nient'altro che una connessione SSH a bassa larghezza di banda da un netbook in chissà dove. –

+1

+1 Charles - Mi piace guardare i noobs lottare con i loro errori di configurazione della GUI mentre sto lavorando. Ma sono sposati con quella GUI. Guardali intorno da un personaggio all'altro prima o poi (mouse/tipo/mouse/tipo/fino alla nausea), è abbastanza per farti piangere. – KevinDTimm

14

una grande per me è l'editor. Amo davvero Vim, ed è piuttosto raro che un IDE abbia una buona emulazione di vim, specialmente visto che uso dvorak e devo rimappare molte chiavi. Per molte altre persone, direbbero la stessa cosa, tranne che sceglierebbero emacs.

La maggior parte degli editor di IDE impallidisce rispetto ai simili di vim o emacs. Ci sono caratteristiche che ti mancano o sono molto più difficili da ottenere per funzionare bene. Ad esempio, ctags ti aiuta sicuramente a saltare le definizioni di funzioni in vim, ma non è neanche lontanamente all'altezza di un sacco di IDE dal momento che in realtà comprendono la lingua. E, naturalmente, l'integrazione del debugger e la gestione dei progetti e simili non funzioneranno altrettanto bene in vim o in emacs perché non sono IDE completi (anche se puoi fare un sacco di cose con loro). Ma spesso, il potere di vim o emacs oscura qualsiasi cosa l'IDE abbia su di loro.

Inoltre, per quanto riguarda gli editor da riga di comando, possono essere eseguiti sulla riga di comando quando non si ha accesso a un ambiente con una GUI, quindi ci sono molte situazioni in cui tale flessibilità è una grande più.

Ovviamente, sarebbe bello poter combinare tutte le grandi funzionalità di vim o emacs con un IDE in piena regola e ci sono alcuni tentativi di farlo - ma ci sono sempre problemi con esso, e anche i migliori tentativi sono tutt'altro che perfetti. Quindi, spesso sei ancora bloccato con la scelta di vim o emacs e le funzionalità che portano o un IDE con le funzionalità che esso porta.

MODIFICA: Entrare nel motivo per cui vim o emacs è molto più potente sotto molti aspetti rispetto al tipico IDE potrebbe essere piuttosto lungo, e ci sono già diverse domande su SO che lo coprono.

Questa è una grande risposta su emacs: https://stackoverflow.com/questions/35809/why-are-vi-and-emacs-popular/35929#35929

Questo è un buon articolo su VI che sembra ottenere legata alla frequente: http://www.viemu.com/a-why-vi-vim.html

Per un rapido tentativo da parte mia di dare alcuni motivi per cui vim è più potente:

L'IDE tipico è fondamentalmente un blocco note truccato da un punto di vista dell'editing di testo. Si digita il testo e si utilizza il mouse per spostarsi (il che, sebbene a volte molto utile, può essere un po 'più lento rispetto all'uso della tastiera).Aggiungono funzionalità specifiche del codice come il completamento del codice, il rientro automatico del codice, la possibilità di saltare a definizioni di funzioni, strumenti di refactoring, ecc. (Ecco perché gli IDE possono essere così utili) Ma le loro abilità di modifica del testo sono generalmente piuttosto scarse. Potrebbero aggiungere alcune funzionalità utili come ctrl-d per eliminare una riga, ma ciò che aggiungono è generalmente molto limitato rispetto a quello che otterresti in vim o emacs.

Prendere l'eliminazione (un'operazione molto semplice) come esempio. In vim, è possibile utilizzare l'operazione di cancellazione con qualsiasi comando di movimento, creando un numero potenzialmente sconvolgente di modi per eliminare le cose.

  • dd eliminare un'intera linea.
  • 5dd Elimina 5 righe.
  • dj Sposta il cursore verso l'alto, eliminando tutto a sinistra sulla riga corrente e tutto a destra sulla riga sopra.
  • dG Elimina tutto da qui fino alla fine del file.
  • 7dgg Cancella tutto tra qui e la linea 7.
  • d% Passare alla brace o paren che corrisponde i prossimi parentesi o tutore (quello che viene prima) e cancellare tutto tra qui e là, tra cui il tutore o paren che si salta a
  • dw cancellare tutto tra qui e il prossimo inizio di una parola
  • de Cancella tutto tra qui e la prossima fine di una parola
  • D Cancella tutto tra qui e la fine della linea
  • 0.123.
  • d0 Elimina tutto tra qui e l'inizio della linea
  • d^ Elimina tutto tra qui e l'inizio della prima parola della riga
  • dty Elimina tutto tra qui e la successiva occorrenza di y su questa linea (o niente se non ci sono y tra qui e la fine della riga)

L'elenco potrebbe continuare all'infinito. E questo è solo per eliminare. Lo stesso vale per un'intera lista di altri comandi di base. E questo è solo comandi base. Ci sono molti, molti più comandi che sono più avanzati e abbastanza potenti. Vim può fare così tanto che molte persone che lo usano usano solo una minima parte di ciò che è in grado di fare.

La maggior parte degli IDE non ha nemmeno una frazione di una frazione di tali funzionalità di modifica. Hanno molte altre funzionalità specifiche per la programmazione e specifiche della lingua che mancano o mancano ed in cui sono molto più difficili da utilizzare: ad esempio buon completamento del codice sensibile al contesto, strumenti di refactoring, gestione del progetto, ecc. Ma come per le capibalit di modifica del testo, la maggior parte degli IDE non possono essere confrontati.

+0

@ Jonathan, l'editor Xcode è in realtà abbastanza buono, però. –

+0

@ Michael Oh, potrebbe benissimo essere. Non ho mai sentito parlare di Xcode prima d'ora. Potrei dover provarlo. Ma la maggior parte degli IDE ha un'emulazione vim abbastanza scarsa se ne ha affatto. E sono così abituato a pensare che, a meno che non riesca a fare praticamente un atto IDE esattamente come Vim (almeno per i comandi che uso), può essere molto frustrante. –

+1

@ Jonathan Non hai davvero quantificato come "La maggior parte degli editor di IDE impallidisce rispetto a simili a vim o emacs". Sono un utente avido di IDE e ho anche usato Vim e persino Emacs in passato e non vedo come gli IDE siano così standard di livello inferiore rispetto a Vim/Emacs. Spiega per favore. –

0

Commandline costruisce può essere automatizzato, e utilizzando strumenti standard come CMake per la riga di comando costruisce rendere tali costruisce cross-platform (notare che è possibile costruire un progetto Xcode dalla linea di comando usando xcodebuild, ma che funziona solo su Mac OS X con Xcode). L'automazione è incredibilmente importante perché consente, ad esempio, di creare un "hook" per il proprio sistema di controllo della versione per creare il progetto e rifiutare il codice che non viene compilato o per fare in modo che il server di integrazione continui periodicamente il progetto, in modo che puoi facilmente sapere quando sono state apportate modifiche al codice e correggerle rapidamente.

Oltre alla portabilità e all'automazione, la riga di comando è più veloce. Se stai usando un progetto Makefile o qualcosa del tipo C++ Project Template che usa CMake ma ha un wrapper Makefile, allora basta semplicemente il comando "make" per costruire. La seconda volta che costruisci, devi solo premere la freccia su, quindi premere INVIO per eseguire nuovamente "make". Anche se i principianti con la linea di comando potrebbero non essere molto veloci e trovare la GUI/IDE più semplice, una volta che hai usato la riga di comando per un po ', diventa molto più veloce di farlo con una GUI e tutti i movimenti e i clic del mouse sembrano lento e uno spreco di sforzi.

+1

Ci sono IDE che ti permettono di eseguire comandi arbitrari per la tua build e quindi ti permettono di mantenere i vantaggi delle build sulla riga di comando, ma ce ne sono anche molti che non lo fanno. Quindi, sicuramente dipende dall'IDE che stai usando. –

+1

@ Michael È possibile creare una soluzione IDE anche dalla riga di comando e anche "premere la freccia su" la seconda volta che si desidera creare, quindi non è qualcosa che i progetti gestiti con un IDE non possono fare. Inoltre, il fatto che devi modificare/mantenere i Makefile a mano può essere un estremo rompicoglioni. Hai anche detto che i movimenti ei clic del mouse (ad esempio facendo clic sul menu di configurazione nell'IDE) sembrano lenti e sprecano, ma trascurato di menzionare che gli IDE forniscono scorciatoie da tastiera per l'esecuzione della compilazione all'interno dell'IDE (nel caso in cui si muova il mouse il pulsante di creazione è troppo difficile da fare). –

+0

@Miguel, ho riconosciuto che è possibile creare sulla riga di comando (xcodebuild); tuttavia, non è una build portatile; ad esempio, non è possibile eseguire quel comando su Windows. Sono d'accordo sul fatto che mantenere i Makefile sia orribile, motivo per cui utilizzo CMake. –

3

Almeno in UNIX, gli strumenti da riga di comando sono maturi. I bug che ho a che fare sono molto oscuri a questo punto. vi, make, gcc, gdb - questi strumenti sono, in alcuni casi, 20 anni o più. Provato, testato, provato.

Inoltre, sono onnipresente. Tutti hanno vi, make, gcc. Non devo preoccuparmi di non avere il mio strumento-du-joir. Posso andare praticamente a chiunque box, e nessun problema, posso compilare, scrivere, eseguire il debug senza bisogno di imparare qualche strumento di fantasia.

2

Innanzitutto, c'è una scelta più ampia. Se si utilizza un IDE, si utilizzano gli strumenti che sono specificamente compatibili con esso, che potrebbero non essere gli strumenti che si preferiscono. Ci sono molte cose che puoi ottenere in un pacchetto integrato o come componenti, e le persone vanno in entrambe le direzioni.

In secondo luogo, molti sviluppatori si sono abituati agli strumenti Unix, che sono maturi, molto potenti e destinati a essere utilizzati da soli. Non c'è una tradizione del genere su Microsoft Windows, e gli IDE hanno governato lì dal Turbo Pascal. (Il grande vantaggio di Turbo Pascal era che, nei giorni precedenti a qualsiasi tipo di multitasking, non era necessario avviare e arrestare l'editor, quindi eseguire il compilatore e il linker separatamente prima di eseguire il test.)

Terzo, è davvero facile automatizzare tutto ciò che faresti da una riga di comando. È più difficile fare queste cose in una GUI di qualsiasi tipo, sia nel senso che gli strumenti sono molto più difficili da sviluppare, sia nel fatto che sono più difficili da imparare. Anche in questo caso, c'è una lacuna culturale qui, poiché la tradizione Unix è quella di gestire complicate procedure automatizzandole e la tradizione Microsoft è quella di creare GUI e procedure guidate.

In quarto luogo, per la gestione di sistemi complicati, non esiste ancora un metodo chiaramente migliore di una rappresentazione di testo leggibile. La sintassi dei makefile di Unix non è buona, ma avrebbe evitato il problema che avevo di recente, in cui la configurazione di un passaggio di post-produzione in una configurazione di un file di progetto Visual C++ era errata in un caso ed era difficile individuarla. Usando un makefile e un vim, posso semplicemente e in modo affidabile cambiare il modo in cui un determinato progetto verrà compilato e compilato. È molto più difficile con Visual Studio.

Problemi correlati