Incapsula le funzioni C standard?

4

Mentre studio il linguaggio di programmazione C e apprendo pratiche sicure, sono propenso a scrivere un livello di funzionalità su diverse parti della libreria standard. Ciò servirebbe a due scopi: potrei usare parti standard della lingua in modi che mi sembrano più familiari o razionali, e potrei facilmente sostituire quella funzionalità con la mia, se necessario.

Potrei trarne beneficio, ma dovrei farlo? Ad esempio, possiamo considerare la gestione della memoria. Se ho scritto malloc () nei costruttori di ciascuno dei miei oggetti, quindi decido che devo gestire l'allocazione della memoria da solo, devo modificare il costruttore associato a ogni oggetto. Facendo riferimento alla mia funzione, posso modificare il contenuto di quella funzione senza scrivere un nuovo costrutto.

Sembra ovvio che dovrei farlo, ma sono abituato a Python. Sono estremamente a mio agio in quell'ambiente e non ho problemi a collegare qualsiasi parte della libreria standard da qualsiasi parte del mio programma, perché so che quasi certamente lascerò intatto quel rapporto per la vita del progetto. La situazione in cui mi imbatto in C mi sembra di cercare di nascondere la lingua da me stesso.

La scrittura di un livello di funzionalità rispetto alla libreria standard C mi aiuterà nell'apprendimento della lingua e nello sviluppo di una base di codici, o soffocherà la mia comprensione in futuro?

    
posta Jack Stout 19.09.2013 - 07:12
fonte

4 risposte

8

Penso che potrebbe esserci qualche utilità nello scrivere il tuo livello, a patto che tu mantenga una prospettiva appropriata.

Quando interagisci con altre persone sul tuo codice, dovrai comunque parlarne in termini di funzioni standard.

Ma potrebbe aiutarti a sfornare applicazioni simili se riesci a concludere un bel set di routine che è utile. Nel peggiore dei casi, l'artefatto con cui potresti finire sarà poco più di un file snippet ben organizzato. E questa non è una brutta cosa Questo è iff che tieni in prospettiva.

C'è il pericolo di andare fuori bordo. Fondamentalmente implementando la tua lingua entro C. E, beh, questo è un territorio pericoloso e pazzo! Potresti cogliere qualcosa di veramente bello e diventare la prossima grande cosa (potrebbe succedere!) O rimbalzare intorno agli infiniti cerchi della speculazione: oh, e questo potrebbe essere espresso come questo , e tutto ciò sarebbe più semplice attraverso l'interfaccia questa e convertirai tutto in una nuova rappresentazione super-canonica , e ...

xkcd:"Standard"

link

Credo che la zona pericolosa di cui sto parlando sia approssimativamente la stessa di "Architettura Astronauta "paradigma . < yoda > Ricorda: non costruire un altro motore di gioco, crea un gioco. Quindi una seconda partita. Quindi un terzo gioco. Quindi puoi costruire un motore. < / yoda >

Scrivere un livello sull'API è un possibile metodo per creare un'applicazione. È l'approccio adottato da uno dei libri X11 più leggibili che abbia mai trovato: X Window Applications Programming (Johnson & Reichard) (la serie continuava ad usare la sintassi della funzione K & R almeno fino al 1996!), Ma per uso pedagogico valore, non ha prezzo. Come ho accennato sopra, un file di frammenti ben organizzato .

    
risposta data 19.09.2013 - 08:06
fonte
4

La tentazione di scrivere un livello sopra un'API standard è comune tra i principianti. Ci sono stato anche io.

Sebbene si possano trovare benefici a breve termine, consiglio vivamente di non farlo. L'API standard è, per definizione, standard. È conosciuto e utilizzato da tutti gli sviluppatori e prima o poi dovrai conoscerlo e usarlo. Non ritardare questo apprendimento incapsulando l'API standard con qualcosa che solo tu conoscerai.

    
risposta data 19.09.2013 - 07:42
fonte
2

+1 @mouviciel.

Sono entrato in C dall'autostrada Pascal (Turbo Pascal e sì, era un lungo tempo fa). Ho deciso che C aveva bisogno di "Inizia" e "Fine" e ha lottato per mesi senza successo. Alla fine ho rinunciato perché c'erano pesci più grandi di cui preoccuparsi. Eventuali modifiche interpretative dovranno essere logiche per chiunque debba aggiornare il codice in pochi mesi (o anni). Le probabilità sono che non accadrà perché non sei tu e non hai il tuo POV. Il tuo codice (e la tua reputazione) verranno lanciati sotto il bus proverbiale.

Suggerisco di mordere il proiettile e scavare. Abbraccia il preprocessore. Dovrai fare i conti con l'incapacità del livello di presentazione di controllare il funzionale (il paradigma Pythonic White Rules Rules). Consiglio anche di passare al C ++ poiché hai già superato l'ostacolo O-O. Amerai più classi base e dovrai fare il tuo GC.

Il mio riferimento preferito era l'Harbison-Steele ma che (come notato) erano molte lune fa.

    
risposta data 19.09.2013 - 08:32
fonte
0

Il passaggio da Python a C / C ++ è un notevole salto di complessità e non sorprende che tu voglia trovare un modo per gestire tale complessità nel tuo codice.

In realtà, il tentativo di scrivere il proprio livello di gestione della complessità fallirà. In parte, perché probabilmente non ne sai abbastanza del linguaggio e come usarlo efficacemente per fare un buon lavoro, e in secondo luogo ci sono già delle librerie là fuori che forniscono ciò che stai cercando (anche se in modo C / C ++, non python)

Buona lettura del codice della libreria di modelli standard, in particolare intorno alle classi shared_ptr e auto_ptr come modi per gestire in modo sicuro la memoria heap. Questo, nel tempo, ti darà una buona comprensione del modo di risolvere i problemi in C ++, piuttosto che provare a usare C ++ per scrivere il codice Python.

    
risposta data 19.09.2013 - 08:22
fonte

Leggi altre domande sui tag