C'è ancora qualche valore nell'apprendimento delle lingue di assemblaggio oggi? [chiuso]

5

Specificamente per un programmatore di giochi.

Se avevi davvero bisogno di alcune routine di assemblaggio, potresti cercare aiuto, mentre negli anni '80 / '90 era una delle lingue tradizionali. Ho letto che i compilatori possono generalmente uguagliare (o battere) la maggior parte del codice di assemblaggio scritto a mano, quindi a meno che tu non sia un programmatore incorporato che può programmare solo alcuni dispositivi in assemblaggio, ad esempio, c'è un vero punto di apprendimento al giorno d'oggi?

    
posta graham 15.07.2014 - 20:52
fonte

3 risposte

10

L'assemblaggio non è mai stata una lingua tradizionale. Lo impari per le stesse ragioni per cui la gente lo ha imparato negli anni '80 / '90, e prima ancora: è vicino al metal.

Lingua dell'assembly di apprendimento:

  • Ti insegna come funziona la macchina e
  • Ti dà accesso alle migliori prestazioni possibili (in teoria).

Dico "in teoria", perché non viene senza un costo. Tutto ciò che ottieni gratuitamente nei linguaggi di livello superiore (matematica, I / O, alcune strutture organizzative) è una parola d'ordine in linguaggio assembly, perché stai letteralmente costruendo tutto da zero.

Ecco perché, quando viene utilizzato l'assembly, in genere lo si trova in metodi di libreria specializzati e in codice inline, mentre un linguaggio di livello superiore svolge la maggior parte del lavoro più impegnativo. Il linguaggio assembly ottimizza quel piccolo pezzetto di codice che trarrà il massimo vantaggio dall'ottimizzazione delle prestazioni.

I moderni compilatori offrono la maggior parte dei vantaggi delle prestazioni del linguaggio assembly, senza il costo cognitivo. Ma l'assemblaggio di apprendimento ti insegna ancora come la macchina funziona a un livello profondo e quella conoscenza influenzerà lo sviluppo del tuo software molto tempo dopo aver imparato l'assemblaggio, anche se non utilizzerai mai tutto il necessario.

Se decidi di imparare il montaggio, ti consiglio di apprenderlo su un dispositivo incorporato, come un Atmel AVR. Il numero di codici operativi da imparare è inferiore a un computer e non c'è alcun sistema operativo di cui preoccuparsi.

    
risposta data 15.07.2014 - 21:04
fonte
8

Penso che uno dei valori dei linguaggi di assemblaggio che spesso viene trascurato è il valore didattico. Sostengo che una lingua assembly è la migliore lingua d'ingresso per qualcuno che non ha mai programmato prima. Perché? Perché è semplice e spoglio. Nell'assembly ci sono fondamentalmente tre elementi: registri, opcode e indirizzi di memoria. Impara come combinare e abbinare questi tre elementi di base e puoi fare molto. Ora prendi C per esempio, per qualcuno che non ha mai codificato prima, C è dannatamente complesso. Sin dall'inizio, hai funzioni, #include s, macro, strutture e altro. C'è molto da imparare. Vai a un linguaggio di livello superiore come Java e poi hai l'intero concetto di classi e oggetti che devono essere capiti in anticipo. La mia opinione personale è che quando imparo qualcosa di nuovo, preferisco iniziare in piccolo. Questo è il motivo per cui penso che l'assemblaggio sia uno strumento didattico trascurato.

Ora sugli aspetti pratici, quando si ottiene il lavoro di ottimizzazione del codice, c'è anche un valore nella capacità di leggere e comprendere l'assemblaggio. Un sacco di ottimizzazioni riguardano la lettura del codice compilato e la visione del punto in cui il compilatore sta fallendo e di come modificare il codice di livello superiore in modo da consentire al compilatore di generare un codice macchina più veloce.

In particolare sulla programmazione del gioco, se guardi indietro agli anni '80 e '90, c'era un sacco di programmi di assemblaggio in corso su giochi e altri software ad alte prestazioni, principalmente perché era una necessità urgente. La maggior parte dei giochi utilizzava il codice assembly per poter accedere a caratteristiche hardware speciali, come le istruzioni di vettorizzazione come MMX / SSE / AltiVec / etc. Oggi, queste istruzioni di vettorizzazione sono disponibili come intrinseche del compilatore, quindi c'è poco guadagno nella loro scrittura usando assembly.

Un altro problema che sta trascinando i programmatori di giochi dall'assemblaggio è la portabilità. Non molti studios possono permettersi di pubblicare i propri giochi su un'unica piattaforma in questi giorni. È necessario scrivere codice portatile, quindi l'assembly viene utilizzato solo come ultima risorsa.

Le console di ultima generazione come la PS3 vedevano ancora un bel po 'di programmazione degli assiemi, principalmente a causa delle sue caratteristiche hardware speciali a cui non si poteva accedere in nessun altro modo. Ma l'hardware next-gen è molto più vicino ai PC desktop in architettura e prestazioni, quindi ancora una volta, l'assembly sta perdendo spazio lì.

    
risposta data 15.07.2014 - 22:21
fonte
5

Ovviamente c'è value . Dipende solo se il valore è sufficiente per compensare il costo .

Se programmi regolarmente moduli Kernel, driver di dispositivo o algoritmi lockless ad alte prestazioni basati su primitive atomiche specifiche dell'hardware, a volte il linguaggio assembly è la tua unica scelta. Se vuoi che questi tipi di attività di programmazione siano a tua disposizione, il costo dell'assemblaggio può valerne la pena.

Se sei principalmente uno sviluppatore PHP che crea applicazioni web e non sei interessato a fare altro, probabilmente non hai molto spazio per l'assemblaggio.

Ancora, l'apprendimento ha valore , nel senso che ti aiuterà a mettere in prospettiva il tipo di codice che scrivi ad un livello più alto. Alla fine della giornata, nonostante tutto il nostro codice di gestione delle funzioni orientato agli oggetti e di ordine superiore, i programmi che scriviamo alla fine vengono compilati in un flusso di codici operativi, eseguito senza mente da un processore: carica, archivia, carica, archivia, cmp, salta, carica, archivia, ecc.

L'assembly di apprendimento offre una prospettiva e in questo senso ha valore . Ma ancora, se il valore vale o meno il costo dell'apprendimento dipende probabilmente dal tipo di programmatore che si desidera essere.

    
risposta data 15.07.2014 - 23:29
fonte

Leggi altre domande sui tag