Interfacce go-like + multi-metodi hanno senso?

1

Pensando al design di un potenziale nuovo linguaggio, mi chiedo quanto siano correlati i concetti di un OO simile a interfacce e multi-metodi GO (ottengo questo da link ).

Se capisco bene, le interfacce sono semplicemente un gruppo di metodi che devono essere implementati da ogni discendente, e i multi-metodi forniscono un buon modo per specializzarli senza fare molti standard o casting.

Tuttavia, è mia intuizione che entrambi potrebbero funzionare bene insieme, ma mi chiedo se sia corretto. Ad esempio, se un'interfaccia dichiara:

type Animal interface {
    Speak() string
}

func (d Dog) Speak() string {
    return "Woof!"
}

ma in julia è più simile a:

speak(x::Dog) = return "Woof!";

Quindi sembra che entrambi facciano lo stesso, ma diversi. Sarà un disastro fare entrambe le cose? Quando potrebbe avere senso?

Inoltre, cosa rende un percorso "migliore", se solo uno deve essere usato?

    
posta mamcx 05.04.2014 - 05:29
fonte

2 risposte

1

Dato che esistono già delle lingue che tengono conto dei possibili comportamenti che stai prendendo in considerazione, la domanda è: quale sarebbe meglio per i tuoi utenti?

Per creare un linguaggio di programmazione è necessario un pubblico di sviluppatori che lo utilizzeranno. Quando fai una domanda di questo tipo, chiedi quali scelte saranno più adatte ai tuoi utenti.

Se i tuoi utenti provengono da una comunità specifica (ad esempio convertiti da C, C ++, C #, Java, Go o Julia), scegli di fornire qualcosa di familiare o qualcosa con vantaggi specifici. Leggi il Razionale per avere un'idea di come funziona.

Se i tuoi utenti sono accademici, linguistici o dilettanti linguistici, allora ti sforzi di fornire qualcosa di nuovo e interessante, che sia utile o meno. Mi viene in mente un linguaggio come Befunge.

Se l'unico utente è te stesso, fai ciò che ti piace. Letteralmente.

Il mio pubblico è sempre stato uno sviluppatore che vuole semplificare le proprie vite nascondendo dettagli inutili. L'approccio di Julia mi sembra abbastanza buono. Non posso dirti quali saranno le conseguenze finché non saprò chi sono i tuoi utenti.

Quindi se il target è developers that do business apps, web backends, mobile e vuoi semplificarti la vita, allora prendi un'app scritta in una lingua e vedi come la riscriveresti nella tua nuova lingua in (diciamo) metà o un quarto o un decimo delle linee di codice. Quali dettagli nasconderai? Dove lo nascondi?

I linguaggi di scripting come python / perl / ruby sono implementati in C / C ++. Nascondono cose come allocazione di memoria, puntatori, hash e liste collegate, ricerca di stringhe, loop usando la garbage collection, i riferimenti, gli array associativi, le espressioni regolari e la logica map / apply. Il codice è ancora in basso nel runtime, ma la lingua funziona a un livello più alto.

Forse puoi prendere concetti come quelli che stanno arrivando ad un livello ancora più alto con il codice dichiarativo, la ricerca del risultato e la corrispondenza dei modelli, ma sarebbe una domanda completamente diversa.

    
risposta data 12.04.2014 - 13:20
fonte
0

Voglio davvero incoraggiarti a farlo. Sembra interessante e forse nuovo (non ho fatto ricerche).

Posso spiegarti due motivi:

Interfacce go-like su interfacce tipo Java?

Supponiamo di creare una nuova interfaccia per tutti gli oggetti che possono "leggere". Gli oggetti della libreria standard sono conformi ad esso. Ma in Java, questa interfaccia deve essere nota alla libreria standard. Due interfacce uguali possono essere uguali ma non uguali. Per conformarsi ad un'altra interfaccia è necessario adattare il codice della libreria standard. Questo potrebbe ostacolare se si dispone di un processo di sviluppo molto decentralizzato. Esempio

Multimethods con interfacce

Un'interfaccia non è un tipo. Avrai problemi (problemi) con identità.

Interface Dog {bark()};
Interface Wolf {bark(); pack()};

multimethod a(Dog);
multimethod a(Wolf);

// calling a
a(aWolf) // a wolf has the same ablilities as a dog. Which method to choose?

Mi piacerebbe vedere una soluzione comprensibile.

    
risposta data 14.05.2014 - 17:06
fonte

Leggi altre domande sui tag