Vantaggi e svantaggi della strutturazione di tutto il codice tramite classi e compilazione in classi (come Java)

13

Modifica: la mia lingua consente l'ereditarietà multipla, a differenza di Java.

Ho iniziato a progettare e sviluppare il mio linguaggio di programmazione per scopi educativi, ricreativi e potenzialmente utili.

All'inizio, ho deciso di basarlo su Java.

Ciò implicava che tutto il codice sarebbe stato scritto in forma di classi e che il codice viene compilato in classi, che vengono caricate dalla VM.

Tuttavia, ho escluso funzionalità come interfacce e classi astratte, perché non ne ho trovato la necessità. Sembravano imporre un paradigma, e mi piacerebbe che il mio linguaggio non lo facesse. Volevo mantenere le classi come unità di compilazione, perché mi sembrava comodo da implementare, familiare, e mi è piaciuta l'idea.

Poi ho notato che sostanzialmente sono rimasto con un sistema di moduli, dove le classi potevano essere usate come "namespace", fornendo costanti e funzioni usando la direttiva static , o come modelli per oggetti che devono essere istanziati ( scopo "effettivo" delle lezioni in altre lingue).

Ora mi chiedo: quali sono gli svantaggi e gli svantaggi di avere le classi come unità di compilazione?

Inoltre, qualsiasi commento generale sul mio design sarebbe molto apprezzato. Un post informativo sulla mia lingua può essere trovato qui: link .

    
posta jcora 19.12.2012 - 00:26
fonte

2 risposte

6

what are the benefits of having classes as compilation units?

Può ridurre la complessità della lingua. Non c'è bisogno di diversi costrutti, tutto è trattato allo stesso modo. In alcuni progetti (anche se non sembra il tuo), puoi trarre vantaggio dal non avere statica e dai problemi di progettazione a cui tendono ad incorrere (problemi di ordine di inizializzazione, limiti di concorrenza, imbarazzo con classi generiche / tipo). Consente inoltre alcuni vantaggi del concetto di modulo come istanze di moduli isolati per sandboxing o parallelizzazione; e la digitazione del modulo in cui le dipendenze si adattano ad alcune interfacce e l'intero valore del modulo di implementazione può essere istanziato e inserito.

Detto questo, il concetto tende ad avere più problemi del solito. Realisticamente, non puoi trattare tutto allo stesso modo, poiché le classi di "livello superiore" hanno bisogno di regole speciali come avere un costruttore predefinito (oppure ti imbattono in problemi dispari che li fanno girare). La modularità delle unità di compilazione tende a diventare davvero imbarazzante. In che modo una classe fa riferimento agli altri quando sono solo classi? Come vengono gestite queste dipendenze e come si determina l'ordine corretto per far girare le classi? Come ci si assicura che i riferimenti di classe duplicati vengano riutilizzati da diverse parti dell'app (o come si gestiscono le istanze duplicate se questa è la semantica desiderata)?

Dopo averlo esaminato, ho riscontrato molti problemi con le dipendenze, esaminando correttamente le cose e i problemi di inizializzazione. Finisci per incappare in problemi che rendono speciali le "classi di alto livello" e molte limitazioni per farle funzionare che finisce per modellarle in spazi dei nomi semplici.

    
risposta data 19.12.2012 - 05:17
fonte
4

Invece di rispondere a questa domanda, salirò di un livello e suggerisco di studiare il MIT OpenCourseWare , in particolare 6.035 (Ingegneria linguistica del computer). Questo spiegherà l'intera problematica, in modo tale da non essere tentato di fare di nuovo domande come questa.

Ingegneria linguistica del computer

L'unico prerequisito è Java.

link

Descrizione del corso

Questo corso analizza i problemi associati all'implementazione di linguaggi di programmazione di livello superiore. Gli argomenti trattati comprendono: concetti, funzioni e strutture fondamentali dei compilatori, l'interazione tra teoria e pratica e l'uso di strumenti nella creazione di software. Il corso include un progetto multi-persona sulla progettazione e implementazione del compilatore.

    
risposta data 21.12.2012 - 16:23
fonte

Leggi altre domande sui tag