Già molti riferimenti straordinari nei commenti! Ma proviamo a farlo in breve:
Modulo: un software autonomo (ad esempio tipi, struttura dati, funzioni), che può essere combinato con altri moduli per costruire un software più complesso.
Riferimenti che supportano questa definizione:
- Nel 1978, è stato proposto di introdurre moduli per Algol68 , al fine di affrontare esigenze di compilazione e protezione separate (incapsulamento). La nozione è stata esplicitamente considerata come ortogonale ai tipi astratti.
- Nel 1978 è stata introdotta la lingua Modula 2 , che è stata costruita sulla nozione di moduli per offrire compilazione e incapsulamento separati. Ha distinto la definizione del modulo (interfaccia) dall'implementazione del modulo.
- Nel 1983, il linguaggio ADA è stato reso disponibile con tutti i concetti necessari per costruire sistemi molto complessi. I moduli in esso sono chiamati pacchetti ADA . Offrono la possibilità di una compilazione separata, ma lo scopo è anche quello di raggruppare entità logicamente correlate.
- Nel 1996, è apparso il linguaggio Java, e ha offerto anche la nozione di pacchetto , per raggruppare in uno spazio dei nomi logicamente correlato classi. Ma qui la compilazione separata e l'incapsulamento sono già offerti dalle classi. L'obiettivo è più il raggruppamento di classi correlate.
Tutti questi esempi (oltre a futuri moduli C ++ ), rientrano in questa definizione proposta.
Plugin: un plug-in è un componente software pronto all'uso che può essere aggiunto a un software esistente per modificare le funzioni di aggiunta.
Riferimenti e argomenti che supportano questa definizione:
- Intuitivamente, un plugin è qualcosa che devi semplicemente inserire in una presa esistente per farlo funzionare istantaneamente.
- Secondo wikipedia si tratta di un componente software che aggiunge una funzionalità specifica a un computer esistente programma.
- Ho aggiunto "pronto all'uso" a questa definizione perché tutti gli esempi di wikipedia sono componenti pronti per l'uso: li scarichi e li integri nel software esistente senza necessità o compilazione / costruzione. Senza "pronto all'uso" non si farebbe la differenza con il modulo.
- "Dinamica" e "Interfaccia binaria delle applicazioni" sono problemi ricorrenti in framework di plugin .
- In realtà, l'alleanza OSGI definisce una architettura java per un "sistema di moduli dinamici". Le specifiche java JSR291 sottostanti si riferiscono a "dynamic package import". Ciò si sposa perfettamente con la nostra comprensione dei moduli. Sfortunatamente, questa architettura usa i termini "modulo" in complemento di "servizio" che, quando la parola dinamica è omessa, potrebbe essere molto ambigua.
Estensioni: ??
Penso che non ci sia consenso sul termine estensione. Personalmente, lo vedo come sinonimo di plugin. Ma la nozione di dynamic / ready-to-use non è affatto suggerita da questo termine, quindi potrebbe anche significare un'estensione in fase di compilazione / tempo di compilazione. Alcune persone potrebbero persino usarlo per una versione su misura di un software.